
Расширение Burp Suite для декодирования Web3 JSON-RPC трафика, включая вызовы функций смарт-контрактов, ответы и разрешение ABI с поддержкой прокси-контрактов и multicall.
Web3 Decoder — это расширение Burp Suite, которое помогает анализировать, что происходит с операциями, связанными со смарт-контрактами web3. В основном это JSON-RPC вызовы к узлам Ethereum и узлам других совместимых сетей (таких как Polygon, Arbitrum, BSC...).
Загрузите последний JAR-файл расширения — по этой ссылке всегда доступен самый свежий релиз:
⬇ web3-decoder.jar (последняя версия)
Более старые версии находятся на странице релизов.
Затем загрузите его в Burp Suite:
web3-decoder.jar.Web3 и вкладки редактора Web3 Request/Web3 Response появятся после загрузки.Требуется версия Burp с встроенным JRE 21 (текущие версии 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-ключ, чтобы разрешить более 1 запроса каждые 5 секунд.
Новый интерфейс позволяет управлять сетями, блокчейн-обозревателями и API-ключами.
Расширение кэширует загруженные из блокчейн-обозревателей (например, etherscan) ABI. Вы также можете добавить их напрямую с вкладки Web3, получив их автоматически из блокчейн-обозревателя или добавив вручную.
Web3 Request для JSON-RPC запросов (скрывается для трафика без eth_call / eth_sendRawTransaction).Web3 Response для соответствующих JSON-RPC ответов.Web3 с инструментами для сетей/ABI/calldata.eth_call в function + типизированные args.decoded, skipped, ) и причиной при пропуске/ошибке.Полный актуальный список встроенных сетей находится в 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 и многие другие, включая их тестнеты). Интерфейс также позволяет добавлять собственные сети во время выполнения — подойдёт любая сеть, чей блокчейн-обозреватель предоставляет API в стиле Etherscan. Сведения об управлении сетями (включая миграцию устаревших chain ID) см. в разделе Возможности.
JSON-RPC запрос eth_chainId к используемому узлу позволяет определить, с какой сетью мы работаем, и в зависимости от сети выбирается API блокчейн-обозревателя путём поиска в файле chains.json.
Чтобы декодировать вызовы функций, нам нужен ABI (Application Binary Interface) контракта, который содержит все функции, которые можно вызывать в контракте, а также их входные и выходные параметры. Расширение ищет ABI в следующем порядке:
api.4byte.sourcify.dev с построением синтетического ABI из любого подходящего кандидата.Если chain ID не может быть определён (например, конечная точка не отвечает на eth_chainId), шаги, привязанные к сети (1–3), пропускаются, и декодер всё равно пытается выполнить не зависящие от сети шаги (4 и 5).
Для декодирования трафика расширение обращается к нескольким внешним источникам. Они необязательны, и вы можете отключить их на вкладке Web3. Все исходящие запросы отправляются через собственный HTTP-стек Burp (api.http().sendRequest), поэтому они учитывают настройки вышестоящего прокси/TLS в Burp и отображаются в трафике Burp.
Примечание о конфиденциальности: при поиске ABI адрес контракта отправляется настроенному блокчейн-обозревателю, а запасной вариант 4byte отправляет селектор функции в
api.4byte.sourcify.dev. Загруженные ABI кэшируются локально, поэтому при повторном декодировании запросы не повторяются. Большинству обозревателей (например, etherscan.io) требуется API-ключ для более чем ~1 запроса / 5 секунд — управляйте ключами на вкладкеWeb3.Пассивный детектор ABI читает тела HTTP-ответов, которые Burp уже перехватил, и работает полностью локально — само обнаружение не создаёт трафика.
errorresult для ранее декодированных запросов eth_call.id (или по индексу как запасной вариант).cache, builtin, etherscan, detected или 4byte) в декодированном выводе.PassiveScanCheck в Burp сканирует тела HTTP-ответов (как правило, минифицированные JS-бандлы dapp) на наличие Solidity ABI и сохраняет всё найденное в пуле в рамках проекта, индексируемом по селектору функции.!0 / !1, генерируемые Terser/esbuild/Svelte.decodeSource: "detected".eth_chainId не может быть определён: пул обнаруженных ABI и 4byte не зависят от сети, поэтому декодер всё равно пытается их использовать, а не отказывается сразу.api.4byte.sourcify.dev.ERC1967 и устаревший слот ZeppelinOS/OpenZeppelin.aggregate, tryAggregate, aggregate3, aggregate3Value, blockAndAggregate, tryBlockAndAggregate.chains.json и сохраняет настройки в параметрах Burp.Web3, перечисляющая все ABI, накопленные пассивным сканером.eth_sendRawTransaction (и их внутренних функций)| Сервис | Конечная точка | Назначение |
|---|
| JSON-RPC узел (конечная точка уже в вашем трафике) | проксируемый RPC URL | eth_chainId для определения активной сети и eth_getStorageAt для чтения слотов реализации прокси (ERC-1967 / устаревший ZeppelinOS). |
| Etherscan (v2 multichain) | https://api.etherscan.io/v2/api?chainid=… | Получение ABI верифицированных контрактов. Если v2 не поддерживает сеть, используется устаревший хост обозревателя сети (/api). |
| База сигнатур 4byte | https://api.4byte.sourcify.dev | Поиск сигнатур-кандидатов для неизвестного 4-байтового селектора функции, когда ABI недоступен (затем из совпадения строится синтетический ABI). |