题目描述
听说运行就能拿到Flag,不过菜鸡运行的结果不知道为什么是乱码
Solution
使用 DIE 查壳,发现是 PE32 文件,没壳:
打开程序会像题目说的那样,乱码:
把程序拖入 IDA,观察main()
函数的代码:
如果没有调试器,则用MessageBoxA()
打印一串乱码的 FLAG 后退出进程。我们希望进入construct_flag()
函数里。我们在 IDA View-A 里按空格,进入流程图:
我们要修改一些流程:
- 把
int 3
指令给NOP
掉,先鼠标点亮int 3
,然后依次点击 Edit → Patch program → NOP; - 执行完
construct_flag()
后,执行loc_4010B9
; - 判断完
isDebuggerPresent()
后,执行construct_flag()
;
最后依次点击 Edit → Patch program → Apply patches to … 保存为一个新的补丁文件,运行即可出 Flag: