Salta ai contenuti

diswasm - Decompiler e RE WebAssembly Cheatsheet

diswasm - Decompiler e RE WebAssembly Cheatsheet

diswasm è uno strumento open-source di decompilazione e reverse-engineering per WebAssembly (.wasm). Poiché la logica dell”applicazione viene sempre più spedita come wasm — nei browser, nelle funzioni edge, nei plugin e persino nei malware — gli analisti hanno bisogno di leggerla. diswasm analizza un modulo wasm, disassembla le sue funzioni, recupera la struttura e produce pseudocodice di livello superiore dal bytecode della stack machine, rendendo molto più facile comprendere rispetto al wasm grezzo. Completa il WebAssembly Binary Toolkit (WABT) per un flusso di lavoro RE wasm completo.

Installazione

MetodoCome
Dal sorgentegit clone https://github.com/wasmkit/diswasm && cd diswasm
Buildsegui i passaggi di build del repo (per lingua)
Strumenti complementariaccoppia con WABT (wasm2wat) e wasm-tools
Verificaesegui su un .wasm noto e ispeziona l”output

Comprendre il Wasm Innanzitutto

ConcettoSignificato
ModuleL”unità .wasm: funzioni, memoria, tabelle, globali
Stack machinewasm esegue su uno stack operando (nessun registro)
WATFormato testo di WebAssembly (.wat leggibile dall”uomo)
Sezionitype, import, function, code, data, export, …
Tipii32, i64, f32, f64 (più tipi di riferimento)

Flusso di Lavoro di Base

# 1) Ispeziona la struttura con il disassembler di WABT
wasm2wat module.wasm -o module.wat

# 2) Decompila in pseudocodice con diswasm
diswasm module.wasm > module.pseudo

# 3) Leggi le funzioni recuperate e il flusso di controllo
PassaggioStrumentoOutput
Disassemblawasm2wat (WABT).wat testo (basso livello)
Decompiladiswasmpseudocodice (livello superiore)
Stile Objdumpwasm-objdump (WABT)sezioni/opcodes

Cosa Recupera diswasm

CaratteristicaAiuta con
Confini della funzioneDove inizia/finisce ogni funzione
Flusso di controlloblock/loop/if ricostruiti come codice strutturato
Locali/parametriVariabili digitate per funzione
Operazioni di memoriacaricamenti/immagazzinamenti rispetto alla memoria lineare
Importazioni/esportazioniFunzioni host richiamate / funzioni esposte

Leggere l”Output (Triage)

SegnaleCerca
Funzioni host importateLe chiamate JS/host (env.*) rivelano le capacità
Sezione stringa/datiCostanti incorporate, URL, chiavi
Funzioni esportateI punti di ingresso del modulo
Crescita della memoria / operazioni bulkSpacchettamento o buffer grandi
Chiamate indiretteDispatch della tabella delle funzioni (offuscamento)

Strumenti Wasm Complementari

StrumentoRuolo
diswasmDecompila wasm → pseudocodice
WABT (wasm2wat, wasm-objdump)Disassembla / ispeziona
wasm-toolsManipolazione e validazione Rust di basso livello
Binaryen (wasm-dis)Analisi/ottimizzazione a livello di compilatore
Ghidra + wasm pluginAmbiente RE completo

Flussi di Lavoro Comuni

# Analizza un payload wasm di browser sconosciuto
wasm2wat suspicious.wasm -o suspicious.wat   # struttura
diswasm suspicious.wasm > suspicious.c       # logica leggibile
grep -iE "fetch|eval|XMLHttp|import" suspicious.wat  # capacità

# Confronta due versioni di un modulo wasm
diswasm v1.wasm > v1.pseudo; diswasm v2.wasm > v2.pseudo
diff v1.pseudo v2.pseudo

diswasm vs Altri Approcci

Aspettodiswasmwasm2wat (WABT)JEB (commerciale)
Livello di outputPseudocodiceWAT basso livelloDecompiler pseudo-C
CostoGratuito/open-sourceGratuito/open-sourceCommerciale
Migliore perDecompilazione veloce e leggibileDisassembly fedeleRE profonda e levigata

Risorse