
使用基于仿真的 VM 探索器、处理程序分析器以及用于去虚拟化的实验性 LLVM 重编译器,解包并去混淆受 VMProtect 2 保护的二进制文件。
本仓库是一个用于处理 VMProtect 2 保护二进制文件的旧版工具集合。
这些工具能够对受 VMProtect 2 保护的软件进行脱壳、分析和实验性 反虚拟化。本集合的核心是 vmprofiler,一个为所有其他工具提供基础逻辑的实用程序库。它负责识别关键的 VMProtect 2 组件,例如 VM 处理程序、处理程序表、转换器 等。
这个拥有 4 年以上历史的项目所获得的经验教训,应当传递给那些对反虚拟化感兴趣的人。
该项目试图识别单个 VM 处理程序。这种方法很脆弱、不可扩展,并且可能因虚拟机架构的更改(多个处理程序互连、复杂处理程序等)而失效。相反,我主张采用一种增量提升和控制流恢复策略,并将 VM 特定的去混淆逻辑降至最低。诸如 Saturn、Dna by Colton、Triton 和 Mergen 等工具,已经通过很少甚至不进行 VM 特定处理程序识别的方式成功地去混淆了 VMProtect。本仓库记录了 VMProtect 2 的架构,并作为一个警示:避免构建严重依赖识别虚拟机特定处理程序的反虚拟化工具。
对 VMProtect 反虚拟化的半通用方法需要一个稳健的框架,该框架支持加载/存储传播、节常量传播、DCE 以及一些其他简单优化。许多人尝试使用 LLVM 编译回原生代码;然而,我认为这种方法总是会得到不理想的结果。我们有自己的框架 blare2,它提供了干净的 1:1 提升和降低能力,我们将其用于去混淆目的。如果您对去混淆的咨询服务感兴趣,只要我们有时间安排,就可以提供这项服务。
vmemu
一个基于 Unicorn Engine 的虚拟机探索工具。
它允许你在指定的 vmenter 中脱壳受保护的程序并分析控制流。
该工具会生成一个包含给定 VM 入口控制流图的 .vmp2 文件。
生成的 .vmp2 文件之后可以传给 vmdevirt,将函数重新编译回原生 x86 并重新集成到原始二进制文件中。请注意,这不仅仅是一个只会发现函数中单一路径的简单追踪器,它实际上能识别虚拟 jcc,并会探索所有虚拟化的控制流。
vmdevirt
一个用于 .vmp2 文件的实验性 LLVM 重编译器。
虽然它可以运行,但被认为是高度实验性和不稳定的,而且这种方法总体上不被推荐。
vmassembler
一个用于编码用户自定义虚拟机操作的实验性汇编器。
这个项目展示了对 VMProtect 2 虚拟机架构 的深入技术理解。
vmhook
一个设计用于在运行时挂钩 VMProtect 2 虚拟机的工具,能够对单个 VM 处理程序进行详细的内省。
vmprofiler
为所有其他工具提供支持的核心实用程序库。
它包括 VM 处理程序模式匹配、处理程序表提取、死代码消除 (DCE) 以及其他必要的分析例程。
vmprofiler-cli
vmprofiler 的一个命令行界面,允许用户以文本格式显示和检查提取的信息。
vmprofiler-qt
一个用于 VMProtect 2 字节码的 基于 Qt 的图形化反汇编器,提供对虚拟化代码的交互式和可视化探索。
请遵循 此页面上的说明。
vmhook配置 vmassembler、vmemu、vmprofiler 和 vmprofiler-cli:
cmake -B build
cmake --build build
启用 vmdevirt(将下载并构建 LLVM!):
cmake -B build -DBUILD_VMDEVIRT=ON -DLLVM_BUILD_TYPE=Release
cmake --build build
启用 vmprofiler-qt:
cmake -B build -DBUILD_VMPROFILER_QT=ON
cmake --build build
同时启用两个可选模块:
cmake -B build -DBUILD_VMDEVIRT=ON -DBUILD_VMPROFILER_QT=ON -DLLVM_BUILD_TYPE=Release
cmake --build build
这些工具仅用于教育和研究目的。它们不得用于任何非法活动、未经授权的访问或违反 DMCA 或其他法律的行为。这些工具本身不违反任何 DMCA 规定。所有工作均为我原创,用户使用这些工具所采取的任何行动均由这些用户自行负责,并不反映作者的行为或意图。