P44代码节空白区添加代码

发布时间 2023-04-26 21:45:24作者: 摸鱼小曹

1.我们添加的代码不是c,不是汇编,而是二进制,因为exe都是二进制组成的,我们要知道一些汇编的硬编码,call的硬编码是E8,jmp的硬编码是E9

2.知道了call的硬编码,那么后面的地址是直接用编译器打开的地址吗?不是的,地址是经过转换得到的,公式:真正要跳转的地址=E8下一条指令的地址+X,X就是call后面的地址,因为call这一条指令的硬编码长度是五个字节,可以改成这样公式:真正要跳转的地址=(E8的地址+5)+X

3.添加代码前我们要判断ShellCode是否能放得下,就要SizeOfRaw-misc>shellcode的长度

4.我们要知道,添加的代码是正在运行中的,所以要加上ImageBase,但是我们是在ImageBuffer中添加的代码,ImageBuffer的起始地址是我们自己malloc出来的,不是真正在内存中执行的地址,所以我们要减去pImageBuffer加上ImageBase得到真正的运行地址

5.这个代码有两种写法,一是在FileBuffer中添加(需要注意内存偏移的文件偏移的影响),二是在ImageBuffer中添加(不需要注意内存文件偏移,因为文件已经拉伸了,我的代码写出来了,方便理解)

6.我们需要知道MessageBox的地址,我们在DT里面添加断点bp MessageBoxA,然后查看就知道断电的位置了

7.可以先尝试手动添加ShellCode,然后在代码添加ShellCode(重点练习内存偏移的文件偏移不一样的软件)

E8(call) E9(jmp)计算公式
真正要跳转的地址 = E8这条指令的下一行地址 + X
X = 真正要跳转的地址 - E8这条指令的下一行地址
X = 要跳转的地址 - (E8的地址 + 5)