空白区添加代码
步骤
在空白区构建一段代码
修改入口地址为新增代码
新增代码执行后,跳回入口地址
添加代码

如上图,在0x830处添加代码,6A 00 执行4次压入MessageBox的参数,在反汇编工具中获取MessageBoxA的地址为0x771E34D0
E8和E9指令不能直接写入地址,计算公式为:要跳转的地址 - E8指令(CALL)当前的地址 - 5 = E8指令实际代码地址
计算E8指令的地址
0x00000838 VA = 0x00411438
MessageBoxA = 0x771E34D0
0x771E34D0 - 0x00411438 - 5 = 0x76DD2093
计算E9指令的地址
0x0000083D VA = 0x0041143D
0x00411023 - 0x0041143D - 5 = 0xFFFFFBE1
将计算后的结果按小端储存写入,E9跳转地址计算出来是一个负数,按补码形式写进去就行了。
修改程序入口

找到IMAGE_OPTIONAL_HEADER下的AddressOfEntryPoint(拓展PE头往后偏移16个字节),修改为0x830在内存中的偏移地址(RVA),此例中为0x411430
在OD中查看可以正常执行,执行完毕后再跳转到程序原本的入口函数

署名-非商业性使用本文采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 ZEKALRYN'S BLOG!
评论
