学逆向论坛

找回密码
立即注册

只需一步,快速开始

发新帖

2万

积分

41

好友

1171

主题
发表于 2020-3-4 19:27:02 | 查看: 9219| 回复: 4

vmp3.0.9全保护拆分解析

vmp3.0.9全保护拆分解析

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

vmp3.0.9全保护拆分解析

vmp3.0.9全保护拆分解析

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

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

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

EverEdit编辑器是加的一个vmp的壳子,虽然特征和这里分析的不太一致,但是反调试路子大致一样的,而且虽然是vmp但是通过trace跟踪和分析也是可以暴力破解的,可以拿来练手,这里推荐一下。
一、反调试保护
1.调用IsDebuggerPresent,判断返回值eax==1被调试,eax==0没有调试。

vmp3.0.9全保护拆分解析

vmp3.0.9全保护拆分解析

2.CheckRemoteDebuggerPresent,判断buffer返回值是0还是1,1被调试,0没有调试。

vmp3.0.9全保护拆分解析

vmp3.0.9全保护拆分解析

3.NtQueryInformationProcess,ProcessInfoClass=0x1E来获取调试句柄,判断是否被调试,调试句柄返回0且eax的返回值是0xC0000353

vmp3.0.9全保护拆分解析

vmp3.0.9全保护拆分解析

4.NtSetInformationThread,ThreadInfoClass=0x11,这个不是检测调试,而是设置不把调试信息发送到调试器,可以直接把0x11修改为0x3或者其它数值就可以了。

vmp3.0.9全保护拆分解析

vmp3.0.9全保护拆分解析

5.ZwQuerySystemInformation,SystemInfoClass=0x23(MACRO:SystemKernelDebuggerInformation),返回值是2字节的bool值,设置为0即可。

vmp3.0.9全保护拆分解析

vmp3.0.9全保护拆分解析

6.ZwQuerySystemInformation,SystemInfoClass=0xB(MACRO:SystemModuleInformation),会去遍历内核模块,然后进行判断,第一次是获取需要存储的buffer长度,第二次才是真正获取信息,只要把buffer都置为0,就检测不到调试了,至于buffer的位置会在第一次调用后使用LocalAlloc申请空间来存储

vmp3.0.9全保护拆分解析

vmp3.0.9全保护拆分解析

7.CloseHandle反调试,如果被调试了,那么KiRaiseUserExceptionDispatcher函数会被调用,走异常处理流程;如果是不被调试的状态,不会走向异常流程。

vmp3.0.9全保护拆分解析

vmp3.0.9全保护拆分解析

8.检测硬件断点,是通过SEH异常来处理的首先在SEH链中对当前模块的SEH头下一个软件断点

vmp3.0.9全保护拆分解析

vmp3.0.9全保护拆分解析

然后把图示中的Dr0、Dr1、Dr2、Dr3、Dr6、Dr7调试寄存器都修改为0

vmp3.0.9全保护拆分解析

vmp3.0.9全保护拆分解析

然后F9再次到CALL eax的时候如果是GetpRrocessAffinityMask函数调用,说明反调试已经顺利通过。PS:上面对CALL eax下的是硬件断点,注意不要下软件断点,因为前面ZwSetInformationThread后(User-mode反调试)或者第三次最后一次NtQuerySystemInformation后(Kernel-mode)反调试会有如下图所示的软件断点检测,其实vmp的内存保护一部分的原理和这个一致,代码特征几乎都一样,取出来的HEX字节也是存放在esi寄存器中。所以为了方便,最好下硬件断点,因为硬件断点检查触发的时机都是在SEH函数中,很好拦截。

vmp3.0.9全保护拆分解析

vmp3.0.9全保护拆分解析

二、反虚拟机
1.CPUID判断ECX最高位31位是否为1,如果是1那么就是在虚拟机中,如果是0那就是在宿主机上。我自己加壳的这个样本有两个CPUID检测点,等它执行后修改ecx最高位为0就行。不过下面的贴图演示的是使用修改虚拟机的.vmx配置文件的方式,更加方便。

vmp3.0.9全保护拆分解析

vmp3.0.9全保护拆分解析

2.使用GetSystemFirewareTable获取系统固件信息,判断其中有无下列字符串:VMware、VirtualBox、Parallels。注意大小写,只需要等GetSystemFirewareTable执行完成后对内存搜索VMware字符串(因为我用的VMware虚拟机),然后填充为0就可以过虚拟机检测了。下面我会贴一个脚本配合OD+StrondOD+DrxProtect使用的,主要就是填充VMware字符串。
三、IAT解密

1.我没有分析它是如何加密的,只是简单的分析了调用函数的解密过程,其实十分简单:进入解密函数后单步f7,当看到类似:lea register,dword ptr[register+imm](register:寄存器,imm:立即数)的语句,在执行完成后register中就是函数,再跟踪几步通过ret一类的就去执行真正的函数了

2.不知有无遗漏。。。

四、内存保护

1.内存保护和上面分析的软件断点几乎一样,对你修改的内存下硬件访问断点,就可以看到在取HEX字节然后运算,不再贴图了,只要把取出来的esi的数值替换为原来的数值就行了

2.不知有无遗漏。。。



温馨提示:
1.如果您喜欢这篇帖子,请给作者点赞评分,点赞会增加帖子的热度,评分会给作者加学币。(评分不会扣掉您的积分,系统每天都会重置您的评分额度)。
2.回复帖子不仅是对作者的认可,还可以获得学币奖励,请尊重他人的劳动成果,拒绝做伸手党!
3.发广告、灌水回复等违规行为一经发现直接禁言,如果本帖内容涉嫌违规,请点击论坛底部的举报反馈按钮,也可以在【投诉建议】板块发帖举报。
论坛交流群:672619046

    发表于 2020-3-4 20:22:05
    大佬,真厉害,学习了。

      发表于 2020-3-5 09:54:36
      支持学逆向论坛,资源不错!

        发表于 2020-3-7 20:49:07
        吃水不忘挖井人,我也去发帖分享好东西。

          发表于 2020-3-8 11:24:33
          感谢分享,我会认真学习的!

          小黑屋|手机版|站务邮箱|学逆向论坛 ( 粤ICP备2021023307号 )|网站地图

          GMT+8, 2024-12-28 00:10 , Processed in 0.181598 second(s), 59 queries .

          Powered by Discuz! X3.4

          Copyright © 2001-2021, Tencent Cloud.

          快速回复 返回顶部 返回列表