Skip to content

sjkim1127/Fission

Repository files navigation

Fission

Fission logo

CI Rust License: AGPL-3.0-or-later

Fission is a high-performance, Rust-native reverse-engineering and decompilation framework designed for precision binary analysis at scale.

Overview

Fission represents a fundamental rearchitecture of decompilation workflows, placing Rust at the core of:

  • Instruction Semantics: Precision lift via Sleigh, with semantics-preserving IR normalization
  • Canonical Intermediate Representation: NIR/HIR layers ensuring deterministic, auditable transformations
  • Control-Flow Recovery: Graph-based structuring with algorithmic soundness, not heuristics
  • Pseudocode Rendering: Type-aware, context-sensitive output generation

Fission pursues independent decompilation excellence with Ghidra available as a benchmarking and validation reference.

Key Principles

  • Correctness-first: Unsafe decompilation (even with high precision) fails closed to fallback modes
  • Deterministic: All output feeds reproducible snapshots, metrics, and CI validation
  • Auditable: Every transformation step is tracked, logged, and verifiable
  • Modular: Each layer (lift β†’ IR β†’ structure β†’ render) owns its contract independently

License: AGPL-3.0-or-later. Contributions welcome under the CLA in CLA.md.


System Architecture

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                    Pseudocode Rendering                     β”‚
β”‚          (Type-aware formatting, symbol resolution)         β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                              ↑
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚              Structured IR (NIR/HIR Layers)                 β”‚
β”‚      (Control-flow recovery, loop/region detection)         β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                              ↑
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚        Canonical IR (P-Code Normalization & Semantics)      β”‚
β”‚     (SSA form, value numbering, dataflow analysis)          β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                              ↑
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚   Instruction Semantics & Lifting (Sleigh-based)            β”‚
β”‚         (Precise CFG skeleton, lift contracts)              β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Core Components

Component Role Ownership
fission-sleigh Instruction decode, lift semantics, CFG skeleton Sleigh layer
fission-pcode Canonical IR, NIR/HIR, structuring, pseudocode printer IR/Structure layers
fission-static Static facts, native helpers, analysis services Analysis layer
fission-decompiler-core Orchestration, routing, postprocess pipeline Workflow layer
fission-loader Binary format parsing, symbols, sections, strings Binary layer
fission-signatures Function signatures, type signatures, identifier data Data layer
fission-automation Quality lanes, regression testing, telemetry reporting Quality layer
fission-cli Command-line interface, REPL, batch processing Product layer
fission-tauri Desktop GUI, interactive analysis, visualization Product layer

Documentation Hub

Fission maintains comprehensive, role-based documentation:

For Researchers & Architects

For Operators & Users

Release & Changelog


Current Capabilities

Decompilation Paths

Path Status Coverage Notes
NIR (Rust-native) Primary PE x64, ARM64 Canonical Rust architecture path

Supported Binary Formats

  • PE (Windows x86, x64, ARM64) β€” Full support
  • ELF (Linux x86, x64, ARM, ARM64) β€” Core support
  • Mach-O (macOS x64, ARM64) β€” Experimental

Project Maturity Status

Solid & Production-Ready:

  • βœ… CLI interface with REPL and batch modes
  • βœ… Rust-native decompilation pipeline
  • βœ… Quality assurance and regression testing
  • βœ… Automated benchmarking against Ghidra
  • βœ… Deterministic, reproducible output

In Active Development:

  • πŸ”„ Large function readability and precision
  • πŸ”„ Advanced data abstraction and memory modeling
  • πŸ”„ Rich type inference and name recovery
  • πŸ”„ Desktop UI polish and end-user experience
  • πŸ”„ Additional architecture targets (MIPS, PPC, etc.)

Technology Notes: PE x64 has the strongest direct NIR coverage. Other architectures and formats exist as development targets and should not be treated as equivalent production-quality claims.


Repository Layout

Core Decompiler Modules

Crate Responsibility Key Artifacts
crates/fission-sleigh Instruction decode, semantics lift, CFG skeleton Sleigh bindings, lift contracts
crates/fission-pcode Canonical IR, NIR/HIR layers, structuring, printing P-Code IR, graph reduction, pseudocode output
crates/fission-static Static fact generation, prepare helpers, analysis Dominance, SCC, value analysis
crates/fission-decompiler-core Orchestration, routing, postprocess pipeline End-to-end workflow

Supporting Modules

Crate Responsibility
crates/fission-loader Binary loading, symbol extraction, section parsing
crates/fission-signatures Function/type signatures, identifier resolution
crates/fission-analysis Auxiliary analysis utilities
crates/fission-disasm Disassembly layer
crates/fission-core Core data structures
crates/fission-dynamic Dynamic analysis capabilities

Product Surfaces

Crate Purpose
crates/fission-cli Command-line interface with REPL
crates/fission-tauri Cross-platform desktop GUI
crates/fission-automation Quality lanes, test automation, CI/CD integration

Quick Start

Prerequisites

  • Rust 1.85+ (install)
  • Cargo (bundled with Rust)
  • C++ compiler (for some dependencies)

Build the CLI

git clone https://github.com/sjkim1127/Fission.git
cd Fission
cargo build -p fission-cli --release

The compiled binary is available at: target/release/fission_cli

Basic Usage

# Display binary information
./target/release/fission_cli info <binary>

# Decompile a single function at address
./target/release/fission_cli decomp <binary> --addr <address>

# List discovered functions
./target/release/fission_cli list <binary> --json

# Batch decompilation with limits
./target/release/fission_cli decomp <binary> --all --limit 100

# Operator-facing inventory
./target/release/fission_cli inventory function-facts <binary> --json

Legacy flat invocations still work for one transition period, but canonical usage is now subcommand-based.

