一. 代码节空白区域添加代码
1. 根据SizeOfRawData - VirtualAddress的值来判断剩余空间是否足以添加代码
2. 根据SizeOfRawData + PointerToRawData来到空余部分
3. 将汇编指令转为硬编码:此处添加的代码是MessageBox,可以通过OD(走下角命令 bp MessageBoxA)来查看MessageBox的地址。
6a 00 6a 00 6a 00 6a 00 e8 00 00 00 00 e9 00 00 00 00
push 6a
call e8
jmp e9
目标地址 = 下一行地址(运行时的地址) + 硬编码(命令后的地址)
call :761a1060 - (01caad + 400000) = 75D8 45B3
000193BE + 400000 = 4193be 目标地址 (EIP地址 + ImageBase)
41cab2 下一行地址
jmp :FFFF C90C 硬编码
4. 改EIP
此时不用加上ImageBase
二. 任意节空白区添加代码
注意:在DOS后面是不可以直接作为程序入口添加硬编码的。
其他内容基本同上。
三. 增加节
需要修改的数据
1. 添加一个新的节(可以copy一份)
2. 在新增节后面 填充一个节大小的000
3. 修改PE头中节的数量
4. 修改sizeOfImage的大小
5. 再原有数据的最后,新增一个节的数据(内存对齐的整数倍).
6. 修正新增节表的属性