Pular para o conteúdo

diswasm - Decompilador WebAssembly & Cheatsheet de RE

diswasm - Decompilador WebAssembly & Cheatsheet de RE

diswasm é uma ferramenta de código aberto decompilador e engenharia reversa para WebAssembly (.wasm) binários. Com mais lógica de aplicativo sendo enviada como wasm — em navegadores, funções de borda, plugins e até malware — os analistas precisam lê-lo. diswasm analisa um módulo wasm, desassentar suas funções, recupera estrutura e produz pseudocódigo de nível superior do bytecode da máquina de pilha, tornando muito mais fácil de entender do que wasm bruto. Complementa o WebAssembly Binary Toolkit (WABT) para um fluxo de trabalho wasm RE completo.

Instalação

MétodoComo
From sourcegit clone https://github.com/wasmkit/diswasm && cd diswasm
Buildsiga as etapas de compilação do repo (por idioma)
Companion toolsemparelhe com WABT (wasm2wat) e wasm-tools
Verifyexecute contra um .wasm conhecido e inspecione a saída

Compreendendo wasm Primeiro

ConceitoSignificado
ModuleA unidade .wasm: funções, memória, tabelas, globais
Stack machinewasm executa em uma pilha operacional (sem registros)
WATFormato de texto WebAssembly (.wat legível por humanos)
Sectionstype, import, function, code, data, export, …
Typesi32, i64, f32, f64 (mais tipos de referência)

Fluxo de Trabalho Básico

# 1) Inspect structure with WABT's disassembler
wasm2wat module.wasm -o module.wat

# 2) Decompile to pseudocode with diswasm
diswasm module.wasm > module.pseudo

# 3) Read the recovered functions and control flow
PassoFerramentaSaída
Disassemblewasm2wat (WABT).wat text (baixo nível)
Decompilediswasmpseudocódigo (nível mais alto)
Objdump-stylewasm-objdump (WABT)seções/opcodes

O Que diswasm Recupera

RecursoAjuda com
Function boundariesOnde cada função começa/termina
Control flowblock/loop/if reconstruído como código estruturado
Locals/paramsVariáveis digitadas por função
Memory opscarregamentos/armazenamentos contra memória linear
Imports/exportsFunções de host chamadas / funções expostas

Lendo a Saída (Triagem)

SinalProcure
Imported host functionsChamadas JS/host (env.*) revelam capacidades
String/data sectionConstantes incorporadas, URLs, chaves
Exported functionsOs pontos de entrada do módulo
Memory growth / bulk opsDesempacotamento ou buffers grandes
Indirect callsDespacho de tabela de funções (ofuscação)

Ferramentas wasm Complementares

FerramentaFunção
diswasmDecompile wasm → pseudocódigo
WABT (wasm2wat, wasm-objdump)Desassentar / inspecionar
wasm-toolsManipulação de baixo nível Rust/validação
Binaryen (wasm-dis)Análise/otimização de nível de compilador
Ghidra + wasm pluginAmbiente de RE completo

Fluxos de Trabalho Comuns

# Analyze an unknown browser wasm payload
wasm2wat suspicious.wasm -o suspicious.wat   # structure
diswasm suspicious.wasm > suspicious.c       # readable logic
grep -iE "fetch|eval|XMLHttp|import" suspicious.wat  # capabilities

# Compare two versions of a wasm module
diswasm v1.wasm > v1.pseudo; diswasm v2.wasm > v2.pseudo
diff v1.pseudo v2.pseudo

diswasm vs Outras Abordagens

Aspectodiswasmwasm2wat (WABT)JEB (comercial)
Nível de saídaPseudocódigoWAT de baixo nívelDecompilador pseudo-C
CustoGratuito/código abertoGratuito/código abertoComercial
Melhor paraDescompilação rápida legívelDesassemblagem fielRE profundo e refinado

Recursos