0%

[BJDCTF 2020]JustRE 静态分析解法

2026-01-24 13:16By
creationwong
C语言逆向逆向技术PE结构

Problem: [BJDCTF 2020]JustRE

思路

  • 我不会动态调试,所以使用IDA进行分析

过程

  • 2026.1.24 补充:使用 IDA 按下 Shift + F12 在字符串里面找就行。
  • 通过打开程序我们知道这个程序是一个带有窗口的程序。
  • 在上面菜单栏可以看到有一个 getflag 菜单项,点进去会弹出一个让我们一直单击来得到 flag 的窗口。(如果有时间的话可以一直点点(不是))
  • 使用 IDA 打开这个程序,来到后面 Data 区寻找 “您已经点了 1 次” 类似的字符串。转到流程图,按下 F5 生成伪代码。
  • INT_PTR __stdcall DialogFunc(HWND hWnd, UINT a2, WPARAM a3, LPARAM a4) { CHAR String[100]; // [esp+0h] [ebp-64h] BYREF if ( a2 != 272 ) { if ( a2 != 273 ) return 0; if ( (_WORD)a3 != 1 && (_WORD)a3 != 2 ) { sprintf(String, Format, ++dword_4099F0); if ( dword_4099F0 == 19999 ) { sprintf(String, " BJD{%d%d2069a45792d233ac}", 19999, 0); SetWindowTextA(hWnd, String); return 0; } SetWindowTextA(hWnd, String); return 0; } EndDialog(hWnd, (unsigned __int16)a3); } return 1; }

我们看到需要单击 19999 次(点完鼠标就报废了),我们注意以下语句

sprintf(String, " BJD{%d%d2069a45792d233ac}", 19999, 0);

相信学过 C 语言的立刻反应过来了,这是 printf 语句。想必已经知道 flag 是什么了。

总结

  • 还是需要学习动态调试啊(悲
还没有人赞赏,快来当第一个赞赏的人吧!
  
© 著作权归作者所有
加载失败
广告
×
评论区
添加新评论