diswasm - WebAssembly 디컴파일러 및 역공학 도구 치트시트
diswasm은 WebAssembly (.wasm) 바이너리에 대한 오픈소스 디컴파일러 및 역공학 도구입니다. 더 많은 애플리케이션 로직이 wasm로 배포되고 있습니다 — 브라우저, 엣지 기능, 플러그인, 심지어 악성코드까지 — 분석가들이 이를 읽어야 합니다. diswasm은 wasm 모듈을 파싱하고, 함수를 분석하고, 구조를 복구하고, 스택 머신 바이트코드에서 더 높은 수준의 의사코드를 생성하므로 원본 wasm보다 훨씬 이해하기 쉽습니다. WebAssembly Binary Toolkit (WABT)를 보완하여 완전한 wasm 역공학 워크플로우를 제공합니다.
설치
| 방법 | 방식 |
|---|
| 소스에서 | git clone https://github.com/wasmkit/diswasm && cd diswasm |
| 빌드 | 저장소의 빌드 단계를 따릅니다 (언어별) |
| 보조 도구 | WABT (wasm2wat) 및 wasm-tools와 쌍을 이루어 사용 |
| 확인 | 알려진 .wasm에 대해 실행하고 출력 검토 |
wasm 먼저 이해하기
| 개념 | 의미 |
|---|
| 모듈 | .wasm 단위: 함수, 메모리, 테이블, 전역 변수 |
| 스택 머신 | wasm은 피연산자 스택에서 실행 (레지스터 없음) |
| WAT | WebAssembly 텍스트 형식 (인간이 읽을 수 있는 .wat) |
| 섹션 | type, import, function, code, data, export, … |
| 타입 | i32, i64, f32, f64 (참조 타입 포함) |
기본 워크플로우
# 1) WABT의 분석기로 구조 검사
wasm2wat module.wasm -o module.wat
# 2) diswasm으로 의사코드에 디컴파일
diswasm module.wasm > module.pseudo
# 3) 복구된 함수 및 제어 흐름 읽기
| 단계 | 도구 | 출력 |
|---|
| 분석 | wasm2wat (WABT) | .wat 텍스트 (저수준) |
| 디컴파일 | diswasm | 의사코드 (고수준) |
| Objdump 스타일 | wasm-objdump (WABT) | 섹션/옵코드 |
diswasm이 복구하는 것
| 기능 | 도움이 되는 것 |
|---|
| 함수 경계 | 각 함수가 시작/종료되는 위치 |
| 제어 흐름 | block/loop/if가 구조화된 코드로 재구성 |
| 로컬/매개변수 | 함수당 타입이 지정된 변수 |
| 메모리 연산 | 선형 메모리에 대한 로드/저장 |
| 가져오기/내보내기 | 호출되는 호스트 함수 / 노출되는 함수 |
출력 읽기 (분류)
| 신호 | 찾기 |
|---|
| 가져온 호스트 함수 | JS/호스트 호출 (env.*)이 기능 드러냄 |
| 문자열/데이터 섹션 | 임베드된 상수, URL, 키 |
| 내보낸 함수 | 모듈의 진입점 |
| 메모리 증가 / 대량 연산 | 압축 해제 또는 큰 버퍼 |
| 간접 호출 | 함수 테이블 디스패치 (난독화) |
보조적인 wasm 도구
| 도구 | 역할 |
|---|
| diswasm | wasm을 의사코드로 디컴파일 |
WABT (wasm2wat, wasm-objdump) | 분석 / 검사 |
| wasm-tools | Rust 저수준 조작/검증 |
Binaryen (wasm-dis) | 컴파일러 급 분석/최적화 |
| Ghidra + wasm 플러그인 | 완전한 역공학 환경 |
일반적인 워크플로우
# 미지의 브라우저 wasm 페이로드 분석
wasm2wat suspicious.wasm -o suspicious.wat # 구조
diswasm suspicious.wasm > suspicious.c # 읽을 수 있는 로직
grep -iE "fetch|eval|XMLHttp|import" suspicious.wat # 기능
# wasm 모듈의 두 버전 비교
diswasm v1.wasm > v1.pseudo; diswasm v2.wasm > v2.pseudo
diff v1.pseudo v2.pseudo
diswasm vs 다른 접근법
| 측면 | diswasm | wasm2wat (WABT) | JEB (상용) |
|---|
| 출력 수준 | 의사코드 | 저수준 WAT | 의사코드 디컴파일러 |
| 비용 | 무료/오픈소스 | 무료/오픈소스 | 상용 |
| 최적 용도 | 빠른 읽을 수 있는 디컴파일 | 충실한 분석 | 깊고 세련된 역공학 |
자료