For the full command model, subcommand ownership, operator inventory workflows, JSON guidance, and legacy compatibility rules, see docs/CLI.md.

If you are evaluating Fission externally and want the shortest CLI-first path, use docs/EVALUATION.md. That guide is opinionated, Windows x64-first, and includes checked-in sample binaries plus example output payloads.

Library-level use is possible at the Rust crate level, but the CLI is the current primary documented product surface.

If you want comparative evaluation rather than a first manual CLI pass, use the canonical benchmark workflow in benchmark/full_benchmark/README.md.

Run Quality Assurance

Execute the main quality lane for regression testing:

cargo run -p fission-automation -- nir-check --lane nir

Build All Products

# Release build (optimized)
cargo build --release

# Desktop GUI
cargo build -p fission-tauri --release

# Full test suite
cargo test --all

Engineering Status

Production-Ready Components βœ…

  • Decompilation Pipeline: Full Rust-native NIR/HIR path with deterministic output
  • Command-Line Interface: Feature-rich REPL with batch processing modes
  • Quality Assurance: Integrated regression testing and automated benchmarking
  • Binary Support: PE x64 (primary), ELF x64/ARM64, Mach-O (experimental)
  • Telemetry: Built-in metrics, statistics, and CI/CD reporting

Active Development Areas πŸ”„

Area Target Timeline
Large Function Handling >10K instruction functions Q2 2026
Data Abstraction Field/type-aware modeling Q2 2026
Name Recovery Symbol and identifier inference Q3 2026
UI/UX Polish Desktop workflow optimization Q3 2026
Additional Targets MIPS, PPC, additional architectures Q4 2026

Known Limitations

  • Large functions (>10K instructions) may produce simplified output
  • Advanced data abstraction patterns in progress
  • Limited cross-architecture coverage (PE x64 is primary target)
  • Desktop UI is functional but undergoing refinement

Advanced Usage

Benchmark Against Ghidra

For comparative quality analysis:

python3 benchmark/full_benchmark/full_decomp_benchmark.py \
  <binary> \
  --fission-bin target/release/fission_cli \
  --ghidra-dir vendor/ghidra/ghidra_11.4.2_PUBLIC \
  --output-dir benchmark/artifacts/full_benchmark/<run-name> \
  --limit 50

Canonical benchmark config and artifacts now live under:

Use benchmark_compact_summary.json for first-pass machine review and the verbose JSON/Markdown artifacts for deep debugging.

Inspect Quality Reports

Automated quality metrics are stored in:

benchmark/artifacts/automation/          # Fast-lane test results
benchmark/artifacts/full_benchmark/      # Detailed benchmark runs

Extended Architecture

For detailed system design, read docs/architecture/ARCHITECTURE.md


User Interface

Desktop Application

The Fission desktop GUI provides an integrated analysis environment:

Main Workspace Fission main screen

Decompilation View Fission decompile view

Features:

  • Interactive function browser with call graphs
  • Real-time decompilation with syntax highlighting
  • Symbol resolution and type inference
  • Batch analysis and report generation
  • Cross-reference navigation

Contributing

Fission welcomes contributions from the reverse-engineering and decompilation communities.

Getting Started

  1. Review CONTRIBUTING.md for guidelines
  2. Sign the Contributor License Agreement (CLA.md)
  3. Check AGENTS.md for code organization and conventions
  4. Open an issue to discuss your proposed changes

Contribution Areas

  • Instruction Semantics: Accuracy improvements for Sleigh lifts
  • IR Transformations: New optimizations and normalization passes
  • Structuring Algorithms: Control-flow recovery improvements
  • Binary Format Support: Additional architectures and formats
  • Testing & Benchmarking: Quality metrics and regression detection
  • Documentation: Tutorials, guides, and architectural documentation

Community & Support

Communication

Learning Resources


Vision & Long-Term Direction

Fission is architected for project-level software restoration β€” not just decompilation.

Current Focus (2026)

βœ… High-precision decompilation for PE x64
βœ… Deterministic, auditable analysis pipelines
βœ… Measurable quality metrics and benchmarking

Medium-Term (2026-2027)

πŸ”„ Expanded architecture support
πŸ”„ Advanced data abstraction and memory modeling
πŸ”„ Integrated static/dynamic analysis workflows
πŸ”„ Semantic-aware type recovery

Long-Term Vision (2027+)

🎯 Project-level program comprehension
🎯 Cross-function fact accumulation
🎯 AI-assisted analysis on verified artifacts
🎯 Protocol-facing and behavioral analysis integration
🎯 Commercial-grade analysis platform

Design Philosophy

Rather than building a thin UI over existing decompilers, Fission pursues independent decompilation excellence with:

  • Algorithmic Soundness: Graph-based, mathematically rigorous transformations
  • Auditability: Every decision is verifiable and reproducible
  • Modularity: Clean separation of concerns across layers
  • Quality Focus: Metrics and regression detection as first-class citizens
  • Long-term Maintenance: Sustainable, understandable codebase

License & Citation

SPDX-License-Identifier: AGPL-3.0-or-later

License: GNU Affero General Public License v3.0 or later
See LICENSE for full text

Citation

If you use Fission in academic work, please cite:

@software{fission2024,
  title={Fission: A Rust-Native Decompilation Framework},
  author={Kim, Sung Joo},
  year={2024},
  url={https://github.com/sjkim1127/Fission}
}

Acknowledgments

Fission builds upon decades of decompilation research and engineering. Special acknowledgment to:

  • Ghidra β€” Reference architecture, semantic lifting, benchmarking
  • RetDec β€” Decompilation techniques and IR design
  • Radare2 β€” Analysis ecosystem and tooling inspiration
  • LLVM β€” Compiler infrastructure and optimization patterns
  • The reverse-engineering research community