首页
社区
课程
招聘
[求助]关于VMP的pacth hash的问题
2016-2-6 23:57 7266

[求助]关于VMP的pacth hash的问题

2016-2-6 23:57
7266
程序修改导入表会触发校验
我手上有一个程序是VMP加密的
在两处pacth了
一处是gethash处pacth
不是直接在程序里修改 而是call了自己dll的函数进来
一处是在nor8处pacth

请教下这个补丁的原理是如何的?
如何过VMP的文件校验?

path过的程序:http://pan.baidu.com/s/1pKemIbL
未path过的程序:http://pan.baidu.com/s/1ZTHTG

谢谢!

[培训]《安卓高级研修班(网课)》月薪三万计划,掌 握调试、分析还原ollvm、vmp的方法,定制art虚拟机自动化脱壳的方法

收藏
点赞0
打赏
分享
最新回复 (4)
雪    币: 129
活跃值: (323)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
xed 2016-2-7 03:36
2
0
什么版本 2.x吗。
t uts4you上有crc讲解

那个论坛右上角有搜索 Vmprotect
我也在研究VMP、可Q我一起研究
同时感谢4楼提供的资料
雪    币: 211
活跃值: (732)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
signed 2016-2-7 09:49
3
0
可否提供下连接 谢谢 新春快乐!
雪    币: 626
活跃值: (668)
能力值: ( LV9,RANK:270 )
在线值:
发帖
回帖
粉丝
MistHill 6 2016-2-11 11:41
4
0
VMProtect的校验有四部分。
1. 文件校验(File Check)
有个表,通常这个表只有4条记录。每个记录的字段依次为:校验的文件偏移Offset、校验的长度Length及校验和Hash。
这3个字段都是加密的,算法被V了,需要读懂反虚拟化的代码才能找出各自的算法。
对这个表本身没有校验。
通过APIs:CreateFile, CreateFileMapping, MapViewOfFile来定位校验的位置。

2. 内存校验(Memory Check #1)
这个与文件校验基本相同,当前被载入模块(Exe或Dll)的内存映像作为校验内容,所以各记录的第一个字段为加密的RVA。
各VMP版本,表的长度不同。若加密的RVA解密后为-0x1,则校验表结束,其它为垃圾表项。
这个表本身是有校验的,Hash保存在壳段的某个地方,可以改。
另外,校验发生在目标原来的各区段解密、解压缩之前,所以本质上仍然是“文件校验”。

3. 内存校验(Memory Check #2)
表结构与上面一样,但校验发生在目标解密、解压缩之后,这是真正意义上的内存校验。
即表项的内容用于校验壳代码和用户代码、数据。
这个表比第一个内存校验要大很多,同样以解密后的RVA为-0x1表示表结束。
最关键的是,表本身的校验Hash是Handler压栈的一个IMM32,没法直接修改。所以最简单的办法就是Patch一下GetHash Handler。

上面三种校验构成了VMProtect的一个SDK函数:VMProtectIsValidImageCRC。
即壳代码部分会隐式调用VMProtectIsValidImageCRC()来进行目标的完整性检查。
这部分很多人都知道,也讨论得比较多。

4. 随机内存校验(Random Memory Check)
这个对应于VMProtect的一个功能“VM Integrity Check”。
校验表与上面的不同:第一字段仍然为加密的RVA,第二字段为未加密的一字节长度,第三字段为Hash的NEG。
表项个数不定,由vPushImm2压栈。表本身没有校验。
这个校验发生在用户代码中被虚拟化的函数或代码片段里,每次用vRdtsc“随机”取一条记录来进行校验。主要用来保护用户的代码和数据。
校验未通过的话,不会报错,目标直接崩溃。好象以前只有SE的作者提到过这个校验。

更详细的讨论和具体例子可参阅我在t4y的回复。

[InlineMe] VMProtect IsValidImageCRC()

[DevirtualizeMe] VMProtect 2.13.5

祝各位春节快乐!
雪    币: 211
活跃值: (732)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
signed 2016-2-11 15:43
5
0
感谢 终于看到你的中文版了。我在T4U也看到了你给别人的回复  新年快乐!
游客
登录 | 注册 方可回帖
返回