我有一个现有的PE二进制文件,我手动修补。我正在复制.text
部分(在开头)并将其添加到部分表的末尾。然后,我用所有.text
覆盖第一个/旧0xCC
部分。由于这种变化,指令本身的虚拟地址当然会改变。由于我在添加/移动的mov eax, dword ptr [rip + 0x2024]
部分中有.data
(它将指向.text
部分中的地址)的说明,因此它会指向错误的内容(因为{{1}因为整个指令处于一个新的RVA,它不会再指向rip
部分中的那个位置)。
我是否还需要手动修补实际的机器代码,以便它再次指向.data
部分中的正确偏移量?或者有更好/更聪明的方法来修复我的PE图像,以便现有的机器代码在新的/移动的部分中工作?
我想将它移动到最后一个新部分的原因是因为我正在改变原始代码(添加死代码,nops等)。由于这会导致代码的大小发生变化,因此在新的部分中移动整个变异代码(可能比原始代码大2-3倍)似乎更好。现在,我正在反汇编原始代码并修复所有.data
,call
和jmp
指令,以使用正确的RVA。我在这里做的工作多于必要吗?
是否可以使用重定位以更简单的方式实现我想要的目标?