VMP分析之VMP2.13插件化分析(四)

本文介绍了四个用于分析VM保护的插件:Zeus、VMP分析插件、FKVMP和VMSweeper。Zeus能分析VM基本信息和解密流程;VMP分析插件提供虚拟指令级调试和字节码收缩功能;FKVMP专注于Handler识别和PCODE还原;VMSweeper则尝试还原VMP保护代码,但稳定性不佳。这些工具帮助逆向工程师深入理解VMProtect的保护机制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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 : 0042D503
           Dispatch 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          : 92766AB7
           VMDecodeKey        : 0042D928
           VMOpcodeStart      : 0042D928
0042D928   VMEipStart         : 0042D928
           VMOpcode 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版本分析失败。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

鬼手56

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值