手机网站建设技术方案,婚纱摄影服务,有限责任公司和股份有限公司,数字化营销与传统营销的区别思路#xff1a; 1.输出成功#xff0c;v26不为0,说明关系式#xff1a;v21((unsigned __int8)v24 ^ v20) →2.在汇编代码第37行#xff0c;输入v16v20#xff0c;所以求的值为v20 →3.根据关系式#xff0c;求的值v20v21^v24 →4.v21在第汇编代码第36行也可以提取出来… 思路 1.输出成功v26不为0,说明关系式v21((unsigned __int8)v24 ^ v20) →2.在汇编代码第37行输入v16v20所以求的值为v20 →3.根据关系式求的值v20v21^v24 →4.v21在第汇编代码第36行也可以提取出来 →5.v24可以由汇编代码40行while计算出来 首先载入IDACtrlF查找main函数没有找到然后ShiftF2查找字符串发现特殊字符串跟进然后交叉引用查看字符串位置寻找flag 反汇编如下
__int64 __fastcall sub_400F8E(__int64 a1, int a2, int a3, int a4, int a5, int a6)
{int v6; // edxint v7; // ecxint v8; // r8dint v9; // r9dint num; // ecxint v11; // r8dint v12; // r9dchar v14; // [rsp0h] [rbp-C0h]char v15; // [rsp0h] [rbp-C0h]char input[136]; // [rsp10h] [rbp-B0h] BYREFint v17; // [rsp98h] [rbp-28h]char v18; // [rsp9Fh] [rbp-21h]int v19; // [rspA0h] [rbp-20h]unsigned __int8 v20; // [rspA6h] [rbp-1Ah]char v21; // [rspA7h] [rbp-19h]int v22; // [rspA8h] [rbp-18h]int v23; // [rspACh] [rbp-14h]int v24; // [rspB0h] [rbp-10h]int v25; // [rspB4h] [rbp-Ch]_BOOL4 v26; // [rspB8h] [rbp-8h]int i; // [rspBCh] [rbp-4h]sub_407470((unsigned int)Give me the password: , a2, a3, a4, a5, a6, a2);sub_4075A0((unsigned int)%s, (unsigned int)input, v6, v7, v8, v9, v14);for ( i 0; input[i]; i );v26 i 22;v25 10;do{num (int)sub_406D90() % 22; // 猜测是一个正常的返回,v10的取值为0...21,如果不正常的话需要把sub_406D90逆向一下v22 num;v24 0;v21 byte_6B4270[num];v20 input[num]; // 将输入值v16赋值给v20v19 num 1;v23 0;while ( v23 v19 ){v23;v24 1828812941 * v24 12345;}v18 v24 ^ v20;if ( v21 ! ((unsigned __int8)v24 ^ v20) ) // 关系式既然v26不为0,说明v21((unsigned __int8)v24 ^ v20)// 在汇编代码第37行输入v16v20所以求的值为v20// v21在第汇编代码第36行也可以提取出来// v24可以由汇编代码40行while计算出来// 最后根据关系式求的值v20v21^v24v26 0;--v25;}while ( v25 );if ( v26 ) // 如果在这里输出说明v26不为0v17 sub_407470((unsigned int)Congras\n, (unsigned int)input, v24, num, v11, v12, v15);elsev17 sub_407470((unsigned int)Oh no!\n, (unsigned int)input, v24, num, v11, v12, v15);return 0LL;
}
编写脚本
int main(){unsigned char v21[] {0x5F, 0xF2, 0x5E, 0x8B, 0x4E, 0x0E, 0xA3, 0xAA, 0xC7, 0x93, 0x81, 0x3D, 0x5F, 0x74, 0xA3, 0x09, 0x91, 0x2B, 0x49, 0x28, 0x93, 0x67, 0x00, 0x00};for(int i0;i22;i){ //先假定是这样的一个顺序 int v230;int v240;int v19i1;while ( v23 v19 ){v23;v24 1828812941 * v24 12345;}printf(%c,v24^v21[i]);}
} flag{d826e6926098ef46}