Static Unpacking for VMProtect 3.9.5: the Rotating-XOR Layer

About the author. I’m Colin Xiao — an independent reverse engineer, mostly working solo on contract jobs. I dig into compiled code of every kind, including but not limited to: Android and iOS apps, x86/x64/ARM native binaries, packers and obfuscators, DRM and license checks, network protocols and APIs, crypto and signature algorithms, malware, game binaries, and embedded/IoT firmware. I also handle large-scale data collection and vulnerability research. If you have any project in mind, I’d be glad to take it on — whatever it is, as long as it’s within my wheelhouse. Just reach out. You can reach me on X at @colinxiao_lab or on Telegram at https://t.me/ColinXiao666.

This research is published for educational and defensive purposes. The target sample is anonymized throughout.


Static Unpacking for VMProtect 3.9.5: the Rotating-XOR Layer

VMProtect 3.9.5 tightened its static protection specifically to block static unpacking:

VMProtect 3.9.5 static protection

But under the hood, it’s only a rotating-XOR decryption layer added on top of the older scheme:

The rotating-XOR layer

I added 3.9.5 support to the unpacker by following the VMPUnpacker approach. It carries the same limitation — no IAT repair.

The script is on GitHub: https://github.com/YuroGod/VMPStaticUnpacker


Colin Xiao — I take on contract reverse-engineering work, and writeups like this are how I show what I can do. If you need help with anything in this space — including but not limited to the areas I cover above — I’m available. No project is too big or too small — if it’s reverse engineering and I can do it, I’ll take it. DM me on X (@colinxiao_lab) or Telegram (@ColinXiao666).

Get in touch