WebAssembly 分析
WebAssembly Inspector
列出 .wasm 模块的导入、导出、内存和各段大小,并打印它的文本格式。
打开一个 `.wasm` 文件,显示里面有什么:各段及其大小、每个导入和导出、内存和表的声明,以及构建保留了的话 name 段里的函数名。模块只被解析,从不实例化或运行。
把 .wasm 模块拖进来
在这个标签页里解析:只查看模块,绝不实例化,也不运行。
WebAssembly.validate 核对一遍。函数体只量大小,不反汇编:这里显示的是模块声明了什么、碰了什么,不是完整的文本格式转换。怎么用
把模块拖进来
任何 `.wasm` 文件。它在这个标签页里读取,并和浏览器自己的 `WebAssembly.validate` 交叉核对,所以关于它是否格式良好你能得到第二意见。
先看各段
大小表是看字节花在哪里最快的办法——大的 data 段意味着内嵌的资源,大的自定义段通常是调试名称或 DWARF。
读导入
导入是模块和宿主之间的全部契约——它能调用的每个函数、共享的每块内存。如果你在审计一个不是你构建的模块,要紧的就是这个列表。
常见问题
我能看到实际的代码吗?
不能。函数体只量大小,不反汇编——这里报告的是模块声明和触及了什么,而不是把它转成文本格式。完整反汇编要用 WABT 工具包里的 `wasm2wat`。
为什么函数名没了?
因为构建去掉了 name 自定义段,发布构建通常就是这么做的。导出无论如何保留名字——它们是模块接口的一部分——所以导出的函数仍然可以识别。
有导入的模块危险吗?
本身不危险——WebAssembly 只能触及宿主交给它的东西,没有导入的模块根本碰不到外部世界。导入列出的正是它能做的事,所以实例化某个东西之前值得先读一读。
引擎校验说无效,但它解析成功了。
两者检查的是不同的东西。解析读的是结构;`WebAssembly.validate` 还会对每个函数体做类型检查。一个模块可以有完全可读的段布局却仍被拒绝——一个被截断的文件,或者一个改写了不该改的字节的后处理步骤。
可以从这些接进来
十六进制查看器
Hex Viewer
把任意文件展成偏移/十六进制/ASCII 三栏,用魔数判断格式,并高亮搜索命中的位置。
Base64 编码解码
Base64 Encoder & Decoder
对文本和文件做 Base64 与 Base64URL 编解码,UTF-8 处理正确。
密钥对生成
Key Pair Generator
生成 RSA、ECDSA 或 Ed25519 密钥对,导出为 PEM、JWK 或 OpenSSH。
SSH 密钥生成
SSH Key Generator
生成带注释的 OpenSSH 密钥对,并显示指纹。私钥不带口令导出,需要的话用 ssh-keygen -p 自己加。
接下来
这些工具吃得下当前工具的产出,结果可以直接送过去。
Docker 镜像分层分析
Docker Image Explorer
打开导出的镜像 tar 包,逐层显示构建命令、大小,以及这一层增删了哪些文件。
十六进制查看器
Hex Viewer
把任意文件展成偏移/十六进制/ASCII 三栏,用魔数判断格式,并高亮搜索命中的位置。
JavaScript 美化与压缩
JavaScript Beautifier & Minifier
只删注释和空白来压缩 JavaScript 或 TypeScript,不改任何名字;也能把挤成一行的打包产物重新缩进,让它重新可读。
Base64 编码解码
Base64 Encoder & Decoder
对文本和文件做 Base64 与 Base64URL 编解码,UTF-8 处理正确。
curl 转代码
curl to Code
把一条 curl 命令转成 fetch、axios、Python requests、Go、PHP 或 PowerShell 代码。
文本哈希计算
Text Hash
算出字符串的 MD5、SHA-1、SHA-256、SHA-384、SHA-512 和 CRC-32,输出可选大写或 Base64。