Hacking Tools

ollvm-unflattener : A Tool For Reversing Control Flow Flattening In OLLVM

Control flow flattening is a common obfuscation technique used by OLLVM (Obfuscator-LLVM) to transform executable logic into complex state-driven structures.

The ollvm-unflattener tool addresses this challenge through Python-based analysis and Miasm framework integration, offering a systematic approach to reverse engineering obfuscated binaries.

This tool specializes in reconstructing original control flow graphs (CFGs) by:

  1. Symbolic execution of flattened functions using Miasm’s engine
  2. State variable analysis to identify dispatch mechanisms and block relationships
  3. Multi-layered deobfuscation through breadth-first search (BFS) of function calls
  4. Binary patching to restore executable logic

Key Features

  • Architecture Support: Currently focuses on x86 architecture (tested on Linux ELF binaries)
  • Dynamic Analysis: Uses symbolic execution instead of static pattern matching
  • Batch Processing: --all flag enables recursive deobfuscation of related functions
  • Visual Validation: Generates Graphviz diagrams for pre/post deobfuscation comparison
bash# Installation
git clone https://github.com/cdong1012/ollvm-unflattener.git
pip install -r requirements.txt

Operational Workflow

  1. Target Identification: Requires function address (-t parameter)
  2. Execution Tracing: Maps state transitions through symbolic execution
  3. CFG Reconstruction: Rebuilds original block connections using recovered logic
  4. Binary Modification: Patches flattened structures with reconstructed flow
Obfuscated CFGRestored CFG
Complex switch-case structureSimplified conditional branches
State-driven transitionsDirect block connections

Limitations

  • Architecture Constraints: No native ARM/x64 support (requires code modifications)
  • Platform Specificity: Primarily tested on Linux binaries
  • Layer Depth: Multi-pass obfuscation requires sequential processing

The tool demonstrates 83% success rate in test cases against single-layer OLLVM flattening, though complex multi-layered obfuscations may require manual intervention.

Future development plans include IDA Pro integration and expanded architecture support, building on concepts from MODeflattener’s static analysis approach.

Varshini

Varshini is a Cyber Security expert in Threat Analysis, Vulnerability Assessment, and Research. Passionate about staying ahead of emerging Threats and Technologies.

Recent Posts

sort Command in Linux: Sort Text, Numbers, Columns, and More

The sort command in Linux reads lines from files or standard input and writes them to standard…

11 hours ago

wall Command in Linux: Broadcast Messages to Logged-In Users

The wall command in Linux sends a message to the terminals of all currently logged-in users. The…

11 hours ago

journalctl Command in Linux: Query and Filter System Logs

journalctl queries logs collected by systemd-journald, the systemd logging daemon. It gives you structured access to kernel…

11 hours ago

stat Command in Linux: View File and Filesystem Metadata

The stat command in Linux displays detailed metadata about files and filesystems. Where ls gives a condensed summary suitable…

11 hours ago

groupadd Command in Linux: Create Groups and Set GID Options

In Linux, groups organize user accounts and define shared access to files and resources. Every…

1 day ago

touch Command in Linux: Create Files and Update Timestamps

The touch command in Linux does two things: it creates new empty files, and it updates the…

1 day ago