题目描述

听说运行就能拿到Flag,不过菜鸡运行的结果不知道为什么是乱码

Solution

使用 DIE 查壳,发现是 PE32 文件,没壳:

010-1.png

打开程序会像题目说的那样,乱码:

010-2.png

把程序拖入 IDA,观察main()函数的代码:

010-3.png

如果没有调试器,则用MessageBoxA()打印一串乱码的 FLAG 后退出进程。我们希望进入construct_flag()函数里。我们在 IDA View-A 里按空格,进入流程图:

010-4.png

我们要修改一些流程:

  1. int 3指令给NOP掉,先鼠标点亮int 3,然后依次点击 Edit → Patch program → NOP;
  2. 执行完construct_flag()后,执行loc_4010B9
  3. 判断完isDebuggerPresent()后,执行construct_flag()

010-5.png

最后依次点击 Edit → Patch program → Apply patches to … 保存为一个新的补丁文件,运行即可出 Flag:

010-6.png