Protect your software
from reverse engineering
ArmadilloVM lifts your most sensitive functions out of native x86-64 and into a custom bytecode that only its embedded interpreter can run.
What it does
Protection built on a real virtual machine
Ships as a virtual machine, not your code
Your sensitive functions leave the binary as x86 entirely. In their place sits ArmadilloVM's interpreter running a custom bytecode only it understands.
Works on real binaries
Point it at the executables and DLLs you already build. The protected image loads and runs exactly like the original — your users never notice.
Pick what to protect
Protect a single licensing check or an entire module. You choose the targets by symbol or address; everything else is left untouched.
Nothing breaks
Exceptions, callbacks, and calls out to the OS all keep working through virtualized code — protection that doesn't change what your program does.
How it works
Three steps from build to protected binary
Select
Hand ArmadilloVM your compiled binary and name the functions to protect.
Virtualize
Each target becomes VM bytecode, and the interpreter is packed into your image automatically.
Ship
Distribute one self-contained binary. It runs like the original — the protected routines just aren't readable anymore.
What's supported
Everything you need to protect real software
The supported functionality at a glance — the deeper technical notes live in the docs.
- Virtualize individual functions or whole modules
- Windows x64 executables (.exe) and libraries (.dll)
- Complete integer arithmetic, logic, and bit operations
- Full control flow — branches, loops, calls, and returns
- 128-bit SSE / SIMD vector operations
- C++ and Structured Exception Handling (SEH) preserved
- Calls between protected and native code, with callbacks
- Automatic relocation and thread-local-storage fixups
- Target selection by symbol (via PDB) or by address
- Authenticode and Control-Flow-Guard aware