题目描述
听说运行就能拿到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:

