How Code Virtualizer works¶
Code Virtualizer processes x86, x64, and ARM64 code in four stages:
-
Find the sensitive code blocks: Code Virtualizer locates the markers that the developer inserted into the source code.
-
Create a unique Virtual Machine: The polymorphic engine creates a unique Virtual Machine for the application.
-
Convert the original instructions: Code Virtualizer replaces the original native instructions with virtual opcodes understood only by that Virtual Machine.
-
Redirect execution: Code Virtualizer destroys the original instructions and redirects the code block to the Virtual Machine.
Code Virtualizer stores the Virtual Machine and virtual opcodes in the protected binary or inside your own code when using Stealth Mode. This preserves the original binary layout and makes the protection harder to identify.
Code Virtualizer against Reverse Engineering¶
Code virtualization converts binary instructions for one machine into a different instruction set interpreted by another machine. The following image shows a block of Intel x86 instructions converted into instructions for a 32-bit RISC machine:

Code Virtualizer can generate several Virtual Machine architectures, each with a different instruction set. The same Intel x86 block can therefore produce different virtual opcodes for each architecture. The following image shows this transformation:

An attacker who decompiles a protected block will not find the original native instructions. Instead, the attacker sees a new instruction set that standard decompilers do not recognize. Understanding the code requires analyzing how every virtual opcode and the application's unique Virtual Machine work.
The following image compares an original compiled application with its protected form:

Code Virtualizer embeds the generated Virtual Machine at the end of the protected application or inside your own code in Stealth Mode. The selected architecture can range from 500 KB to more than 3 MB. You can compress the Virtual Machine and virtualized code to reduce the final size on disk.