PE空白区添加代码
手动
目标是 notepad.exe
,它的文件 FileAlignment
和 SectionAlignment
是不一样的。难点在于以内存中的地址来进行计算偏移、寻找 MessageBox
函数的地址。
函数参数
首先到 .text
节的最后面空白区,也就是 0x400 + 0x7800 = 0x7C00 的前面,然后开始添加机器码,可以在 VC++6.0 写好源代码然后反汇编贴过来。
其中 6A 00
是压 00 入栈; E8
是 call
指令的机器码,后面跟的是目的地址与当前下一条指令地址的偏移量。
函数调用
而 MessageBoxA
的地址可以在 VC++6.0 中写一个调用,然后拖到 OD 中,在左下角打 MessageBox
的断点,然后按 Alt + B
查看断点,即可找到其地址所在。
我这里找到的是 0x77D507EA
(带ImageBase),然后减去下一条指令在内存中的地址, 0x100875D
,得到偏移量 0x76D4808D
,由于是小端序存储,所以需要倒着填入文件,
返回原入口点
E9
是 jmp
的机器码,后面跟的是也是偏移量,用原本 OEP(0x0100739D
,带ImageBase) - 下一条指令地址(0x108762
= 0x1000000 + 0x7B62 + 0xC00)即可,这个下一条指令地址是内存中的地址,需要加上 VirtualAddress
和 PointerToRawData
的差值(也就是下一条指令地址在文件中和内存中的距离)。
运行
最后运行,完成。
程序自动
待补充