我们再看仔细一点,发现ebp首先会减掉一个值(内存地址为0x0054D0BA的指令sub ebp,[esp 20]),然后再把相减的结果赋值给僵尸血量(mov [edi 000000C8],ebp),那我们是不是可以在相减的这一行代码做一下手脚呢?当然可以,直接让其相减的结果为0,就能做到直接秒*僵尸了。怎么让其相减结果为0呢,只需要改成sub,ebp,ebp即可。
我们直接改一下,之前这一条sub指令是四个字节的,但是更改为sub ebp,ebp之后,只占两个字节,为了不影响后续的指令,再加上两个空指令nop填充。
最后神奇地发现,僵尸只要被打了一炮就死了,至此,我们从CE工具的角度完成了该功能的调试,紧接着我们做一个小程序实现这个功能,这个程序的要完成的任务很简单,就是直接修改内存地址为0x0054D0BA的指令修改为sub ebp,ebp, 然后再用两个nop填充即可,如上图,即把0x29,0xED,0X90,0X90这四个字节填充到0x0054D0BA处。
实现代码: