首页
社区
课程
招聘
[原创]vmp 过代码校验
发表于: 2019-12-17 22:13 8837

[原创]vmp 过代码校验

2019-12-17 22:13
8837


​简化后的代码

这个handler需要两个参数,分别是代码校验的地址和大小,通过xor 指令生成校验码,最后将堆栈的两个参数弹出,将校验码压栈,执行下一个handler

以通过OD的条件断点,在校验handler下断,分别打印出 vmcode(ESI) - 1 、传入的两个参数进行分析


日志冗长,就不贴了,经分析后一共有4处调用了校验handler,校验的部分分别是文件校验,代码校验,内存校验,随机校验


这4处校验handler调用之后的校验码比对部分有一个共同点,就是它们都是对ZF标志位进行判断


还有一个点就是hash比较后的结果会存储在一个寄存器中的BL位,也就是低字节,由堆栈弹出1字节并赋值,这里说的寄存器指的是vm context中的数据,虽然没有在每个hash handler中验证,但我猜测是一致的


在前3次处理中,会在vm context中保存循环的次数:


上图中的堆栈33F608的位置保存了循环次数为4次

这个值的位置是不固定的,需要自己手动分析

通过这个循环次数,和ZF的标志位判断就可以跳过校验部分了


校验码计算是使用刚刚计算的校验码与原校验码相减,然后判断ZF标志位

运算过程如下:

化简后是这样的:


[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

最后于 2019-12-17 22:15 被Hasic编辑 ,原因:
收藏
免费 2
支持
分享
最新回复 (5)
雪    币: 15
活跃值: (125)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
我靠,人才,完全看不懂
2019-12-17 23:08
0
雪    币: 2575
活跃值: (502)
能力值: ( LV2,RANK:85 )
在线值:
发帖
回帖
粉丝
3
能详细些就好了。
2020-1-3 14:29
0
雪    币: 650
活跃值: (4212)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
4
可以附上样本么
2020-1-9 15:02
0
雪    币: 612
活跃值: (479)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
5
一个helloworld自己加的vmp,找了一下没找到
最后于 2020-1-10 17:01 被Hasic编辑 ,原因:
2020-1-10 17:00
0
雪    币: 272
活跃值: (310)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
能过虚拟机验证吗?还有你这个VMP是什么版本的啊?
2020-4-5 22:23
0
游客
登录 | 注册 方可回帖
返回
//