VMP分析之VMP2.13插件化分析(四)
文章目录
- Zeus插件
- 相关介绍
- 初始化Key并解密
- 加载操作码
- 解密操作码
- 取handler
- 解密handler
- 进入handler
- 保存堆栈
- 指令流解密Key
- VMP分析插件
- 相关介绍
- VM分析插件的使用
- 插件化分析VM代码
- VM指令集说明
- FKVMP
- 相关介绍
- 使用方法
- VMSweeper
- 相关介绍
- 使用方法
Zeus插件
相关介绍
- 开发者: ximo
- 更新时间:2012-1
- 可以分析VM的基本信息,包括解析VM入口信息及handler名,大致是阉割版fkvmp(无解析流程功能)
- 可以自动脱壳保护的壳,包括IAT,资源保护,heap antidump等
让代码执行到进入VM虚拟机开始的代码
右键,选择Zeus分析
打开log窗口,就能看到分析结果了。Zeus插件帮我们分析出了整个VM流程
初始化Key并解密
InitKey Decode :
0042D0EF add esi, 92e49d49
0042D0F8 bswap esi
0042B8C2 ror esi, 1d
加载操作码
Load PCode:
0042B907 0042B907 mov al, byte ptr [esi]
解密操作码
0042B90A sub al, bl
0042C1F5 not al
0042C1FC inc al
0042C209 not al
0042B847 sub bl, al
取handler
Dispatch Table :
0042B85A 0042B85A mov ecx, dword ptr [eax*4+42d503]Dispatch Base : 0042D503Dispatch Reg : ecx
解密handler
Handler Decode :
0042BF29 sub ecx, 7eef2a8d
0042BF30 add ecx, 0
进入handler
Handler Entry :
0042B39F 0042B39F retn 40
保存堆栈
VM Initial Info:[+00] <- 00000000 RELOC[+01] <- 00000000 ANTIDUMP[+02] <- 0019FE8C esi[+03] <- 0019FED8 ebp[+04] <- 003AB000 ebx[+05] <- CCCCCCCC eax[+06] <- 003AB000 ebx[+07] <- 00000000 ecx[+08] <- 0019FED8 edi[+09] <- 022C0F90 edx[+0A] <- 00000202 EFL[+0B] <- 502585E5 RETADDR[+0C] <- 92766AB7 INITDATA
指令流解密Key
VMInitKey : 92766AB7VMDecodeKey : 0042D928VMOpcodeStart : 0042D928
0042D928 VMEipStart : 0042D928VMOpcode Direction : ↑
接着给出了VM初始化的Key和解密后的Key。解密后的Key和指令流开始地址和vmEip实际上是一个东西。
VMP分析插件
相关介绍
- 针对目标:VMProtect 1.x 2.x (大概到 VMProtect 2.09)
- 开发者:zdhysd
- 最后更新时间:v1.4 2013/01/30
- 虚拟指令级别的调试。可以像调试汇编一样调试虚拟机指令,可以单步运行一条虚拟指令,并查看虚拟寄存器、虚拟栈的信息。
- 表达式转化及化简。本功能会在虚拟指令级别进行数据流和控制流的分析,进行字节码的收缩。 VMProtect 是栈机结构,同时有 NOR 逻辑的混淆膨胀,字节码的收缩还原一直是研究的重点,本工具可以完成字节码收缩过程,输出收缩后的表达式。唯一不同是没有转化成原始的 x86 代码。但在分析上,已经可以提供极为有力的参考
- 支持字节码的 Patch。由于加密的存在,字节码 Patch 一直是十分痛苦的过程,本工具可以像 Patch 普通指令一样 Patch 虚拟指令
- 支持自定义模板。模板包括 Handler 识别模板和表达式化简模板。该工具提供了模板文件及模板修改工具。理论上,可以通过对模板文件的修改使及兼容所有版本的 VMProtect 1.x 2.x。( 3.x 因为虚拟机结构变化不能支持)
VM分析插件的使用
还是之前的Demo程序,首先执行到进入虚拟机开始的位置
然后右键选择分析虚拟机
在log窗口可以看到分析结果,这一步会帮我们分析出VM的解码循环和每一个handler的作用。
然后选择分析虚拟程序
这一步会分析出VM的堆栈和vmEip
配置插件,打开所有的分析选项
插件化分析VM代码
按F9会自动进入到虚拟机分析窗口,到了这个窗口,就可以基于VM指令集进行单步调试了,不需要一个一个handler进去分析。
如果没有到这个窗口,说明进入虚拟机分析窗口失败。拦截失败就无法拦截OD原先的单步指令,不能直接调试,建议换个OD。
VM指令集说明
打开编译虚拟指令信息
每一条VM的指令在这里都可以看到等价的汇编指令和详细注释
FKVMP
相关介绍
- 针对目标:VMProtect 1.x 2.x (大概到 VMProtect 2.09)
- 开发者:Nooby
- 功能:Handler 识别、还原 PCODE 等
使用方法
在虚拟机入口处右键->FKVMP->start即可
在log窗口可以看到所有解析出来的handler指令
以及初始化压栈的寄存器顺序也会打印出来。
这个插件的缺点是只支持单一的基本块,每次分析到 SetEIP 指令(实际就是跳转指令)就会停止,需要人工操作,去分析下一基本块
VMSweeper
相关介绍
- 针对目标:VMProtect 2.x 、Code Virtualizer
- 开发者:Vamit
- 最后更新时间:v1.5 2014
可以完成 VMP 保护代码还原的工具。 完全的代码还原是十分困难的,因此该工具稳定性不高,经常出现异常。但是某些简单样本的测试,确实有不错的还原效果。
使用方法
直接载入被VMP加壳的程序,不需要手动跳转到VM虚拟机的入口
点击Plugins -> VMPSweeper -> Analyze all VM reference
这里会自动识别出代码断和VM区段的起始和结束地址,然后点击Analize
弹出窗口选要分析的 VM, 右键 Decode VM
出现这个提示后,会自动在虚拟机的入口下断点,在断点窗口可以看到
这个插件有自己的VM入口识别算法,所以不需要自己跳转到VM入口。接着按F9运行到VM入口处后,按F1进行分析
分析完成后,会弹出提示框重新运行进程。重新运行后, Plugins -> VMPSweeper -> Continue decode VM。继续分析。
如果分析没有产生任何异常,VMPSweeper 会把还原后的代码 Patch 到原本的虚拟机入口处
但上述过程经常出错,可以在 OD 根目录下查找 VMS_xxx 文件夹,查看日志文件,*.log 文件中保存着还原的过程输出。
我这里也没有完全分析成功,但是在VMS文件夹下可以看到上面几个文件
按照文件名提示,很明显是保存的是VM虚拟机的寄存器和堆栈状态
该工具是少见的可以将 VMProtect 保护代码进行完整还原的工具,缺点是稳定性太差,对于稍复杂的程序,还原过程很大可能会出现异常报错。我这里测试的是VM2.13版本分析失败。
VMP分析之VMP2.13插件化分析(四)相关推荐
- VMP分析之VMP2.13流程分析(三)
文章目录 VMP2.X版本特点 VMP2.13加壳 VMP2.13代码分析 进入VM虚拟机 保存堆栈 保存eflags和edx 保存ecx和edi 保存ebx 保存eax 保存ebx ebp和esi ...
- 【Android 插件化】Hook 插件化框架 ( Hook Activity 启动流程 | Hook 点分析 )
Android 插件化系列文章目录 [Android 插件化]插件化简介 ( 组件化与插件化 ) [Android 插件化]插件化原理 ( JVM 内存数据 | 类加载流程 ) [Android 插件 ...
- Android 插件化原理解析——Service的插件化
在 Activity生命周期管理 以及 广播的管理 中我们详细探讨了Android系统中的Activity.BroadcastReceiver组件的工作原理以及它们的插件化方案,相信读者已经对Andr ...
- Android组件化与插件化开发项目实战整理分享(含支付宝、360、美团、滴滴等大厂项目实战)
小公司不说,但是在大公司的项目发展到一定程度,就必须进行模块的拆分.模块化是一种指导理念,其核心思想就是分而治之.降低耦合.而在 Android 开发的实践,目前有两种途径来实现,一个是组件化,一个是 ...
- 插件化?好像也就那么回事
前言 想必大家都知道,在 Android 系统中,应用是以 Apk 的形式存在的,应用都需要安装才能使用. 但实际上 Android 系统安装应用的方式相当简单,其实就是把应用 Apk 拷贝到系统不同 ...
- 【Android 插件化】VirtualApp 源码分析 ( 目前的 API 现状 | 安装应用源码分析 | 安装按钮执行的操作 | 返回到 HomeActivity 执行的操作 )
文章目录 一.目前的 API 现状 二.安装应用源码分析 1.安装按钮执行的操作 2.返回到 HomeActivity 执行的操作 一.目前的 API 现状 下图是 VirtualApp 官方给出的集 ...
- 【Android 插件化】基于插件化的恶意软件的加载策略分析 ( 自定义路径加载插件 | 系统路径加载插件 | 用户同意后加载插件 | 隐藏恶意插件 )
文章目录 一.自定义路径加载插件 二.系统路径加载插件 三.用户同意后加载插件 四.隐藏恶意插件 一.自定义路径加载插件 插件化应用中 , 宿主应用 加载 插件 APK , 需要获取该插件 APK 文 ...
- 【Android 插件化】Hook 插件化框架 ( 从源码角度分析加载资源流程 | Hook 点选择 | 资源冲突解决方案 )
Android 插件化系列文章目录 [Android 插件化]插件化简介 ( 组件化与插件化 ) [Android 插件化]插件化原理 ( JVM 内存数据 | 类加载流程 ) [Android 插件 ...
- 【Android 插件化】Hook 插件化框架 ( 从 Hook 应用角度分析 Activity 启动流程 二 | AMS 进程相关源码 | 主进程相关源码 )
Android 插件化系列文章目录 [Android 插件化]插件化简介 ( 组件化与插件化 ) [Android 插件化]插件化原理 ( JVM 内存数据 | 类加载流程 ) [Android 插件 ...
最新文章
- 微信小程序获取手机系统信息
- XML学习笔记之XML的简介
- 互联网协议 — 互联网的技术发展
- Android 2D Graphics
- poj 1064 Cable master
- SwiftUI优秀文章经典案例制作简易的新闻列表Demo
- 用Indy创建收发电子邮件的例子
- leetcode —— 589. N叉树的前序遍历 (使用到遍历多叉树的方法)
- PHP设定美国东部时区,PHP中设置时区方法总结
- 【年度重磅】2020华为云社区年度技术精选合集,700页+免费下载!
- 设计模式的C语言应用-适配及系列模式-第六章
- 避开使用XAML的性能陷阱
- NVIDIA教你用TensorRT加速深度学习推理计算 | 量子位线下沙龙笔记
- 无线时代来临,谁来管理我的无线AP?
- 基于Starling移动项目开发准备工作
- 12-Python3 元组
- Gof 设计模式 完结
- 参考手册资源 百度云
- 分享 100 道基础的前端面试题(附答案)
- POE供电 网线 电源 网络情况图
热门文章
- DL之DNN优化技术:神经网络算法简介之GD/SGD算法(BP的梯度下降算法)的简介、理解、代码实现、SGD缺点及改进(Momentum/NAG/Ada系列/RMSProp)之详细攻略
- Py之cython:python库之cython的简介、安装、使用方法之详细攻略
- 3D数学 ---- 矩阵和线性变换
- BootStrap Table - JS事件绑定
- js 数组 转为树形结构
- UVA11255 Necklace Burnside、组合
- [poj 2001] Shortest Prefixes (字典树)
- javascript-基本数据类型和转换
- JS 版的pnp in_array($str,$arr)
- Foreman安装配置