BJDCTF2020-JustRE
法一
先运行程序看看,只有getflag能点
这个猜测CE应该能破
查壳32位无壳,IDA查看
main()函数没什么有价值信息
查找字符串看看
BJD{}
长得就很像flag跟进
1 | INT_PTR __stdcall DialogFunc(HWND hWnd, UINT a2, WPARAM a3, LPARAM a4) |
Format 点进去是‘您已经点了 %d 次’
说明dword_4099F0存的是点击次数
然后判断是否点击19999次,输出BJD{1999902069a45792d233ac}
说明flag是BJD{1999902069a45792d233ac}
CE验证也是对的
法二
这题还可以用动态调试解决
X32dbg 打开
先搜索一下字符串
跳转到40704c
简单阅读一下汇编语句
先将寄存器eax压入栈中
调用函数401410
将寄存器eax中的值赋值给4099F0地址结合之前静态分析可知4099F0就是点击次数
然后移动指针
寄存器eax中的值与0x4ELF比较0x4ELF即为19999
Jne就是若不相等就跳转到4013D0
而中间的内容大概看一下就是输出flag的
所以jne这条语句就是关键的判断,我们将他nop掉
F9运行,随便点一下就出现flag了
评论
TwikooWaline