Salta ai contenuti

WABT - WebAssembly Binary Toolkit Cheatsheet

WABT - WebAssembly Binary Toolkit Cheatsheet

WABT (pronunciato “wabbit”) è il WebAssembly Binary Toolkit di riferimento — una suite di strumenti da riga di comando per lavorare con wasm a basso livello. Converte tra il formato binario .wasm e il formato testo leggibile dall”uomo .wat, disassembla e scarica i moduli, li convalida, produce una decompilazione simile al C e interpreta/esegue wasm. È la cassetta degli attrezzi fondamentale sia per lo sviluppo wasm che per il reverse engineering.

Installazione

PiattaformaComando
macOS (Homebrew)brew install wabt
Debian/Ubuntusudo apt install wabt
Arch Linuxsudo pacman -S wabt
npmnpm install -g wabt
Dal sorgentecompila con CMake dal repository WebAssembly/wabt
Verificawat2wasm --version

Gli Strumenti Principali

StrumentoConverte / fa
wat2wasmTesto .wat → binario .wasm
wasm2watBinario .wasm → testo .wat (disassembla)
wasm-objdumpScarica sezioni, opcodes, simboli
wasm-decompileProduce pseudocodice leggibile simile al C
wasm-validateConvalida un modulo
wasm-interpInterpreta/esegue un modulo (stack machine)
wasm2cConverte wasm → codice sorgente C
wasm-stripRimuove sezioni (ad es. nomi) da un modulo

Testo ↔ Binario

# Assembla testo in binario
wat2wasm module.wat -o module.wasm

# Disassembla binario in testo (il punto di partenza del RE)
wasm2wat module.wasm -o module.wat

# Mantieni i nomi di debug / sezioni personalizzate durante il disassembly
wasm2wat --generate-names module.wasm
OpzioneEffetto
-o FILEFile di output
--generate-namesSintetizza nomi per funzioni/locali senza nome
--enable-FEATUREAccendi una proposta wasm (ad es. --enable-threads)
-vVerboso

Ispezionare un Modulo (objdump)

# Dump completo di sezione + disassembly
wasm-objdump -x module.wasm      # intestazioni/sezioni
wasm-objdump -d module.wasm      # disassembla codice
wasm-objdump -s module.wasm      # contenuti sezione (hex)
FlagMostra
-hIntestazioni di sezione
-xDettagli di tutte le sezioni
-dCorpi della funzione disassemblati
-sContenuti della sezione grezza
-j SECTIONLimita a una sezione

Decompilazione (Output Leggibile)

# Decompilazione simile al C — molto più facile da leggere di WAT
wasm-decompile module.wasm -o module.dcmp

wasm-decompile ricostruisce il flusso di controllo strutturato e locali tipizzati, rendendo un modo veloce per comprendere cosa fa un modulo durante il triage.

Convalida e Esecuzione

ComandoScopo
wasm-validate module.wasmConferma che il modulo è ben formato
wasm-interp module.wasm --run-all-exportsEsegui le funzioni esportate
wasm2c module.wasm -o module.cEmetti C per la compilazione/analisi

Flusso di Lavoro di Reverse-Engineering

# 1) Disassembla con nomi
wasm2wat --generate-names target.wasm -o target.wat

# 2) Scarica importazioni/esportazioni per comprendere le capacità
wasm-objdump -x target.wasm | grep -E "import|export"

# 3) Ottenere pseudocodice leggibile
wasm-decompile target.wasm -o target.dcmp

# 4) Cerca stringhe/URL nelle sezioni dati
wasm-objdump -s target.wasm | less

Flag Funzionalità (Proposte)

FlagAbilita
--enable-threadsThread/atomici
--enable-simdSIMD
--enable-bulk-memoryOperazioni di memoria bulk
--enable-reference-typesTipi di riferimento
--enable-allTutte le proposte supportate

Usa questi quando un modulo utilizza funzioni wasm più recenti e gli strumenti predefiniti lo rifiutano.

WABT vs Strumenti Correlati

StrumentoRuolo
WABTConverte/ispeziona/convalida/decompila wasm
diswasmDecompiler pseudocodice di livello superiore
wasm-toolsManipolazione Rust di basso livello
BinaryenCassetta degli attrezzi della toolchain compilatore (wasm-dis, wasm-opt)

Risorse