查壳,是32位下由C++编译的可执行文件。
试一下运行,让用户输入密码,输入点Crack一点反应都没有。
拖进IDA看看,很多函数,找不到main函数,那就Shift+F12看看有什么字符串,有一个明显成功标志“well done”,双击进到只读数据段,Ctrl+X去到引用它的汇编代码处,再F5查看伪代码。
int __stdcall sub_401090(HWND hWnd, int a2, int a3, int a4)
{
char v5;
CHAR Text[4];
char v7;
__int16 v8;
char v9;
int v10;
CHAR String;
char v12;
char v13;
char v14;
memset(&String, 0, 0x104u);
v10 = 0;
if ( a2 == 16 )
{
DestroyWindow(hWnd);
PostQuitMessage(0);
}
else if ( a2 == 273 )
{
if ( a3 == 1000 )
{
GetDlgItemTextA(hWnd, 1002, &String, 260);
strlen(&String);
if ( strlen(&String) > 6 )
ExitProcess(0);
v10 = atoi(&String) + 1;
if ( v10 == 123 && v12 == 120 && v14 == 122 && v13 == 121 )
{
strcpy(Text, "flag");
memset(&v7, 0, 0xFCu);
v8 = 0;
v9 = 0;
_itoa(v10, &v5, 10);
strcat(Text, "{");
strcat(Text, &v5);
strcat(Text, "_");
strcat(Text, "Buff3r_0v3rf|0w");
strcat(Text, "}");
MessageBoxA(0, Text, "well done", 0);
}
SetTimer(hWnd, 1u, 0x3E8u, TimerFunc);
}
if ( a3 == 1001 )
KillTimer(hWnd, 1u);
}
return 0;
}
输入密码:122xyz就可得到flag。也可以用代码推测到flag{123_Buff3r_0v3rf|0w}
|