code-obfuscation-deobfuscation

Identify obfuscation types and generate deobfuscation plans for native binaries.

5|2|Updated May 16, 2026
One-click install
npx skills add https://github.com/DorianGallo/hack-skills-local --skill code-obfuscation-deobfuscation-doriangallo
Or copy as Structured Prompt for Agent
Please help me install this Agent Skill.
Skill: code-obfuscation-deobfuscation
Source: https://github.com/DorianGallo/hack-skills-local/tree/main/skills/code-obfuscation-deobfuscation
Command: npx skills add https://github.com/DorianGallo/hack-skills-local --skill code-obfuscation-deobfuscation-doriangallo

SYSTEM DOCUMENTATION & REQUIREMENTS

What problem does it solve?

This Skill helps you reverse engineer binaries that hide real program logic behind junk code, opaque predicates, self-modifying code, control flow flattening, VM protection, string encryption, and import hiding.

Core Features & Use Cases

  • Obfuscation identification: Diagnose likely obfuscation types from common disassembly/CFG patterns in IDA/Ghidra (e.g., flattened dispatchers, movfuscator-style mov-only functions, pushad/pushfd VM entry).
  • Deobfuscation strategies: Apply the right static or dynamic approach for each layer—symbolic execution for opaque predicates and CFF, breakpoint/dump loops for SMC, handler extraction for VM protectors, and emulation/hooking for string decoding.
  • Practical RE workflow: Use a decision tree to choose tools and next steps, minimizing time wasted when packing is mistaken for obfuscation.

Quick Start

Use the code-obfuscation-deobfuscation skill on the target binary in your analysis workspace to identify the obfuscation type and produce a step-by-step deobfuscation plan for the first layer.

Frequently Asked Questions about code-obfuscation-deobfuscation

High-intent search queries and answers about installing and using this skill.

FAQPage Schema
How do I reverse engineer native binaries protected by control flow flattening and VM protection?

To deobfuscate binaries with control flow flattening, identify flattened dispatchers in disassembly and apply symbolic execution to reconstruct true control flow. For VM protection, extract and map virtual instruction handlers to recover the original program logic.

What is the best way to defeat string encryption and import hiding during malware analysis?

The best way to defeat string encryption and import hiding is using dynamic analysis techniques like emulation and API hooking. Set breakpoints at decoding loops to dump decrypted strings and resolve hidden imports during runtime execution.

How do I identify obfuscation types like movfuscator or opaque predicates from disassembly?

Identify obfuscation types by analyzing CFG patterns in disassembly: movfuscator appears as mov-only functions, opaque predicates show impossible conditional branches, and self-modifying code uses pushad/pushfd sequences before instruction alteration.

When should I use static versus dynamic deobfuscation methods for self-modifying code?

Use static deobfuscation for opaque predicates and control flow flattening via symbolic execution. Switch to dynamic analysis with breakpoints and memory dumps for self-modifying code, as instructions change at runtime and defeat static disassembly.

Can I use symbolic execution to recover readable logic from junk code and anti-disassembly tricks?

Yes, symbolic execution can recover readable logic from junk code and anti-disassembly tricks by modeling instruction semantics to ignore non-functional operations. It effectively bypasses opaque predicates and reconstructs true execution paths.

Why does my deobfuscation workflow stall when packing is mistaken for obfuscation?

Deobfuscation stalls when packing is mistaken for obfuscation because they require different approaches. Use a decision tree to differentiate packed binaries needing unpacking from obfuscated binaries needing pattern-based identification and symbolic execution.