VMP学习笔记之壳的重定位修复(五)
本帖最后由 鱼无论次 于 2019-9-5 23:17 编辑理论知识:
1、为什么需要重定位
因为特殊情况这块地址不给用了你要挪到另外一个地方,你本来是在哪里的挪到另外一个地方你还是在哪里
如下图所示:
小明在教室A是第一排,搬到教室B小明还是第一排
2、待修复数据如下:
push 0xFACE0002 -------->修复后是:0
mov edi,0xFACE0003 -------->修复后是:新区段首地址VMcontext
jmp dword ptr ds: -------->修复后是: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:这一句不修复肯定执行会错误
我们要修复这一句的Displacement,改成一个被加壳程序存在的地址就Ok了
例如:jmp dword ptr ds:
典型例子2:
Jmp VMDispatcher
公式: jmp后的偏移量=目标地址-原来地址-5 5是指令长度
正文:
1、筛选Esi_Addr结构数据保存到ruct_VmpOpcodePY_50结构
将struct_DisassemblyFunction所在的数组下标保存到struc_69结构里
挑选jmp ret指令保存起来
struc_69结构定义如下:
总结:
1、struc_69结构
struc_69->ArrayNumber == Handle块头
struc_69->FilterArrayNumber == Handle块结束地址,也就是jmp或则ret
2、找到第一组Handle块在数组的元素下标,作为结尾标识
符合条件的是:解析JmpAddr跳转表,填充的VMOpcode都是0x23
然后对struct_VmpOpcodePY_50结构进行数组乱序
3、循环填充struc_SaveAllDisasmFunData->ArrayNumber(基本版)Vmp_Address(0x10)替换成实际壳的真实地址
每次执行完毕后sub_480BE0(a1a, ReadHexLen, v3->Characteristics & 0x20, 0i64)函数
struc_59->LODWORD_UserVmpStartAddr+=ReadHexLen;(默认的壳起始OEP(新区段的起始地址))
然后替换掉struct_DisassemblyFunction->LODWORD_VMP_Address为真正的地址
总结:
1、前面所有工作都是找到所有使用到的struct_DisassemblyFunction结构,然后对其地址进行替换成真实壳地址
替换前后对比:
前:
后:
4、修复特定值
push 0xFACE0002 ------>Push 重定位值
mov edi,0xFACE0003 ------>Mov edi,VMContext
5、修复所有 JMP VMDispatcher的地址
公式: jmp后的偏移量=目标地址-原来地址-5 5是指令长度
6、修复完毕后的样子
下一篇文章介绍:
1、伪代码构造
2、伪代码加密(前面构成出Add的解密代码,所以这里要对称整出一套加密代码)
正向就是解密,取反就是加密了
0x4=add ---->加密用sub0x5=xor ---->xor不变
0x34=sub ---->加密用add
0x43=rol 循环左移
0x44=ror 逻辑右移
0x5C=not 单操作数
0x29=inc 单操作数
0x2A=dec 单操作数
0x5D=neg 单操作数
0x31=bswap 单操作数
重定位说挺好理解的,我看别的教程我看不懂,有没有这类通俗易懂的说教程。我想深入理解重定位:'(weeqw 谢谢分享技术类文章 感谢分享 谢谢分享{:1_919:} 感谢分享 感谢发布原创作品,吾爱破解论坛因你更精彩! 有意思的逻辑设计哈,谢谢楼主分享 教程很不错 @鱼无论次 4了?
页:
[1]
2