本帖最后由 鱼无论次 于 2019-9-5 23:17 编辑
理论知识:
1、为什么需要重定位
因为特殊情况这块地址不给用了你要挪到另外一个地方,你本来是在哪里的挪到另外一个地方你还是在哪里
如下图所示:
小明在教室A是第一排,搬到教室B小明还是第一排
2、待修复数据如下:
push 0xFACE0002 -------->修复后是:0
mov edi,0xFACE0003 -------->修复后是:新区段首地址VMcontext
jmp dword ptr ds:[eax*4+0x474FCF] -------->修复后是:Handle块
jmp short 00474984 -------->修复后是:VMDispatcher
总结:
1、这些地址直接使用肯定会报错,因为这些地址是基于加壳机的,并非我们被加壳程序的。
2、我们要将所有地址修复成基本我们被加壳程序的
3、我们要修改两处:struct_DisassemblyFunction->LODWORD_VMP_Address跟struct_DisassemblyFunction->ReadHexAddress
4、基本要修复都是有:Displacement、Immediate这些
3、如图所示
第一种:修复struct_DisassemblyFunction->LODWORD_VMP_Address
修复前:
修复后:
第二种:修复struct_DisassemblyFunction->ReadHexAddress
典型例子1:
00474991 FF2485 CF4F4700 jmp dword ptr ds:[eax*4+0x474FCF]这一句不修复肯定执行会错误
我们要修复这一句的Displacement,改成一个被加壳程序存在的地址就Ok了
例如:jmp dword ptr ds:[eax*4+0x4051BB]
典型例子2:
Jmp VMDispatcher
公式: jmp后的偏移量=目标地址-原来地址-5 5是指令长度
|