
Web3 JSON-RPC 트래픽을 디코딩하기 위한 Burp Suite 확장 프로그램으로, 스마트 계약 함수 호출, 응답, ABI 해석을 포함하며 프록시 계약 인식 및 멀티콜(multicall) 지원을 제공합니다.
Web3 Decoder는 web3 스마트 계약과 관련된 작업에서 어떤 일이 일어나고 있는지 분석하는 데 도움을 주는 Burp Suite 확장 프로그램입니다. 주로 이더리움 노드 및 기타 호환 네트워크(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에 문서화되어 있습니다.
JSON-RPC 요청 및 응답을 성공적으로 디코딩한 후 개선된 Web3 편집기 탭의 모습은 다음과 같습니다:

아래는 모든 설정, 감지된 ABI 등이 포함된 재설계된 Web3 탭입니다! (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(Application Binary Interface)가 필요합니다. 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 응답 본문(일반적으로 축소된 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를 빌드). |