Reverse engineering nel tuo browser. Trascina un eseguibile, ottieni una prima analisi in pochi secondi. binkeep è uno strumento gratuito e open source per l'analisi di binari PE, ELF e Mach-O: disassembler, funzioni, riferimenti incrociati, stringhe, import, rilevamento YARA e packer. Il file non viene mai caricato e, dopo la prima visita, funziona offline.
Provalo: https://kano92-dir.github.io/binkeep/

Non è un sostituto di Ghidra. Copre la prima fase dell'analisi di un binario sconosciuto, senza installare nulla: triage di malware, challenge CTF, verifica di cosa importa uno strumento scaricato o confronto tra due build.


Funzionalità
Formati
- PE32 / PE32+ (Windows), ELF32 / ELF64 (Linux, entrambe le endianness), Mach-O 32/64 e binari universali (macOS, iOS)
- Qualsiasi altro formato ottiene comunque hex, stringhe, entropia e YARA
Panoramica
- Header, entry point, data di compilazione, librerie collegate, versioni di piattaforma e SDK
- Mitigazioni di sicurezza: ASLR, DEP, CFG (PE); PIE, NX, RELRO, canary, FORTIFY (ELF); PIE, canary, ARC, hardened runtime (Mach-O)
- Rilevamento packer: UPX, Themida, VMProtect, ASPack, MPRESS, PECompact, Enigma, offuscatori .NET e altri, tramite nomi delle sezioni e firme di byte, più euristiche (entropia del codice, numero di import, posizione dell'entry point)
- Authenticode: firmatario, emittente, validità, timestamp e digest del file ricalcolato per mostrare se il file è cambiato dopo la firma
- Firma del codice Mach-O: identificatore, team ID, ad-hoc o developer, hardened runtime
- Indizi sulla toolchain: Go, Rust, Nim, PyInstaller, NSIS, Inno Setup, AutoIt, Electron, .NET, GCC
Codice
- Elenco delle funzioni da una scansione lineare completa del codice, più
.pdata (x64 PE) e LC_FUNCTION_STARTS (Mach-O)
- Riferimenti incrociati: chi chiama una funzione, quale codice usa un import, quale codice legge una stringa
- Disassembly (x86, x64, ARM, ARM64 tramite Capstone in WebAssembly) con nomi delle API attraverso IAT, GOT e stub Mach-O, stringhe inline, rami cliccabili
- Grafo del flusso di controllo per qualsiasi funzione: blocchi di base con archi presi / non presi / di loop, pan e zoom,
Space per passare tra listing e grafo
- Nomi di funzione e commenti personalizzati (
N, ;, X nel disassembly), salvati nel browser per hash del file
Dati
- Grafico dell'entropia con bande delle sezioni, sezioni con flag R/W/X
- Import con tag euristici (injection, anti-debug, rete, crittografia, persistenza, ...) e conteggi delle chiamate
- Stringhe (ASCII e UTF-16) con filtro regex, categorie e filtro "referenced by code"
- Risorse PE: informazioni sulla versione, manifest (livello di esecuzione richiesto), icona dell'applicazione ed eseguibili o archivi incorporati
- Vista hex che resta veloce su file di grandi dimensioni
Flusso di lavoro
- YARA: vera libyara compilata in WebAssembly, con i moduli
pe, elf e math. Le tue regole sono conservate nel browser ed eseguite su ogni file che apri
- Confronto tra due file: header, sezioni, import, export e stringhe modificati
- Link di condivisione: il report è compresso nel frammento dell'URL (
#r=...), che i browser non inviano mai a un server. Il file stesso non è mai incluso
- Esportazione del report in Markdown o JSON
- Command palette (
Ctrl+K / Cmd+K): salta a qualsiasi funzione, import, simbolo, stringa, indirizzo o azione
- Installabile come app, funziona offline
Ospitalo tu stesso
È un sito statico senza fase di build. GitHub Pages funziona così com'è: esegui il push del repository, poi in Settings > Pages seleziona il branch main e la cartella root.
Esecuzione locale
python serve.py
Poi apri http://localhost:8765. Qualsiasi server di file statici va bene, purché serva i file .js come text/javascript e i file .wasm come application/wasm.
Nessuna fase di build. Capstone (capstone-wasm 1.0.3) e libyara (libyara-wasm 1.2.1) sono inclusi in vendor/.
Privacy
Tutta l'analisi avviene nella pagina. Le uniche richieste di rete sono i file dell'app e Google Fonts. Il link di condivisione trasporta il report, non il file, e la parte dopo # non viene mai inviata ad alcun server.
Limiti
- L'individuazione delle funzioni è una scansione lineare: i dati all'interno del codice possono essere interpretati erroneamente, e le funzioni raggiungibili solo tramite puntatori possono non essere rilevate
- La catena di certificati Authenticode non viene verificata, solo il digest del file
- Nessun decompilatore per ora (previsto)
- I tag delle API sono solo indizi. Il software legittimo usa ognuna di queste API
Licenza
binkeep è distribuito con licenza MIT, vedi LICENSE.
Codice di terze parti incluso, con i testi delle licenze accanto in vendor/: