下载发现是一个exe可执行文件
双击运行,输入密码123456 没有任何反应,当然没反应,密码肯定不对
请出IDA pro,我这里用IDA Pro v8.3演示,把exe文件拖拽到IDA打开
按shift +F12快捷键搜索字符串
我们发现第二行有可疑字符串,有flag嫌疑,双击上面的well done
well done里“Buff3r_0v3rf|0w”这个可以字符串又出现了,并都指向一个“DialogFunc_”函数
在左侧函数窗口双击这个函数,按快捷键F5编译
int __stdcall DialogFunc_0(HWND hWnd, int a2, int a3, int a4)
{
int v4; // eax
char Source[260]; // [esp+50h] [ebp-310h] BYREF
_BYTE Text[257]; // [esp+154h] [ebp-20Ch] BYREF
__int16 v8; // [esp+255h] [ebp-10Bh]
char v9; // [esp+257h] [ebp-109h]
int Value; // [esp+258h] [ebp-108h]
CHAR String[260]; // [esp+25Ch] [ebp-104h] BYREFmemset(String, 0, sizeof(String));
Value = 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);
v4 = atoi(String);
Value = v4 + 1;
if ( v4 == 122 && String[3] == 120 && String[5] == 122 && String[4] == 121 )
{
strcpy(Text, "flag");
memset(&Text[5], 0, 0xFCu);
v8 = 0;
v9 = 0;
_itoa(Value, Source, 10);
strcat(Text, "{");
strcat(Text, Source);
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;
}
if ( strlen(String) > 6 )
ExitProcess(0); #如果密码长度大于6位,程序退出
v4 = atoi(String); #把V4传递给函数atoi(String)
Value = v4 + 1;
if ( v4 == 122 && String[3] == 120 && String[5] == 122 && String[4] == 121 )
{
strcpy(Text, "flag"); #满足上面条件密码是正确输出flag
v4:122(10进制)
String[3] =120 (10进制) 对应ASCII表为x
String[5] =122 (10进制)对应ASCII表为y
String[4] = 121(10进制)对应ASCII表为z
所以密码是122xyz,运行程序输入得到flag
标签:Buuctf,String,esp,题解,122,v4,Text,Mysterious,ebp From: https://blog.csdn.net/weixin_34979095/article/details/141100857flag{123_Buff3r_0v3rf|0w}