About deobf-all
A skill collection for deobfuscation in reverse engineering and malware analysis. It first classifies the target and protection, then routes to relevant sub-skills instead of loading the entire collection at once.
Key features
- 01Classify target types and obfuscation
- 02Load layered sub-skills on demand
- 03Cover native binary and JavaScript analysis
- 04Include Android, Java, and PowerShell paths
- 05Prioritize static analysis and validate results
Use cases
- 01Analyze protected, obfuscated native programs
- 02Deobfuscate JavaScript or malicious scripts
- 03Select a workflow for Android APK analysis
Install
Copy the command and run it in a terminal.
npx skills add https:/ / github.com/ zeij-drive/ deobf --skill deobf-allAfter installing, type/deobf-allin Claude Code to confirm it loaded.
Details
From the project READMEDeobf-All — Unified Deobfuscation Dispatcher
When you encounter any obfuscated or protected code, this skill triages the target first, then loads only the relevant sub-skills — not all 26 at once. This minimises tool calls and context usage.
0. EXECUTION CONTRACT (read first)
DO NOT read_skill all 26 sub-skills blindly.
Instead: triage → load P0 → route → load P1/P2 only if needed.
| Phase | Action | Tool calls |
|---|---|---|
| Triage | Inspect target file, identify type | 0–1 (read_file / file command) |
| Load P0 | read_skill for 1–2 core skills | 1–2 |
| Route | Decide if P1/P2 are needed | 0 |
| Load P1/P2 | read_skill only for skills the route demands | 0–3 |
Goal: never exceed 5 read_skill calls per invocation unless the target is truly unknown.
1. SUB-SKILL INVENTORY
| # | Skill | Purpose | Layer |
|---|---|---|---|
| 1 | code-obfuscation-deobfuscation | Native binary deobf: CFF, opaque predicates, string encrypt, import hiding, anti-disasm | P0 |
| 2 | ast-deobfuscation | JavaScript AST deobf: pattern detection, pipeline, site-specific adapters | P0 (JS only) |
| 3 | vm-and-bytecode-reverse | VM protectors (VMProtect/Themida), custom VM dispatcher, opcode mapping | P1 |
| 4 | anti-debugging-techniques | Anti-debug detection & bypass (ptrace, PEB, timing, TLS, VEH) | P1 |
| 5 | symbolic-execution-tools | angr/Z3/Triton: automated constraint solving, emulation unpacking | P1 |
| 6 | binary-protection-bypass | ASLR/NX/PIE/Canary/RELRO bypass | P2 |
| 7 | ctf-reverse | CTF reverse engineering methodology | P2 |
| 8 | anti-reversing-techniques | Anti-reversing identification & circumvention | P2 |
| 9 | deep-analysis | Deep reverse engineering triage (comprehensive analysis) | P2 |
| 10 | java-decompile | Java bytecode decompile: CFR/Procyon/Fernflower | P2 |
| 11 | jadx | Android APK decompile: DEX → Java source | P2 |
| 12 | apktool | APK unpacking, smali disassembly, resource extraction | P3 |
| 13 | reverse-engineering-android-malware-with-jadx | Android malware RE workflow using JADX | P3 |
| 14 | firebase-apk-scanner | Firebase APK configuration security scan | P3 |
| 15 | deobf-string | Decrypt/recover obfuscated strings via pattern analysis & auto-decrypt | P3 |
| 16 | deobf-indirect | Deobfuscate indirect branches (CSEL+BR) via symbolic execution + BFS | P3 |
| 17 | llvm-obfuscation | LLVM-based obfuscation: OLLVM, CFF, string encryption, bogus control flow | P3 |
| 18 | binary-lifting | Machine code → LLVM IR lifting for analysis, decompilation, recompilation | P3 |
| 19 | deobfuscating-javascript-malware | JS malware deobf: web attacks, phishing pages, dropper scripts | P3 |
| 20 | deobfuscating-powershell-obfuscated-malware | Multi-layer PowerShell deobf via AST + dynamic analysis | P3 |
| 21 | binary-analysis-patterns | Binary analysis: disassembly, decompilation, CFG analysis, code patching | P3 |
| 22 | yara-rule-authoring | YARA rule creation for malware classification & threat hunting | P3 |
| 23 | ghidra-headless | Ghidra headless analyzer: automated decompilation, script analysis | P3 |
| 24 | frida-17 | Frida 17 JS API compatibility: hooking, tracing, dynamic instrumentation | P3 |
| 25 | reverse-engineering-malware-with-ghidra | Ghidra malware RE workflow: imports, strings, decrypt, unpack | P3 |
| 26 | radare2 | radare2 reverse engineering: disassembly, debugging, scripting | P3 |
2. TRIAGE — Do This First (before any read_skill)
Inspect the target and determine:
- Target type: native binary (ELF/PE/Mach-O) / JavaScript / bytecode (DotNet/Java/Python) / Android APK / other
- Obfuscation family (if identifiable): CFF, VM protection, string encryption, packing, JS obfuscator (obfuscator.io, JSFuck, etc.)
- Presence of anti-debug / anti-reversing layers
- Context: CTF challenge? Production analysis? Quick cleanup?
Output: A triage line, e.g. TRIAGE: native PE, VMProtect, has anti-debug → P0:code-obfuscation-deobfuscation P1:vm-and-bytecode-reverse,anti-debugging-techniques
3. ROUTING MATRIX — Load Only What's Needed
Based on triage, read_skill only for the skills marked ✓:
3a. Core Routing — P0 / P1 / P2
| Target | P0 core-deobf | P0 ast-deobf | P1 vm-reverse | P1 anti-debug | P1 symbolic | P2 bin-bypass | P2 ctf-rev | P2 anti-rev | P2 deep | P2 java-decompile | P2 jadx |
|---|---|---|---|---|---|---|---|---|---|---|---|
| Native binary, general | ✓ | ||||||||||
| Native + VM protection | ✓ | ✓ | |||||||||
| Native + VM + anti-debug | ✓ | ✓ | ✓ | ||||||||
| Native + CFF (OLLVM) | ✓ | ✓ | |||||||||
| Native + packed + anti-rev | ✓ | ✓ | ✓ | ||||||||
| JavaScript (any) | ✓ | ||||||||||
| JS + heavy obfuscation | ✓ | ✓ | |||||||||
| JS malware / phishing | ✓ | ✓ | |||||||||
| DotNet/Java/Python bytecode | ✓ | ✓ | ✓ | ||||||||
| Java bytecode (JAR/class) | ✓ | ||||||||||
| Android APK | ✓ | ||||||||||
| Android malware analysis | ✓ | ✓ | |||||||||
| PowerShell obfuscated | |||||||||||
| CTF reverse challenge | ✓ | ✓ | ✓ | ||||||||
| Unknown / unclear | ✓ |
Rule: If a cell is empty, do NOT load that skill. This keeps tool calls minimal.
3b. P3 Tooling Selector — Load When Deeper Analysis Demands It
After loading P0-P2 per the core matrix, if the deobfuscation encounters a specific bottleneck, load the matching P3 tool:
| Scenario | P3 skill to load |
|---|---|
| String encryption detected (runtime decrypt loop, encoded strings in .rdata) | deobf-string |
| Indirect branches (CSEL/BR pattern) blocking CFG recovery | deobf-indirect |
| LLVM-obfuscated binary (OLLVM, bogus CF, CFF) | llvm-obfuscation |
| Need to lift binary → LLVM IR for recompilation or advanced analysis | binary-lifting |
| JavaScript malware (phishing, dropper, web attack) | deobfuscating-javascript-malware |
| Multi-layer PowerShell payload | deobfuscating-powershell-obfuscated-malware |
| Disassembly / CFG / code patching analysis needed | binary-analysis-patterns |
| Post-analysis signature generation (threat hunting, classification) | yara-rule-authoring |
| Automated Ghidra headless decompilation at scale | ghidra-headless |
| Dynamic instrumentation / runtime hooking needed | frida-17 |
| Ghidra malware analysis workflow (imports, decrypt, unpack) | reverse-engineering-malware-with-ghidra |
| radare2 disassembly, debugging, or scripting preferred | radare2 |
Rule: Only load one P3 skill at a time, and only when the P0-P2 workflow hits a specific bottleneck that the P3 tool addresses.
4. WORKFLOW
Step 1: Triage (0–1 tool call)
Inspect the target. Use read_file for source code or file/DIE/PEiD output for binaries. Produce the triage line.
Step 2: Load P0 (1–2 tool calls)
read_skill for the P0 skill(s) the route demands. For native binaries that's code-obfuscation-deobfuscation; for JavaScript that's ast-deobfuscation.
Step 3: Load P1/P2 only if routed (0–3 tool calls)
Only read_skill for P1/P2 skills that the routing matrix marks ✓ for your target type.
Step 4: Deobfuscate
- Static first: pattern matching, CFF reduction, string decryption, dispatcher inlining
- Dynamic if blocked: debugger scripting, emulation, symbolic execution
- For JS: run
scripts/detect-patterns.jsfrom ast-deobfuscation first, then apply the matching pipeline - For JS malware / phishing: load
deobfuscating-javascript-malware(P3) for web-specific deobf patterns - For PowerShell: load
deobfuscating-powershell-obfuscated-malware(P3) for layered AST/dynamic analysis - For native: identify protector (VMProtect/Themida/OLLVM/custom) before choosing strategy
- For native with string encryption: load
deobf-string(P3) to auto-decrypt runtime-decrypt loops - For native with indirect branch obfuscation (CSEL+BR): load
deobf-indirect(P3) for CFG recovery - For LLVM-obfuscated targets: load
llvm-obfuscation(P3) for OLLVM/CFF/bogus-CF reduction - For binary lifting / recompilation: load
binary-lifting(P3) to convert machine code → LLVM IR - For disassembly / CFG / code patching: load
binary-analysis-patterns(P3) as a general analysis aid - For YARA signature authoring after analysis: load
yara-rule-authoring(P3) - For automated Ghidra headless analysis: load
ghidra-headless(P3) - For Ghidra malware analysis workflow: load
reverse-engineering-malware-with-ghidra(P3) - For dynamic instrumentation / runtime hooking: load
frida-17(P3) - For radare2 disassembly / debugging / scripting: load
radare2(P3) - For Java bytecode: decompile with
java-decompile(CFR/Procyon/Fernflower) - For Java bytecode with string obfuscation: also load
deobf-string(P3) - For Android APK: unpack with
apktool, then decompile DEX withjadx - For Android malware: also load
reverse-engineering-android-malware-with-jadx+ optionally scan Firebase config withfirebase-apk-scanner
Step 5: Validate
- Compare deobfuscated output to original symptoms
- Verify functional equivalence
- Check for residual/nested obfuscation layers
5. FALLBACK — When Triage Is Uncertain
If you cannot determine the target type after inspection:
read_skillfordeep-analysis(P2)- Follow deep-analysis methodology to classify the target
- Return to the routing matrix with the classification result
- Load the appropriate P0/P1 skills
This is the only scenario where you should load a P2 skill before P0.
6. QUICK REFERENCE CHECKLISTS
Native Binary
- Triage: identify protector/packer (file, DIE, PEiD)
- Load P0:
code-obfuscation-deobfuscation - Anti-debug? → Load
anti-debugging-techniques - VM-protected? → Load
vm-and-bytecode-reverse - Stuck on CFF? → Load
symbolic-execution-tools - Packed/protected? → Load
binary-protection-bypass - Anti-reversing? → Load
anti-reversing-techniques - String encryption? → Load
deobf-string - Indirect branch obfuscation? → Load
deobf-indirect - LLVM-obfuscated (OLLVM)? → Load
llvm-obfuscation - Binary lifting / recompilation needed? → Load
binary-lifting - Disassembly / CFG / patching? → Load
binary-analysis-patterns - Dynamic instrumentation / hooking? → Load
frida-17 - Ghidra headless at scale? → Load
ghidra-headless - Ghidra malware workflow? → Load
reverse-engineering-malware-with-ghidra - radare2 preferred? → Load
radare2 - YARA signatures after analysis? → Load
yara-rule-authoring - Deobfuscate → validate
JavaScript
- Triage: identify obfuscator (obfuscator.io, JSFuck, custom)
- Load P0:
ast-deobfuscation - Run
scripts/detect-patterns.jsto identify site/framework - Apply matching pipeline (CFF reduction, string decryption, dispatcher inline)
- Heavy obfuscation? → also load
code-obfuscation-deobfuscation - JS malware / phishing / dropper? → Load
deobfuscating-javascript-malware - PowerShell payload mixed in? → Load
deobfuscating-powershell-obfuscated-malware - Re-parse after each stage → validate
CTF
- Load P2:
ctf-reverse+deep-analysis - Identify challenge type (VM, packing, crypto, custom)
- Load P0/P1 per routing matrix
- String encryption in challenge? → Load
deobf-string - VM-based challenge? → also consider
deobf-indirect - OLLVM/CFF challenge? → also consider
llvm-obfuscation - Dynamic analysis needed? → Load
frida-17orradare2 - Solve → validate flag
Java / Android
- Triage: JAR/class file? Android APK?
- Java bytecode → Load P2:
java-decompile - Android APK → Load P2:
jadx(andapktoolfor unpacking if needed) - Android malware analysis → also load
reverse-engineering-android-malware-with-jadx - Firebase config scan → Load P3:
firebase-apk-scanner - String obfuscation? → also load
deobf-string - Dynamic instrumentation? → Load
frida-17 - Decompile → analyze → validate
PowerShell / JS Malware
- Triage: identify obfuscation layers (base64, XOR, compression, eval chains)
- PowerShell → Load P3:
deobfuscating-powershell-obfuscated-malware - JavaScript malware → Load P0:
ast-deobfuscation+ also loaddeobfuscating-javascript-malware - Apply layered deobf (Unicode → decode → AST cleanup)
- YARA signatures post-analysis? → Load
yara-rule-authoring - Validate behavioral equivalence
Generic P3 Tooling — Load When Bottleneck Appears
- String encryption? →
deobf-string - Indirect branch / CFG blocked? →
deobf-indirect - LLVM obfuscation? →
llvm-obfuscation - Binary lifting? →
binary-lifting - General binary analysis? →
binary-analysis-patterns - Automated Ghidra? →
ghidra-headless - Ghidra malware workflow? →
reverse-engineering-malware-with-ghidra - Live hooking / tracing? →
frida-17 - radare2 scripting? →
radare2 - YARA signatures? →
yara-rule-authoring