PE空白区添加代码

手动

目标是 notepad.exe ,它的文件 FileAlignmentSectionAlignment 是不一样的。难点在于以内存中的地址来进行计算偏移、寻找 MessageBox 函数的地址。

函数参数

首先到 .text 节的最后面空白区,也就是 0x400 + 0x7800 = 0x7C00 的前面,然后开始添加机器码,可以在 VC++6.0 写好源代码然后反汇编贴过来。

image-20220815054851171

其中 6A 00 是压 00 入栈; E8call 指令的机器码,后面跟的是目的地址与当前下一条指令地址的偏移量。

函数调用

MessageBoxA 的地址可以在 VC++6.0 中写一个调用,然后拖到 OD 中,在左下角打 MessageBox 的断点,然后按 Alt + B 查看断点,即可找到其地址所在。

image-20220815055535998

我这里找到的是 0x77D507EA (带ImageBase),然后减去下一条指令在内存中的地址, 0x100875D ,得到偏移量 0x76D4808D ,由于是小端序存储,所以需要倒着填入文件,

返回原入口点

E9jmp 的机器码,后面跟的是也是偏移量,用原本 OEP(0x0100739D,带ImageBase) - 下一条指令地址(0x108762 = 0x1000000 + 0x7B62 + 0xC00)即可,这个下一条指令地址是内存中的地址,需要加上 VirtualAddressPointerToRawData 的差值(也就是下一条指令地址在文件中和内存中的距离)。

运行

最后运行,完成。

2022-08-15 06.12.57

程序自动

待补充