A deobfuscator that recovers control flow from binaries compiled with the M/o/Vfuscator one-instruction compiler.
Demovfuscator is a reverse engineering tool that deobfuscates binaries compiled with the M/o/Vfuscator, a compiler that reduces programs to use only the MOV instruction. It recovers the original control flow and program structure from these heavily obfuscated executables, making them analyzable again. The tool uses static taint analysis and SMT solving to generically handle movfuscated code without relying on implementation-specific assumptions.
Reverse engineers, security researchers, and CTF participants who need to analyze binaries obfuscated with M/o/Vfuscator. It's particularly useful for those dealing with advanced obfuscation techniques in competitive or real-world scenarios.
Demovfuscator offers a generic, hardening-resistant approach to deobfuscation that works against real-world movfuscated binaries. Unlike manual analysis or pattern-based tools, it uses formal methods to recover control flow, saving significant time and effort in reverse engineering tasks.
A work-in-progress deobfuscator for movfuscated binaries
Open-Awesome is built by the community, for the community. Submit a project, suggest an awesome list, or help improve the catalog on GitHub.
Adheres to high-level invariants, making it unaffected by proposed hardening like register renaming, as the README states it avoids assumptions about implementation details.
Uses libz3 to reason semantically about MOV instructions, enabling accurate control flow recovery without relying on low-level patterns.
Successfully tested against movfuscated CTF challenges from Hackover CTF and 0CTF, proving real-world applicability beyond synthetic examples.
Generates patched executables, IDC symbol files, and DOT-compatible control flow graphs, offering multiple ways to analyze recovered code.
Requires installation of three libraries (libcapstone, libz3, libkeystone), which the README admits is inconvenient and may need path adjustments.
Only works on binaries obfuscated with M/o/Vfuscator, making it useless for other obfuscation methods like packing or virtualization.
The compiled package is described as 'very old' in the README, indicating potential maintenance or compatibility issues for users.