
Web3 JSON-RPCトラフィックをデコードするBurp Suite拡張機能。スマートコントラクトの関数呼び出し、レスポンス、ABI解決をサポートし、プロキシ対応およびマルチコール対応を備えています。
Web3 Decoder は、web3 のスマートコントラクトに関わる操作で何が起こっているかを分析するための Burp Suite 拡張機能です。 これは主に Ethereum ノードへの JSON-RPC 呼び出しと、 Polygon、Arbitrum、BSC などの互換ネットワークのノードへの呼び出しです。
最新の拡張機能 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 に記載されています。
これは、JSON-RPC リクエストとレスポンスのデコードに成功した後の、改良された Web3 エディタタブの外観です:

再設計された Web3 タブの下には、すべての設定、検出された ABI などが表示されます! (Claude Design に感謝!)

詳細なドキュメントは docs/ フォルダにあります:
サポートされているほとんどのブロックエクスプローラ(etherscan.io など)は、5 秒間に 1 回を超えるリクエストを許可するために API キーを必要とします。
新しいインターフェースでは、チェーン、ブロックエクスプローラ、API キーを管理できます。
この拡張機能は、etherscan などのブロックエクスプローラからダウンロードした ABI をキャッシュします。また、Web3 タブから直接、ブロックエクスプローラから自動取得して追加したり、手動で追加したりすることもできます。
Web3 Request エディタタブ(eth_call / eth_sendRawTransaction を含まないトラフィックでは非表示)。Web3 Response エディタタブ。Web3 スイートタブ。eth_call の calldata を function + 型付き args にデコードします。decoded、skipped、error)と、スキップ/失敗時の理由とともに報告されます。eth_call リクエストの をデコードします。バンドルされているチェーンの完全な最新リストは
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 の移行を含む)は
Features を参照してください。
使用中のノードに 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 のトラフィックに表示されます。
プライバシーに関する注意: ABI ルックアップは、設定されたブロック エクスプローラにコントラクトアドレスを送信し、4byte フォールバックは関数セレクタを
api.4byte.sourcify.devに送信します。ダウンロードした ABI はローカルにキャッシュされるため、繰り返しのデコードでも 再クエリは発生しません。ほとんどのエクスプローラ(例: etherscan.io)では、約 1 リクエスト / 5 秒を超える場合に API キーが必要です —Web3タブからキーを管理してください。パッシブ ABI 検出器は、Burp がすでにキャプチャした HTTP レスポンスボディを読み取り、 完全にローカルで実行されます — 検出自体によってトラフィックが生成されることはありません。
resultid(またはインデックスによるフォールバック)でエントリを照合します。cache、builtin、etherscan、detected、4byte)。PassiveScanCheck が HTTP レスポンスボディ(通常は minify された 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 呼び出し(およびその内部関数)のデコード| サービス | エンドポイント | 用途 |
|---|
| JSON-RPC ノード(トラフィック内に既にあるエンドポイント) | プロキシされた RPC URL | アクティブなチェーンを検出するための eth_chainId、およびプロキシ実装スロット(ERC-1967 / レガシー ZeppelinOS)を読み取るための eth_getStorageAt。 |
| Etherscan(v2 マルチチェーン) | https://api.etherscan.io/v2/api?chainid=… | 検証済みコントラクト ABI の取得。v2 がそのチェーンをサポートしていない場合は、チェーンのレガシーエクスプローラホスト(/api)にフォールバックします。 |
| 4byte シグネチャデータベース | https://api.4byte.sourcify.dev | ABI がない場合に、未知の 4 バイト関数セレクタを候補シグネチャに解決します(一致したものから合成 ABI が構築されます)。 |