• Stars
    star
    1,911
  • Rank 24,257 (Top 0.5 %)
  • Language
    C++
  • License
    GNU General Publi...
  • Created over 4 years ago
  • Updated over 3 years ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

A static devirtualizer for VMProtect x64 3.x. powered by VTIL.

NoVmp

appveyor-ci license

A static devirtualizer for VMProtect x64 3.x powered by VTIL.

VMProtect? Nope.

NoVmp is a project devirtualizing VMProtect x64 3.0 - 3.5 (latest) into optimized VTIL and optionally recompiling back to x64 using the Virtual-machine Translation Intermediate Language library. It is rather experimental and is mostly a PoC I wanted to release. Most things can be improved especially with the new NativeLifters repo, but it did not exist back in the time this was written.

Usage

NoVmp accepts unpacked binaries, so if your binary is packed you'll have to dump it first, additionally if you did dump it using a tool like Scylla, you'll have to provide the original image base using the -base parameter like so:

-base 0x14000000

By default NoVmp will parse every single jump into a VM, if you are only interested in a number of specific virtualized routines you can use the -vms parameter like so with relative virtual addresses:

-vms 0x729B81 0x72521

These addresses should be pointing at the VMEnter, as shown below:

VMEnter

By default section discovery is automatic, but in case your calls are not being chained you should try adding the VMProtect section name into the section list using -sections as shown below:

-sections .xxx0 .yyy0

Note that the .<vmp>1 section is the merged VMProtect DLL which should not be inputted.

Additionally you can use any of the following switches:

  • -noopt: Disables optimization.
  • -opt:constant: Optimizes the VMProtect Ultra constant obfuscation out.
  • -experimental:recompile: Enables the experimental x64 compiler.

Known bugs

  • Known issues from VTIL-Core, mainly the lack of jump table support and propagation passes taking too long/not being great which are being worked on.
  • Binaries compiled with relocations stripped are not fully supported yet.
  • Experimental compiler is a borderline broken demo, issues related to it should not be submitted as it'll be reworked and will be in VTIL-Core.

License

NoVmp is licensed under the GNU General Public License v3.

More Repositories

1

ThePerfectInjector

Literally, the perfect injector.
C
836
star
2

ByePg

Defeating Patchguard universally for Windows 8, Windows 8.1 and all versions of Windows 10 regardless of HVCI.
C++
822
star
3

NtRays

Hex-Rays microcode plugin for automated simplification of Windows Kernel decompilation.
C++
502
star
4

CVE-2018-8897

Arbitrary code execution with kernel privileges using CVE-2018-8897.
C++
408
star
5

NtLua

Lua in kernel-mode because why not.
C
304
star
6

haruspex

Exploration of x86-64 ISA using speculative execution.
C++
303
star
7

linux-pe

COFF and Portable Executable format described using standard C++ with no dependencies.
C++
250
star
8

simple_cnn

Simple Convolutional Neural Network Library
C++
181
star
9

HexSuite

Header only wrapper around Hex-Rays API in C++20.
C++
147
star
10

physical_mem_controller

A library to read physical memory and system-wide virtual memory.
C++
118
star
11

vmware-rpc

Header-only VMWare Backdoor API Implementation & Effortless VMX Patcher for Custom Guest-to-Host RPCs
C++
96
star
12

IdaThemer

🎨 Seamlessly convert your favorite Visual Studio Code themes to IDA Pro themes.
Go
81
star
13

safe_capcom

Capcom wrapper with safety in mind.
C
77
star
14

xstd

A portable header only library extending the C++20 STL.
C++
64
star
15

hvdetecc

Collection of hypervisor detections
C++
17
star
16

llvm-patches

Personal curation of Clang/LLVM patches.
12
star
17

selene

Kernel-mode Paravirtualization in Ring 2, LLVM based linker, and some other things!
C++
11
star
18

troto

TypeScript to Protobuf transpiler.
TypeScript
11
star
19

gengo

Generate Go bindings for shared C libraries.
Go
10
star
20

retro

Experimental static analysis framework.
C++
10
star
21

Myelin

Header-only CUDA accelerated DNN library
Cuda
8
star
22

turing-incomplete

TypeScript
4
star
23

xedpp

Tiny wrapper around xed API.
C++
1
star