https://mp.weixin.qq.com/s/WO6w_L-cYwH5KB2rilZdag

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

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

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

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

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

一、反调试保护

1. 调用 IsDebuggerPresent,判断返回值eax==1被调试,eax==0没有调试。

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

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

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

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

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

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

8. 检测硬件断点,是通过SEH异常来处理的

首先在SEH链中对当前模块的SEH头下一个软件断点

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

然后F9再次到CALL eax的时候如果是 GetpRrocessAffinityMask 函数调用,说明反调试已经顺利通过。

PS:上面对CALL

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

二、反虚拟机

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

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. 不知有无遗漏......

jpg改rar 

vmp3.0.9全保护拆分解析的更多相关文章

  1. <转>vmp3.0.9全保护拆分解析

    以下为了避免插件干扰,故采用x64dbg原版进行分析. 首先我通过检测到调试器的弹窗进行栈回溯,定位到该关键点:CALL eax   由于才接触Vmp,所以是把各个保护拆分开来进行的分析,会比较简单一 ...

  2. web2.0最全的国外API应用集合

    web2.0最全的国外API应用集合 原文地址:http://www.buguat.com/post/98.html 2.0时代,越来越多的API被大家广泛应用,如果你还不了解API是何物,请看这里的 ...

  3. CentOS7+CDH5.14.0安装全流程记录,图文详解全程实测-总目录

    CentOS7+CDH5.14.0安装全流程记录,图文详解全程实测-总目录: 0.Windows 10本机下载Xshell,以方便往Linux主机上上传大文件 1.CentOS7+CDH5.14.0安 ...

  4. XMind ZEN 2020 (10.0.2) 全平台 完美破解版(ubuntu)

    XMind ZEN 2020 (10.0.2) 全平台 完美破解版(ubuntu) https://www.ghpym.com/xmindzen.html/comment-page-8?replyto ...

  5. 分享:APK高级保护方法解析(三)

    刷朋友圈.玩游戏.看新闻,智能手机正在以我们无法想象的速度飞快发展,可是随之而来的安全问题也越来越引人关注,APP二次打包.反编译.盗版的现象屡见不鲜.因此须要对APK进行加固保护. 眼下市面上常见的 ...

  6. Activiti6.0教程 28张表解析 (三)

    使用Activit的朋友都知道Activiti对应的有28张表,今天我们就来说下Activit中28张表对应的含义是什么? 如何创建表? 在Activiti中创建表有三种方式,我们依次来看下: 一.通 ...

  7. 百度大脑UNIT3.0智能对话技术全面解析

    智能客服.智能家居.智能助手.智能车机.智能政务……赋予产品智能对话能力是提升产品智能化体验.高效服务的重要手段,已经开始被越来越多的企业关注并布局.然而,智能对话系统搭建涉及NLP.知识图谱.语音等 ...

  8. ipsec.conf配置文件多个保护子网解析流程

    Author       : Email         : vip_13031075266@163.com Date          : 2021.01.23 Copyright : 未经同意不得 ...

  9. IdentityServer4 ASP.NET Core的OpenID Connect OAuth 2.0框架学习保护API

    IdentityServer4 ASP.NET Core的OpenID Connect OAuth 2.0框架学习之保护API. 使用IdentityServer4 来实现使用客户端凭据保护ASP.N ...

随机推荐

  1. 原创:《Excel在零售及电商行业数据化管理中的应用》之“什么是数据化管理?

    <Excel在零售及电商行业数据化管理中的应用>之“什么是数据化管理?”                     各位: “随着全零售时代的到来,传统商业的每一个供应链细节都离不开数据的支 ...

  2. iOS项目的目录结构(Cocoa China)

    目录结构 AppDelegate Models Macro General Helpers Vendors Sections Resources   一个合理的目录结构首先应该是清晰的,让人一眼看上去 ...

  3. Java如何设置线程的优先级?

    在Java编程中,如何设置线程的优先级? 以下示例如何使用setPriority()方法来设置线程的优先级. package com.yiibai; public class SettingPrior ...

  4. e797. 显示JSlider的标记

    The slider supports two levels of tick marks, major and minor. Typically, the minor tick-mark spacin ...

  5. Timeout expired. The timeout period elapsed prior to completion of the operation or the server is not responding.【转】

    今天碰到了一个查询异常问题,上网查了一下,感谢原创和译者 如果你使用的数据库连接类是 the Data Access Application Blocks "SqlHelper" ...

  6. FunGuild 数据库简介

    FUNGulid = Fungi + Functional + Guild , 是一个真菌的功能注释的数据库,目前数据库中涵盖了超过12000个真菌的功能注释信息: 网址如下: http://www. ...

  7. TCDB 数据库简介

    TCDB是对膜转运蛋白(Membrane Transport Protein)进行分类的一个数据库,它制定了一套转运蛋白分类系统(Transporter Classification), 简称TC S ...

  8. 机器学习——使用Apriori算法进行关联分析

    从大规模的数据集中寻找隐含关系被称作为关联分析(association analysis)或者关联规则学习(association rule learning). Apriori算法 优点:易编码实现 ...

  9. 什么时候layoutSubview会被调用

    文档描述不够详细,有人测试结果如下: init does not cause layoutSubviews to be called (duh) addSubview causes layoutSub ...

  10. 【CTR】各公司方法

    LR + 海量高纬离散特征 GBDT + 少量低纬连续特征 (Yahoo & Bing) GBDT + LR (FaceBook) FM + DNN (百度凤巢) MLR (阿里妈妈) FTR ...