interactive RE platform · bin → bin

A disassembler with an engine behind it.

Sigil is an interactive disassembler built on a purely-static devirtualization and deobfuscation engine. x86-64 is lifted to LLVM IR, executed under a faithful JIT, and normalized back toward readable code — no memory dumps, no sandbox. It's not a viewer over a database: the workbench drives the same engine that recovers the program.

The Sigil workbench showing a control-flow graph of a recovered function with six basic blocks and branch edges ↗ full size
CFGGraph view

A recovered function's control-flow graph — six basic blocks, routed branch edges, syntax-highlighted disassembly per node — live from the engine.

Beyond the listing

Most disassemblers read the bytes. Sigil runs the semantics.

The same lifter that powers the listing feeds a normalization pipeline and a faithful JIT — so recovery is grounded in what the machine actually does, not pattern-matched against a specific protector. Where a budget or timeout is hit, Sigil records honest residue instead of a plausible-but-wrong answer.

Static devirtualization

Recover virtualized functions without ever running the sample — VM handlers lifted, dispatch unrolled, control flow rebuilt straight from the bytes.

In development

Faithful JIT semantics

remill → LLVM 21 → MCJIT models x86-64 exactly, not an approximate emulator. The IR you read is the semantics the CPU executes.

Shipping

Semantic deobfuscation

MBA, opaque predicates, junk and flattening dissolve under LLVM-driven passes — with a residue report that tells you exactly what didn't fold.

Shipping

Programmable & agent-drivable

A scriptable JIT emulator and an MCP interface so external agents can drive analysis end to end — designed, and on the near roadmap.

Planned

Showcase

The workbench, on a real binary.

Every view drives the live analysis model — functions stream in as they're discovered, and nothing blocks while a large image analyzes. Click any frame to open it full size.

Linear disassembly listing with syntax highlighting, function boundaries, imports and data rows↗ full size
01Annotated disassembly

A linear listing: syntax-highlighted code, startp/endp boundaries, resolved imports, strings and data — streamed in as analysis runs.

Cross-references dock listing every call site into a function↗ full size
02Cross-references

Every incoming and outgoing edge for the current location — direction, address, and kind — one click from the call site.

Split view: disassembly on the left, normalized LLVM IR on the right, with the normalize residue report in the console↗ full size
03Lift & normalize · split view

Lift a function to LLVM IR and run the normalize pipeline — the optimized IR beside the listing, with a live residue report (lowered 67 reads / 56 writes… control:5). Early, and honest about what's left.

Strings dock with recovered ASCII and UTF-16 literals, filterable↗ full size
04String recovery

Recovered ASCII and UTF-16 literals, filterable and navigable — with the string data rendered inline in the listing.

Disassembly with named stack variables and resolved import calls↗ full size
05Stack analysis

Frame reconstruction names operands var_/arg_, renameable across every reference, with imports resolved to their symbols.

Interactive definition control forcing a function, with a consistency issue flagged inline↗ full size
06Definition control

IDA-style steering — make / undefine functions, undefine code, analyze-from — with recovery inconsistencies flagged inline ([!] no clean return).

Pipeline

Binary in, binary out.

Recovery starts at the original entry point — the unpacked OEP, not a deep nested VM — carrying a 1:1 machine-state snapshot so the static lifter is always seeded correctly.

IN

Protected PE

A packed, virtualized binary — the untouched input bytes.

01

Unpack to OEP

Resolve the packer stub and snapshot state at the original entry.

02

Lift to LLVM IR

remill raises each reachable instruction to faithful IR.

03

Normalize

Passes fold MBA, kill opaque predicates, flatten VM dispatch.

OUT

Clean binary

Re-emitted through LIEF — deobfuscated and analyzable.

Current features

What works today.

The workbench is usable now on real x86-64 PE images — the shipping surface while the devirtualization engine hardens.

Disassembly & views

  • Linear listing with syntax highlighting, streamed live
  • Graph CFG — layered blocks, routed edges, draggable
  • Toggle & follow — Binja-style spacebar, click-to-follow, history
  • Overview entropy band + live analysis frontier

Analysis & navigation

  • Cross-references, strings, sections, entry points
  • Stack frames + var_/arg_ naming
  • Globals & imports detected and resolved
  • Progressive analysis — never blocks the UI

Recovery & editing

  • Lift to LLVM IR + normalize pipeline, on demand
  • Definition control — make/undefine/analyze-from
  • Rename & comment · full undo/redo · block colours
  • .s1g projects, save/discard-on-close, settings

Roadmap

Where it's going.

The workbench ships today; the engine and the automation layer are the frontier. Dated loosely — direction over deadlines.

Nowshipping
  • Interactive workbench — listing, CFG, xrefs, strings, sections, entry points
  • Definition control, undo/redo, projects & settings
  • Lift + normalize to LLVM IR with a residue report
  • Stack analysis and variable naming
Laterplanned
  • Time-travel debugging over the JIT — record & replay emulated execution
  • ELF & Mach-O containers; further architectures
  • Automation & collaboration — scriptable pipelines, shared projects
  • …and a few differentiators we're keeping quiet for now

Built on

Nothing global. Everything pinned.

remill
x86-64 → LLVM IR lifter
Apache-2.0
LLVM 21 · MCJIT
optimize, lower, faithful IR exec
Apache-2.0
LIEF
PE load & rebuild container
Apache-2.0
Qt 6
the disassembler workbench
LGPL-3.0
Status · in development

Not public yet — but say hello.

Sigil is research-grade tooling for authorized reverse engineering, hardening toward a release. If you work on hard targets, want to follow along, or think it fits your team, reach out.

sidewinder@sigil.re

Sigil is intended for reverse engineering you are authorized to perform — your own binaries, security research, and in-scope bug-bounty work. Use it lawfully and within the terms of the targets you analyze.