Reverse Engineering im Browser. Eine ausführbare Datei ablegen, in Sekunden einen ersten Überblick erhalten. binkeep ist ein kostenloses Open-Source-Tool zur Binäranalyse für PE, ELF und Mach-O: Disassembler, Funktionen, Querverweise, Strings, Importe, YARA und Packer-Erkennung. Die Datei wird niemals hochgeladen, und nach dem ersten Besuch funktioniert es offline.
Ausprobieren: https://kano92-dir.github.io/binkeep/

Es ist kein Ghidra-Ersatz. Es deckt den ersten Teil der Untersuchung einer unbekannten Binärdatei ab, ohne dass etwas installiert werden muss: Malware-Triage, CTF-Challenges, Prüfen, welche Importe ein heruntergeladenes Tool verwendet, oder der Vergleich zweier Builds.


Funktionen
Formate
- PE32 / PE32+ (Windows), ELF32 / ELF64 (Linux, beide Endianness), Mach-O 32/64 und Universal Binaries (macOS, iOS)
- Alles andere erhält trotzdem Hex, Strings, Entropie und YARA
Übersicht
- Header, Entry Point, Kompilierzeit, gelinkte Bibliotheken, Plattform- und SDK-Versionen
- Sicherheits-Mitigations: ASLR, DEP, CFG (PE); PIE, NX, RELRO, Canary, FORTIFY (ELF); PIE, Canary, ARC, Hardened Runtime (Mach-O)
- Packer-Erkennung: UPX, Themida, VMProtect, ASPack, MPRESS, PECompact, Enigma, .NET-Obfuskatoren und mehr, anhand von Section-Namen und Byte-Signaturen, plus Heuristiken (Code-Entropie, Importanzahl, Platzierung des Entry Points)
- Authenticode: Signierer, Aussteller, Gültigkeit, Zeitstempel und der neu berechnete Datei-Digest, um zu zeigen, ob sich die Datei nach der Signierung geändert hat
- Mach-O-Codesignatur: Identifier, Team-ID, Ad-hoc oder Developer, Hardened Runtime
- Toolchain-Hinweise: Go, Rust, Nim, PyInstaller, NSIS, Inno Setup, AutoIt, Electron, .NET, GCC
Code
- Funktionsliste aus einem vollständigen linearen Sweep des Codes, plus
.pdata (x64 PE) und LC_FUNCTION_STARTS (Mach-O)
- Querverweise: wer eine Funktion aufruft, welcher Code einen Import verwendet, welcher Code einen String liest
- Disassembly (x86, x64, ARM, ARM64 via Capstone in WebAssembly) mit API-Namen über IAT, GOT und Mach-O-Stubs, Inline-Strings, anklickbaren Verzweigungen
- Kontrollflussgraph für jede Funktion: Basic Blocks mit genommenen / nicht genommenen / Loop-Kanten, Pan und Zoom,
Space zum Umschalten zwischen Listing und Graph
- Eigene Funktionsnamen und Kommentare (
N, ;, X im Disassembly), im Browser pro Datei-Hash gespeichert
Daten
- Entropie-Graph mit Section-Bändern, Sections mit R/W/X-Flags
- Importe mit heuristischen Tags (Injection, Anti-Debug, Netzwerk, Krypto, Persistenz, ...) und Aufrufzählern
- Strings (ASCII und UTF-16) mit Regex-Filter, Kategorien und einem Filter „vom Code referenziert“
- PE-Ressourcen: Versionsinformationen, Manifest (angeforderte Ausführungsebene), das Anwendungssymbol und eingebettete ausführbare Dateien oder Archive
- Hex-Ansicht, die auch bei großen Dateien schnell bleibt
Workflow
- YARA: echtes libyara, zu WebAssembly kompiliert, mit den Modulen
pe, elf und math. Deine Regeln werden im Browser gespeichert und bei jeder geöffneten Datei ausgeführt
- Zwei Dateien vergleichen: geänderte Header, Sections, Importe, Exporte und Strings
- Freigabelink: Der Bericht wird in das URL-Fragment (
#r=...) komprimiert, das Browser niemals an einen Server senden. Die Datei selbst ist nie enthalten
- Bericht als Markdown oder JSON exportieren
- Befehlspalette (
Ctrl+K / Cmd+K): zu jeder Funktion, jedem Import, Symbol, String, jeder Adresse oder Aktion springen
- Als App installierbar, funktioniert offline
Selbst hosten
Es ist eine statische Website ohne Build-Schritt. GitHub Pages funktioniert unverändert: Repository pushen, dann unter Settings > Pages den Branch main und den Root-Ordner auswählen.
Lokal ausführen
python serve.py
Öffnen Sie dann http://localhost:8765. Jeder statische Dateiserver funktioniert, solange er .js als text/javascript und .wasm als application/wasm ausliefert.
Kein Build-Schritt. Capstone (capstone-wasm 1.0.3) und libyara (libyara-wasm 1.2.1) sind in vendor/ gebündelt.
Datenschutz
Die gesamte Analyse findet in der Seite statt. Die einzigen Netzwerkanfragen sind die App-Dateien und Google Fonts. Der Freigabelink enthält den Bericht, nicht die Datei, und der Teil nach # wird niemals an einen Server gesendet.
Einschränkungen
- Die Funktionserkennung ist ein linearer Durchlauf: Daten innerhalb von Code können falsch gelesen werden, und Funktionen, die nur über Zeiger erreicht werden, können übersehen werden
- Die Authenticode-Zertifikatskette wird nicht verifiziert, nur der Datei-Digest
- Noch kein Decompiler (geplant)
- API-Tags sind Hinweise. Legitime Software verwendet jede dieser APIs
Lizenz
binkeep ist unter der MIT-Lizenz lizenziert, siehe LICENSE.
Gebündelter Drittanbieter-Code, mit Lizenztexten daneben in vendor/: