vmp3.0.9全保护拆分解析
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全保护拆分解析的更多相关文章
- <转>vmp3.0.9全保护拆分解析
以下为了避免插件干扰,故采用x64dbg原版进行分析. 首先我通过检测到调试器的弹窗进行栈回溯,定位到该关键点:CALL eax 由于才接触Vmp,所以是把各个保护拆分开来进行的分析,会比较简单一 ...
- web2.0最全的国外API应用集合
web2.0最全的国外API应用集合 原文地址:http://www.buguat.com/post/98.html 2.0时代,越来越多的API被大家广泛应用,如果你还不了解API是何物,请看这里的 ...
- CentOS7+CDH5.14.0安装全流程记录,图文详解全程实测-总目录
CentOS7+CDH5.14.0安装全流程记录,图文详解全程实测-总目录: 0.Windows 10本机下载Xshell,以方便往Linux主机上上传大文件 1.CentOS7+CDH5.14.0安 ...
- XMind ZEN 2020 (10.0.2) 全平台 完美破解版(ubuntu)
XMind ZEN 2020 (10.0.2) 全平台 完美破解版(ubuntu) https://www.ghpym.com/xmindzen.html/comment-page-8?replyto ...
- 分享:APK高级保护方法解析(三)
刷朋友圈.玩游戏.看新闻,智能手机正在以我们无法想象的速度飞快发展,可是随之而来的安全问题也越来越引人关注,APP二次打包.反编译.盗版的现象屡见不鲜.因此须要对APK进行加固保护. 眼下市面上常见的 ...
- Activiti6.0教程 28张表解析 (三)
使用Activit的朋友都知道Activiti对应的有28张表,今天我们就来说下Activit中28张表对应的含义是什么? 如何创建表? 在Activiti中创建表有三种方式,我们依次来看下: 一.通 ...
- 百度大脑UNIT3.0智能对话技术全面解析
智能客服.智能家居.智能助手.智能车机.智能政务……赋予产品智能对话能力是提升产品智能化体验.高效服务的重要手段,已经开始被越来越多的企业关注并布局.然而,智能对话系统搭建涉及NLP.知识图谱.语音等 ...
- ipsec.conf配置文件多个保护子网解析流程
Author : Email : vip_13031075266@163.com Date : 2021.01.23 Copyright : 未经同意不得 ...
- IdentityServer4 ASP.NET Core的OpenID Connect OAuth 2.0框架学习保护API
IdentityServer4 ASP.NET Core的OpenID Connect OAuth 2.0框架学习之保护API. 使用IdentityServer4 来实现使用客户端凭据保护ASP.N ...
随机推荐
- Android notifyDataSetChanged
notifyDataSetChanged()用于动态的更新ListView中的数据.最后还是会调用Adapter中的getView函数. notifyDataSetChanged()相比于setAda ...
- 第三百八十三节,Django+Xadmin打造上线标准的在线教育平台—第三方模块django-simple-captcha验证码
第三百八十三节,Django+Xadmin打造上线标准的在线教育平台—第三方模块django-simple-captcha验证码 下载地址:https://github.com/mbi/django- ...
- Java如何比较两个数组是否相等?
在Java中,如何检查两个数组是否相等? 示例 以下示例显示如何使用数组的equals()方法来检查两个数组是否相等. package com.yiibai; import java.util.*; ...
- Java数组列表反转
在Java中,如何反转数组列表中的元素? 以下示例使用Collections.reverse(ArrayList)方法反转数组列表中的元素. package com.yiibai; public cl ...
- e566. 关闭的时候关闭程序
By default, when the close button on a frame is clicked, nothing happens. This example shows how to ...
- NPOIHelp 按固定模板导出和直接导出
完整代码如下 using System; using System.Collections.Generic; using System.Data; using System.Text; using N ...
- php + ajax 避免重复提交
- memcached能获取所有的key吗
memcached能获取所有的key吗 Memcache 查看列出所有key方法 Memcached中获取所有的key 特别要注意:memcached保存的值需要序列化,否则是无法保存的,而且是不会报 ...
- 启动zookeeper时出现的问题
zkEnv.cmd @echo off REM Licensed to the Apache Software Foundation (ASF) under one or more REM contr ...
- eclipse中去掉validate的方法
昨天在右击项目想选择refresh的时候一不小心选择了validate,就发现target包出现了红色的叉号.当时觉得反正项目运行没有什么异常,就这么凑合了一天半多. 后来,当我改jsp的时候从< ...