Miasm - Reverse Engineering Framework Cheatsheet
Miasm ist ein kostenloses, Open-Source-Python-Framework zum Analysieren, Generieren und Manipulieren von Binärdateien. Es kann über viele Architekturen disassemblieren (x86/x64, ARM, MIPS, PPC und mehr), Code in seine eigene Intermediate Representation (IR) heben, Ausführung mit einem JIT emulieren und symbolische Ausführung für Deobfuskation und Constraint-Lösung durchführen. Es ist ein programmatisches Toolkit — Sie steuern es von Python aus — was es leistungsstark für die Automatisierung von Reverse-Engineering- und Unpacking-Aufgaben macht, die GUI-Tools nicht leicht skripten können.
Installation
| Methode | Befehl |
|---|
| pip | pip install miasm |
| Von Quelle | git clone https://github.com/cea-sec/miasm && cd miasm && pip install -e . |
| Optional JIT (LLVM) | pip install llvmlite (schnellerer Emulations-Backend) |
| Docker | docker build -t miasm . aus dem Repo |
| Überprüfung | python -c "import miasm; print('ok')" |
Core-Module
| Modul | Zweck |
|---|
miasm.analysis.binary | Lade einen Binary-Container (ELF/PE/raw) |
miasm.analysis.machine | Architektur-Abstraktion (Machine("x86_64")) |
miasm.core.locationdb | Verfolgen Sie Adressen/Labels in der Analyse |
miasm.ir | Intermediate Representation von Anweisungen |
miasm.analysis.dse | Dynamic Symbolic Execution Engine |
miasm.jitter | Emulations-/JIT-Engine |
Disassembly
from miasm.analysis.binary import Container
from miasm.analysis.machine import Machine
from miasm.core.locationdb import LocationDB
loc_db = LocationDB()
cont = Container.from_stream(open("target.bin", "rb"), loc_db)
machine = Machine(cont.arch)
mdis = machine.dis_engine(cont.bin_stream, loc_db=loc_db)
asmcfg = mdis.dis_multiblock(cont.entry_point) # rekursives Disassembly → CFG
for block in asmcfg.blocks:
print(block)
| Call | Beschreibung |
|---|
mdis.dis_block(addr) | Disassemblieren Sie einen einzelnen Basic Block |
mdis.dis_multiblock(addr) | Rekursiv in ein CFG disassemblieren |
asmcfg.blocks | Iterieren Sie über Basic Blocks |
asmcfg.dot() | Exportieren Sie den Control-Flow-Graph zu Graphviz |
lifter = machine.lifter_model_call(mdis.loc_db)
ircfg = lifter.new_ircfg_from_asmcfg(asmcfg)
for lbl, irblock in ircfg.blocks.items():
print(irblock)
Die IR normalisiert architekturspezifische Anweisungen in eine kleine typisierte Sprache, die es macht Querschnitt-Architektur-Analyse und symbolisches Reasoning möglich.
Emulation (Jitter)
from miasm.analysis.machine import Machine
jitter = Machine("x86_64").jitter("llvm") # oder "python", "gcc"
jitter.init_stack()
# map code, set registers, then:
jitter.run(0x401000)
| Backend | Abwägung |
|---|
python | Tragbar, am langsamsten |
gcc | Schneller, benötigt einen Compiler |
llvm | Am schnellsten, benötigt llvmlite |
| Feature | Verwendung |
|---|
add_breakpoint(addr, cb) | Führen Sie einen Python-Callback unter einer Adresse aus |
vm.set_mem(addr, data) | Schreiben Sie Speicher vor dem Ausführen |
| Benutzerdefinierte Syscalls/APIs | Hook-Bibliotheksaufrufe während der Emulation |
Symbolische Ausführung
from miasm.ir.symbexec import SymbolicExecutionEngine
sb = SymbolicExecutionEngine(lifter)
symbolic_pc = sb.run_at(ircfg, 0x401000)
print(sb.symbols) # symbolischer Register-/Speicherzustand
Symbolische Ausführung ist die Grundlage für Deobfuskation, Eingabelösung und Vereinfachung von Müll/opaken Prädikaten.
Häufige Workflows
| Ziel | Ansatz |
|---|
| Exportieren Sie ein CFG zur Ansicht | asmcfg.dot() → Renderon mit Graphviz |
| Entpacken/Deobfuskation | Emulieren Sie mit dem Jitter, speichern Sie Speicher beim OEP |
| Lösen Sie für eine Eingabe | Symbolische Ausführung + ein SMT-Solver (z3) |
| Querschnitt-Architektur-Analyse | Heben Sie zu IR auf, führen Sie dieselben Passes unabhängig von der Architektur durch |
Miasm vs andere RE-Frameworks
| Aspekt | Miasm | angr | Ghidra |
|---|
| Sprache | Python | Python | Java/GUI |
| IR | Eigene IR | VEX | P-code |
| Emulation | Integrierter JIT | Unicorn-basiert | Emulator-API |
| Symbolische Exec | Ja | Ja (Kernstärke) | Begrenzt |
| Beste Einsatzgebiete | Geskriptete Analyse, Deobfuskation | Symbolisch/CTF | Interaktive RE |
Ressourcen