首页
社区
课程
招聘
[原创]vmp3.0.9全保护拆分解析
发表于: 2018-5-1 14:31 53457

[原创]vmp3.0.9全保护拆分解析

2018-5-1 14:31
53457

图片描述
以下为了避免插件干扰,故采用x64dbg原版进行分析。

图片描述
首先我通过检测到调试器的弹窗进行栈回溯,定位到该关键点:
CALL eax

由于才接触Vmp,所以是把各个保护拆分开来进行的分析,会比较简单一些,不过全保护其实也就是凑在一起罢了,只要注意顺序就行啦。

本帖只是分析基础保护反调试反虚拟机等,不涉及还原VM和分析VM代码的部分。属于新手贴一类,适合萌新观看,大佬轻喷,有错漏之处,敬请指正,谢谢。

EverEdit编辑器是加的一个vmp的壳子,虽然特征和这里分析的不太一致,但是反调试路子大致一样的,而且虽然是vmp但是通过trace跟踪和分析也是可以暴力破解的,可以拿来练手,这里推荐一下。

图片描述

图片描述

图片描述

图片描述

图片描述

图片描述

图片描述

图片描述


[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

最后于 2018-5-1 14:36 被cat喵编辑 ,原因:
上传的附件:
收藏
免费 7
支持
分享
最新回复 (42)
雪    币: 2473
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
消灭0回复  标题有些夸张了... 在VMPCALL的地方下断点, 都是在对一些函数和异常做介绍  不过能看出来写的非常认真
2018-5-1 15:20
0
雪    币: 129
活跃值: (2763)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
卡不懂
2018-5-1 16:11
0
雪    币: 8216
活跃值: (3887)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
4
厉害厉害
2018-5-1 16:31
0
雪    币: 20
活跃值: (26)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
厉害!
2018-5-1 17:04
0
雪    币: 6566
活跃值: (4526)
能力值: ( LV7,RANK:110 )
在线值:
发帖
回帖
粉丝
6
感谢分享
2018-5-1 17:25
0
雪    币: 4
活跃值: (346)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
我使用SharpOD插件可以过掉反调试,但是在IsDebuggerPresent上下断就会被检测到,意思是VM还会检测API入口的1个字节判断是否为0xCC来进行反调试吗.
2018-5-1 17:34
0
雪    币: 474
活跃值: (232)
能力值: ( LV5,RANK:70 )
在线值:
发帖
回帖
粉丝
8
谢谢,正在新手村任务中
2018-5-1 18:44
0
雪    币: 474
活跃值: (232)
能力值: ( LV5,RANK:70 )
在线值:
发帖
回帖
粉丝
9
ZwTrojan 我使用SharpOD插件可以过掉反调试,但是在IsDebuggerPresent上下断就会被检测到,意思是VM还会检测API入口的1个字节判断是否为0xCC来进行反调试吗.
是的,有软件断点的检测,使用硬件断点就可以的
2018-5-1 18:45
0
雪    币: 474
活跃值: (232)
能力值: ( LV5,RANK:70 )
在线值:
发帖
回帖
粉丝
10
cat喵 是的,有软件断点的检测,使用硬件断点就可以的
上面帖子的软件断点检测有说到
2018-5-1 18:45
0
雪    币: 8904
活跃值: (5131)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
jgs
11
普及贴收藏,谢谢楼主提供
2018-5-1 20:33
0
雪    币: 413
活跃值: (637)
能力值: ( LV9,RANK:170 )
在线值:
发帖
回帖
粉丝
12
顶一下,希望把工作坚持  下去。
2018-5-2 13:43
0
雪    币: 2166
活跃值: (3226)
能力值: (RANK:260 )
在线值:
发帖
回帖
粉丝
13
支持,整理的很全啊
2018-5-3 12:19
0
雪    币: 1036
活跃值: (1311)
能力值: ( LV3,RANK:35 )
在线值:
发帖
回帖
粉丝
14
离脱壳还很远
2018-5-3 14:27
0
雪    币: 474
活跃值: (232)
能力值: ( LV5,RANK:70 )
在线值:
发帖
回帖
粉丝
15
StriveXjun 离脱壳还很远
哈哈,是的,这就是一篇总结贴,而且属于适合新手的,vm还原部分我也还在分析中,不同版本的特征感觉也不太一致,所以没办法快速还原。
如果您有相关资料,也请分享或指教一个方向谢谢
2018-5-4 20:37
0
雪    币: 474
活跃值: (232)
能力值: ( LV5,RANK:70 )
在线值:
发帖
回帖
粉丝
16
cat喵 哈哈,是的,这就是一篇总结贴,而且属于适合新手的,vm还原部分我也还在分析中,不同版本的特征感觉也不太一致,所以没办法快速还原。 如果您有相关资料,也请分享或指教一个方向谢谢
大神请教个问题,你写的SharpOD的Atti_Atti  Attach的原理是使用的挂钩DbgUiIssueRemoteBreakin,DbgUiConnectToDbg,DbgUiDebugActiveProcess这几个函数来实现的吗?
2018-5-4 20:46
0
雪    币: 37
活跃值: (370)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17
cat喵 大神请教个问题,你写的SharpOD的Atti_Atti Attach的原理是使用的挂钩DbgUiIssueRemoteBreakin,DbgUiConnectToDbg,DbgUiDebugActi ...
我也在研究这个,sharpod的Atti_Atti    Attach和scyllahide的kill  anti  attach都可以绕过一些TMD的反附加.不过我挂钩这几个函数失败了,打算直接用修复的方法,把地址改成原版ntdll中的地址.
函数的话,我搜到的有DbgUiIssueRemoteBreakin,DbgUiConnectToDbg,DbgUiDebugActiveProcess你说的这几个,还有DbgBreakPoint,DbgUserBreakPoint这两个.
2018-5-5 10:57
0
雪    币: 474
活跃值: (232)
能力值: ( LV5,RANK:70 )
在线值:
发帖
回帖
粉丝
18
JAS白乌鸦 我也在研究这个,sharpod的Atti_Atti Attach和scyllahide的kill anti attach都可以绕过一些TMD的反附加.不过我挂钩这几个函数失败了,打算直接用修复的方法 ...
期待你完成后的分享,这方面的思路提供的内容多一些,但是具体实现还没去试过,准备考试啦
2018-5-5 12:40
0
雪    币: 1036
活跃值: (1311)
能力值: ( LV3,RANK:35 )
在线值:
发帖
回帖
粉丝
19
cat喵 大神请教个问题,你写的SharpOD的Atti_Atti Attach的原理是使用的挂钩DbgUiIssueRemoteBreakin,DbgUiConnectToDbg,DbgUiDebugActi ...
我也是使用的SOD的方法,  attach进程的时候,在目标进程会创建一个线程,这个线程的起始地址就是DbgUiIssueRemoteBreakin,但你先挂钩进程的  LdrInitializeThunk的话在直接  int  3  接管调试断点,就不会走到那几个API那去了。
2018-5-7 10:11
0
雪    币: 6
活跃值: (1141)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
20
栈回硕就能找到call  ebx?难道是最新版的没旧版强度大了?
2018-5-8 19:46
0
雪    币: 627
活跃值: (663)
能力值: ( LV9,RANK:270 )
在线值:
发帖
回帖
粉丝
21
lookzo 栈回硕就能找到call ebx?难道是最新版的没旧版强度大了?
Call  R32  在vCall里。
VMP3的vCall与VMP2有很大不同,VMP2的vCall只能调用虚拟子程序/函数,VMP3的vCall可以直接调用API,比较方便。感觉VMP3的vCall  handler是从Oreans(TMD/WL/CV)“抄”来的!
vCall中,解码vEIP一字节为参数个数,然后将vESP(EBP)处的参数依次入栈,最后Call  R32完成调用,返回结果EAX保存在[EBP]。
而且VMP3  vCall的入口有好多个,这些vCall  handler解码算法也有差异;VMP2时只有一个vCall。

另外,ZwQuerySystemInformation[SystemInformationClass::SystemModuleInformation]取得系统模块列表后,将模块名与解密后的字符串"sice.sys"、"siwvid.sys"、"ntice.sys"、"iceext.sys"和"syser.sys"进行比较,来完成检测。
2018-5-9 10:51
0
雪    币: 231
活跃值: (15)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
22
受教了,谢谢楼主分享。
2018-5-9 11:17
0
雪    币: 37
活跃值: (370)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
23
StriveXjun 我也是使用的SOD的方法, attach进程的时候,在目标进程会创建一个线程,这个线程的起始地址就是DbgUiIssueRemoteBreakin,但你先挂钩进程的 LdrInitializeThun ...
大佬,这句"在直接    int    3    接管调试断点"是什么意思.没有理解.是直接钩取LdrInitializeThunk然后在Fake_LdrInitializeThunk里面自己写int  3吗
2018-5-9 15:05
0
雪    币: 474
活跃值: (232)
能力值: ( LV5,RANK:70 )
在线值:
发帖
回帖
粉丝
24
MistHill Call R32 在vCall里。 VMP3的vCall与VMP2有很大不同,VMP2的vCall只能调用虚拟子程序/函数,VMP3的vCall可以直接调用API,比较方便。感觉VMP3的vCall ...
谢谢,说的好详细。想问下vCALL在3.x版本下不止一个,但是一直没明白为啥这个检测基本上检测函数的调用在一个地方就能过,我是把所有的保护都有勾选的?
2018-5-11 15:13
0
雪    币: 474
活跃值: (232)
能力值: ( LV5,RANK:70 )
在线值:
发帖
回帖
粉丝
25
谢谢大佬的分析
2018-5-11 15:23
0
游客
登录 | 注册 方可回帖
返回
//