
Binärer Visualisierer und Triage-Werkzeug — Entropie-, Byte-Klassen- und Hilbert-Oberflächen, Punktdiagramme und Kontrollflussgraphen über einem gemeinsamen Adressraum-Modell.
Binärvisualisierungs- und Triage-Tool: verknüpfte interaktive Ansichten (Entropie, Histogramme, Bild-/Punktdiagramm-Oberflächen, Kontrollflussgraphen) über einem gemeinsamen Adressraummodell.
pipx install binviz && binviz serve
Öffnen Sie eine Datei, und jede Ansicht betrachtet denselben Adressraum. Wählen Sie einen Bereich in einer aus, und die übrigen folgen — das Ziel ist es, die Frage „Was ist diese Region?“ zu beantworten, indem man sie gleichzeitig auf mehrere Arten betrachtet.
binviz model parst ELF/PE/Mach-O über LIEF in Regionen, Symbole und eine Offset↔virtuelle-Adress-Zuordnung und materialisiert Lücken und Überlagerungen. Fehlerhafte Eingaben fallen auf ein Rohmodell zurück, statt zu scheitern.binviz triage sagt, wie die Datei aussieht und warum; in der UI führt jeder Befund per Klick zu den Bytes, aus denen er abgeleitet wurde.Die UI besteht aus fünf Arbeitsbereichen — Übersicht, Bytes, Muster, Code und Alles — über derselben Auswahl. Nur statische Analyse: Proben werden geparst, niemals ausgeführt.




Gerendert mit demselben Code, mit dem die UI zeichnet, direkt aus der CLI — neu generieren mit python docs/make_plates.py.
| Ein statisches Binärprogramm | Dasselbe Programm, UPX-gepackt |
|---|---|
![]() | ![]() |
| Code, Strings und Padding trennen sich in sichtbare Territorien. | Die Struktur kollabiert zu gleichförmigem Rauschen — das Kennzeichen von Packen. |
![]() | ![]() |
| Fensterbasierte Entropie bleibt gebändert und niedrig. | Flach und hoch, bis direkt zum Entpack-Stub. |
| Richtige Zeilenlänge | Falsche Zeilenlänge |
|---|---|
![]() | ![]() |
Dieselben Bytes, eine Zahl anders. Genau deshalb gibt es den Zeilenlängen-Vorschläger: Die falsche Zeilenlänge verwandelt ein Foto in diagonales Rauschen, und man schließt daraus, dass es kein Foto gibt.
ARCHITECTURE.md beschreibt, wie es zusammengesetzt ist: was ausgeliefert wird, das Branding, das jede Oberfläche erbt, die Konventionen, denen ein neuer Bildschirm folgen muss, und die Einschränkungen, die bewusst gewählt sind. SECURITY.md ist die Sicherheitslage.
python -m venv .venv
# -c pinnt auf die exakten Versionen, gegen die die Suite grün ist; pyproject.toml
# veröffentlicht Bereiche, also ohne -c bekommt man, was heute aufgelöst wird
.venv/Scripts/pip install -e ".[dev]" -c constraints-dev.txt # POSIX: .venv/bin/pip
# Ground-Truth-Korpus bauen (verwendet zig cc aus dem ziglang-Pip-Paket;
# benötigt UPX im PATH, in $UPX oder entpackt in corpus/tools/upx-*/)
make -C corpus # oder: python corpus/build.py
# Schwellenwerte werden gemessen, nie hartkodiert (siehe ARCHITECTURE.md §2.1)
python corpus/calibrate.py # schreibt corpus/calibration.json
pytest # funktionale Suite
pytest -m perf -s # 100-MB-Leistungsziele
binviz probe corpus/out/hello_O2
binviz model corpus/out/hello_upx
binviz signal corpus/out/hello_upx --name entropy_4096 --png out.png
binviz hist corpus/out/ramp16.bin --n 2 --dtype u16le --png bigram.png
# Oberflächen: -p übergibt Oberflächenparameter
binviz surface corpus/out/hello_static --name hilbert -p mode=byteclass --png h.png
binviz surface corpus/out/rgb_raw.bin --name image -p mode=rgb8 -p width=320 --png i.png
binviz surface corpus/out/repeats.bin --name dotplot -p mode=exact --png d.png
binviz stride corpus/out/bayer_raw.bin --mode bayer_RGGB_RGB_12
# Code
binviz disasm corpus/out/hello_O2 --limit 20
binviz functions corpus/out/hello_static --sort size
binviz cfg corpus/out/hello_O2 --func main --dot main.dot
# Das Urteil und warum
binviz triage corpus/out/hello_upx
binviz serve # 127.0.0.1:8000
Er gibt eine URL mit einem Sitzungstoken aus — öffnen Sie diese. Jede /api-Route erfordert das Token, denn „es lauscht nur auf localhost“ ist keine Verteidigung gegen eine Webseite in einem anderen Tab, die 127.0.0.1 genauso erreicht wie jeder andere Ursprung. SECURITY.md enthält die Begründung.
Der Dateizugriff ist auf --root beschränkt (Standard: das Arbeitsverzeichnis), daher werden Pfade außerhalb davon verweigert.
Alle vier haben ein Flag und eine Umgebungsvariable, und alle vier existieren, um zu verhindern, dass ein lokaler Aufrufer mehr verbraucht, als beabsichtigt. Die Standardwerte sind für ein Laptop gewählt; erhöhen Sie sie, wenn Ihre Maschine größer ist.