

注意ebp的值已经入栈了。pushad的结果,对应寄存器值为:
esp = 12ffc0 (原来为12ffc4)
ebp = 12ffc0 = esp (原来为12fff0)
看看bss section:


全为0,就在这里dump。如果需要仔细跟stolen code,也可以从这里入手(可以从脚本停下的第6次div 0异常处理后开始)。
先用4d9de4为oep。

用loadpe查看节表:

先把code的vsize和rsize加大,以避免修复stolen codes时空间不够。

重新跟到false oep(4d9e37)。重建输入表。

用了add new section,会不会有问题(好象有篇脱文里提到过这个)? 先这样处理。
用ida编译dumped_.exe,结果不错。
现在剩下stolen code和replaced code。
5. 修复stolen code
既然不打算仔细跟,就只有猜了。对执行第1个call以前的stolen code进行猜测,应该是安全的。后面的4次call需要仔细看看。
1) call 406edc
在ida中看dumped_.exe的结果:

先执行脚本,停下后只勾选div 0异常。直到73a9af。经过一番遮遮掩掩的代码:

在call前的寄存器:

堆栈:

call完后,下面的pushad为分界线,标识stolen code的结束。所以到这里的stolen code为(对于不确定的,可以在packer ep修改寄存器值,到这里核对):
call完后,pushad前的环境:


发表评论