运行程序 flag显示乱码
IDA打开查看程序逻辑
1 int __cdecl __noreturn main(int argc, const char **argv, const char **envp) 2 { 3 int v3; // ecx 4 CHAR *lpMem; // [esp+8h] [ebp-Ch] 5 HANDLE hHeap; // [esp+10h] [ebp-4h] 6 7 hHeap = HeapCreate(0x40000u, 0, 0); 8 lpMem = (CHAR *)HeapAlloc(hHeap, 8u, unk_409B34 + 1); 9 memcpy_s(lpMem, unk_409B34, dword_409B10, unk_409B34); 10 if ( sub_40102A() || IsDebuggerPresent() ) 11 { 12 __debugbreak(); 13 sub_401000(v3 + 4, lpMem); 14
1 unsigned int __fastcall sub_401000(int a1, char *a2) 2 { 3 int v2; // esi 4 char *v3; // eax 5 unsigned int v4; // ecx 6 unsigned int result; // eax 7 8 v2 = dword_409B38; 9 v3 = &a2[strlen(a2 + 1) + 2]; 10 v4 = 0; 11 result = ((unsigned int)(v3 - (a2 + 2)) >> 2) + 1; 12 if ( result ) 13 { 14 do 15 *(_DWORD *)&a2[4 * v4++] ^= v2; 16 while ( v4 < result ); 17 } 18 return result; 19 }
15 ExitProcess(0xFFFFFFFF); 16 } 17 MessageBoxA(0, lpMem + 1, "Flag", 2u); 18 HeapFree(hHeap, 0, lpMem); 19 HeapDestroy(hHeap); 20 ExitProcess(0); 21 }