Web3 Decoder 是一个 Burp Suite 扩展,可帮助分析涉及 web3 智能合约的操作具体发生了什么。这主要是对以太坊节点以及其他兼容网络(如 Polygon、Arbitrum、BSC…)节点的 JSON-RPC 调用。
下载最新的扩展 JAR — 此链接始终提供最新版本:
旧版本可在发布页面获取。
然后在 Burp Suite 中加载:
web3-decoder.jar。Web3 选项卡以及 Web3 Request/Web3 Response 编辑器选项卡。需要捆绑了 JRE 21 的 Burp 版本(当前的 Burp Suite 版本)。该 JAR 是自包含的 — 所有依赖项(web3j 等)均已包含在内。
./gradlew jar
扩展 JAR 始终写入固定路径 — web3-decoder/build/libs/web3-decoder.jar — 与版本无关,因此您可以一次性指定 Burp 指向它,并在重建时让其自动重新加载。发布流程记录在 docs/RELEASING.md 中。
这是我们改进后的 Web3 编辑器选项卡在成功解码您的 JSON-RPC 请求和响应后的样子:

下方是重新设计的 Web3 选项卡,包含所有设置、检测到的 ABI 等!(感谢 Claude Design!)

详细文档位于 docs/ 文件夹中:
大多数受支持的区块浏览器(如 etherscan.io)需要 API 密钥,才能每 5 秒发送超过 1 个请求。
新界面允许您管理链、区块浏览器和 API 密钥。
该扩展会缓存从 etherscan 等区块浏览器下载的 ABI。您也可以直接从 Web3 选项卡添加它们,可以从区块浏览器自动获取,也可以手动添加。
Web3 Request 编辑器选项卡(在没有 eth_call / eth_sendRawTransaction 的流量上隐藏)。Web3 Response 编辑器选项卡。Web3 套件选项卡,提供链/ABI/calldata 工具。eth_call calldata 解码为 function + 类型化的 args。decoded、skipped、error),并在跳过/失败时给出原因。eth_call 请求解码 result。id(或按索引回退)匹配条目。cache、builtin、etherscan、detected 或 4byte)。PassiveScanCheck 会扫描 HTTP 响应体(通常是压缩后的 dapp JS 包)以查找 Solidity ABI,并将找到的所有内容存储在以函数选择器为索引的项目级池中。!0 / !1 布尔简写。decodeSource: "detected"。eth_chainId 也能工作:检测到的池和 4byte 与链无关,因此解码器仍会尝试它们,而不是直接拒绝。api.4byte.sourcify.dev 执行函数选择器查找。ERC1967 槽位和旧版 ZeppelinOS/OpenZeppelin 槽位。aggregate、tryAggregate、aggregate3、aggregate3Value、blockAndAggregate、tryBlockAndAggregate。chains.json 加载默认链,并将自定义设置持久化到 Burp 偏好设置中。Web3 选项卡下的并排面板,列出被动扫描器累积的每个 ABI。eth_sendRawTransaction JSON-RPC 调用(及其内部函数)当前捆绑的完整链列表位于 web3-decoder/src/main/resources/chains.json — 该扩展现在内置了 Etherscan v2 多链集合(Ethereum、Sepolia、BNB Smart Chain、Polygon、Base、Arbitrum、Linea、Blast、Optimism、Avalanche、Gnosis、Scroll、Taiko、Berachain 等,包括它们的测试网)。该界面还允许您在运行时添加自己的链 — 任何其区块浏览器提供 Etherscan 风格 API 的链都可以使用。有关链管理详情(包括已弃用链 ID 的迁移),请参阅功能。
向当前使用的节点发送 eth_chainId JSON-RPC 请求,以检测我们在哪条链上工作,并根据链的不同,通过搜索 chains.json 文件来选择区块浏览器 API。
要解码函数调用,我们需要合约的 ABI(应用程序二进制接口),它包含合约中所有可调用的函数及其输入和输出。该扩展按以下顺序解析 ABI:
api.4byte.sourcify.dev 的选择器 → 签名查找,并根据任何匹配的候选签名构建合成 ABI。如果无法确定链 ID(例如端点不响应 eth_chainId),则会跳过链级步骤(1–3),解码器仍会尝试与链无关的步骤(4 和 5)。
为了解码流量,该扩展会与一些外部源通信。这些是可选的,您可以在 Web3 选项卡中停用它们。所有出站请求都通过 Burp 自身的 HTTP 栈(api.http().sendRequest)发送,因此它们遵循 Burp 的上游代理/TLS 设置,并出现在 Burp 的流量中。
| 服务 | 端点 | 用途 |
|---|---|---|
| JSON-RPC 节点(您的流量中已有的端点) | 被代理的 RPC URL | 用于 eth_chainId 检测活动链,以及 eth_getStorageAt 读取代理实现槽位(ERC-1967 / 旧版 ZeppelinOS)。 |
| Etherscan(v2 多链) | https://api.etherscan.io/v2/api?chainid=… | 获取已验证合约的 ABI。当 v2 不支持该链时,回退到该链的旧版区块浏览器主机(/api)。 |
| 4byte 签名数据库 | https://api.4byte.sourcify.dev | 在没有可用 ABI 时,将未知的 4 字节函数选择器解析为候选签名(随后根据匹配结果构建合成 ABI)。 |
隐私说明: ABI 查找会将合约地址发送到已配置的区块浏览器,4byte 回退会将函数选择器发送到
api.4byte.sourcify.dev。下载的 ABI 会缓存在本地,因此重复解码不会重新查询。大多数区块浏览器(例如 etherscan.io)需要 API 密钥,才能每 5 秒发送超过约 1 个请求 — 可从Web3选项卡管理密钥。被动 ABI 检测器读取 Burp 已捕获的 HTTP 响应体,并且完全在本地运行 — 检测本身不会产生任何流量。