mozhucy's blog.

初试程序自修改

字数统计: 257阅读时长: 1 min
2018/06/07 Share
  • 第一次遇到程序自修改的题目.
  • 程序主页面是一个窗口,输入后点确定,程序会崩溃,拖入OD查看逻辑,首先是一个跳转,到达程序下部,查看汇编后,发现程序有好多次类似于mov [eax],0x??????的操作.
  • 调试后发现,eax对应的值就是程序的代码段,eax的值,是由输入和imagebase决定,程序的eax被放入的初值为0x601605CB,所以当输入较小时,程序在运行过程中,会将0x90,也就是nop修改自身代码,这时,程序会因为非法修改内存而报错.
  • 这时考虑溢出eax来修改目的代码,在下跳语句的后一句,有一句跳转,绕过了”correct!”,而且机器码长度为2字节,观察下部代码,发现
    1
    2
    3
    call 0x????
    inc eax
    call 0x????

的操作,观察这个call 0x????可以看到,这就是0x90 nop程序的过程.故可以计算0x100401071-0x601605CB = 2687109798.

  • 窗口输入 2687109798 成功破解

CATALOG