vmp-lazy-unpack README

The project's README from github.com/x86rc/vmp-lazy-unpack. As one markdown file: README.md.

vmp-lazy-unpack
@x86rc

An emulation-based unpacker and import resolver for Windows x64 VMProtect 3.x binaries.

The project started as a script used to unpack VMProtect 3 in our devirtualization pipeline. It does this without the need to attach a debugger or dump live.

How

The project uses Unicorn to emulate syscalls used by VMProtect's unpacker and import resolver.

Installation

py -m pip install -e .

For decent speeds its recommended to install Microsoft C++ Build Tools so the C helper is used. If not installed the unpacking falls back to purely python based hooks (slower).

Usage

For normal unpacking + import fixups run:

py -m unpack "C:\path\file.exe"

To fix imports on an already unpacked bin:

py -m unpack "C:\path\file.bin" --imports_only

Limitations


Want to chat about deobfuscation or reverse engineering?

Find us here too

vmp-lazy-unpack (x86rc/vmp-lazy-unpack)

Searching Database…

这是什么?这是一个 Python 工具,可以自动给受 VMProtect 3.x 保护的 Windows x64 二进制文件脱壳并重建其导入表(IAT),无需调试器或实时内存转储。
它是一个库,还是我对着二进制文件运行的独立脚本?它是基于脚本的命令行工具,不是库:你把它指向受保护的二进制文件,它会用 Unicorn 模拟 VMProtect 自身的脱壳器和系统调用,然后把恢复后的进程转储到磁盘。
怎么用它给二进制文件脱壳?对 VMProtect 加壳的可执行文件运行主脚本,一次完成脱壳和导入修复;或者对已经脱壳的二进制文件运行单独的导入修复模式。
运行之前需要安装什么?它依赖 Unicorn 模拟引擎;为了更快的速度,还应安装 Microsoft C++ Build Tools,这样会使用编译好的 C 辅助程序,而不是较慢的纯 Python 钩子。
它能处理任何 VMProtect 二进制吗?又有哪些做不到?它只针对 Windows x64 二进制文件,在 VMProtect 3.4、3.9 和 3.10 上测试过;它不会对虚拟化代码做去虚拟化,也不会自动解析从虚拟化函数内部发起的外部调用。
VMProtect 是什么?给它脱壳为什么重要?VMProtect 是一款针对 Windows 二进制文件的商业混淆器/虚拟化器;给它脱壳是必要的第一步,此后去虚拟化或更进一步的逆向工程流水线才能分析受保护的代码。
它如何避免向目标附加调试器?它把目标二进制映射进一个模拟的 Windows 进程,用 Unicorn 模拟其系统调用和 API 调用,一旦执行到达恢复后的代码就停止,因此不需要真实的调试器或内存转储。
脱壳之后导入地址表会怎样?IAT 会根据模拟期间收集的数据重建,可识别的导入桩会被修补,异常表会被修复,最后把恢复后的进程从内存转储到磁盘。
它能恢复从虚拟化代码内部发起的调用吗?能,从虚拟化函数内部调用的导入仍会被恢复并加入 IAT,尽管虚拟化代码本身并没有被去虚拟化。
Creator
x86rc
Size
8 MB
Stars
396
Updated
CommitOct 15
Age
15d
Commits · 90 Days