
Burp Suite एक्सटेंशन जो Ethereum JSON-RPC कॉल्स और स्मार्ट कॉन्ट्रैक्ट इंटरैक्शन को डिकोड करने के लिए है, जो कई चेन्स और स्वचालित ABI पुनर्प्राप्ति का समर्थन करता है।
Web3 डिकोडर एक Burp Suite एक्सटेंशन है जो ब्लॉकचेन संचालनों और स्मार्ट कॉन्ट्रैक्ट इंटरैक्शन का विश्लेषण करने के लिए डिज़ाइन किया गया है। यह Ethereum और संगत नेटवर्कों (Polygon, Arbitrum, BSC, और अन्य सहित) के लिए JSON-RPC कॉल्स को प्रोसेस करता है।
अधिकांश समर्थित ब्लॉक एक्सप्लोरर्स, जैसे etherscan.io, को हर 5 सेकंड में 1 से अधिक अनुरोध की अनुमति देने के लिए API कुंजी की आवश्यकता होती है।
अपनी API कुंजियाँ जोड़ने के लिए आपके पास 2 विकल्प हैं:
एक्सटेंशन डाउनलोड किए गए ABIs को etherscan जैसे ब्लॉक एक्सप्लोरर्स से .abi_caches नामक फ़ोल्डर के अंदर JSON प्रारूप में कैश करता है। आप उस फ़ोल्डर के अंदर निम्नलिखित नामकरण परंपरा के साथ एक नई फ़ाइल जोड़ सकते हैं:
{chain_id}_{contract_address.lower()}.abi
उदाहरण के लिए:
# Ethereum Mainnet (chain ID 1), contract 0xfbdca68601f835b27790d98bbb8ec7f05fdeaa9b
1_0xfbdca68601f835b27790d98bbb8ec7f05fdeaa9b.abi
# Polygon (chain id 137), contract 0x447646e84498552e62ecf097cc305eabfff09308
137_0x447646e84498552e62ecf097cc305eabfff09308.abi
यह दस्तावेज़ीकरण Windows और Linux पर लागू होता है; macOS उपयोगकर्ता DMG फ़ाइल का उपयोग कर सकते हैं।
अपने सिस्टम पर Git और Python की जाँच करें।
एक टर्मिनल सत्र व्यवस्थापक के रूप में प्रारंभ करें।
इस एक्सटेंशन को python3 लाइब्रेरीज़ जैसे web3.py की आवश्यकता होती है जो दुर्भाग्यवश python 2.7 के लिए उपलब्ध नहीं हैं जिन्हें Jython 2.7 के साथ सीधे उपयोग किया जा सके। एक 'हैक' के रूप में, मुख्य कार्यक्षमता एक python 3 लाइब्रेरी में लिखी गई है जिसे एक्सटेंशन एक python वर्चुअल वातावरण के माध्यम से निष्पादित करता है (गंदा कहना पड़ेगा...)
मैंने उपयोग की जाने वाली python3 लाइब्रेरी के प्रीकंपाइल्ड बाइनरीज़ Linux, Windows और Mac OSX के लिए बनाई हैं। यदि एक्सटेंशन लाइब्रेरी को निष्पादित करने में सक्षम नहीं है तो यह इन बाइनरीज़ का उपयोग करेगा। बेहतर प्रदर्शन या विकास के लिए, आप एक virtualenv बना सकते हैं, और निम्नानुसार इंस्टॉल कर सकते हैं:
cd "web3-decoder"
virtualenv -p python3 venv
source venv/bin/activate
pip install web3 py-evm
एक्सटेंशन बनाए गए virtualenv का उपयोग करके लाइब्रेरी को कॉल करेगा।
एक बार virtualenv बन जाने के बाद, आप Burp Suite के Extender टैब में burp_web3_decoder.py फ़ाइल का चयन करके python एक्सटेंशन जोड़ सकते हैं।
eth_call JSON-RPC कॉल्स का डिकोडeth_sendRawTransaction JSON-RPC कॉल्स (और उनके आंतरिक फ़ंक्शन) का डिकोडeth_call से प्रतिक्रिया परिणामों का डिकोडeth_call डिकोड किए गए फ़ंक्शनों के पुनः-एन्कोडिंग के लिए समर्थनeth_call और eth_sendRawTransaction दोनों में फ़ंक्शन इनपुट का डिकोडसभी समर्थित चेन्स chains.json फ़ाइल में पाई जा सकती हैं। ये वे चेन्स हैं जिनके पास etherscan के समान APIs वाला ब्लॉक एक्सप्लोरर है। यदि आप अधिक ब्लॉकचेन एक्सप्लोरर्स जोड़ना चाहते हैं, तो उन्हें chains.json फ़ाइल में जोड़ें, परीक्षण करें, और एक pull request बनाएं!
अधिक उदाहरणों के लिए, जिसमें proxy और multicall कॉल्स शामिल हैं, EXAMPLES.md देखें।
eth_call:
Raw:

Decoded:

eth_sendRawTransaction (Uniswap v2 परीक्षण):
{
"method": "eth_sendRawTransaction",
"params": [
"0x02f9015b820539808459682f00850df8475800830493e0947a250d5630b4cf539739df2c5dacb4c659f2488d880de0b6b3a7640000b8e47ff36ab500000000000000000000000000000000000000000000009e0950598867d8000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000002105eaa660ff62b14a5e093fc348e13ab63af2e600000000000000000000000000000000000000000000000000000000623b16570000000000000000000000000000000000000000000000000000000000000002000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc20000000000000000000000006b175474e89094c44da98b954eedeac495271d0fc001a005cfdf9ff11dea2d3e8781cb6ba140ae6e86a0922bfa75938b6f2456f513e24ca057f02b3f7125edb59e22651d503bc296153860e3843f9d495ad21d898c8e20c3"
],
"id": 4700418092893,
"jsonrpc": "2.0"
}
Decoded:
[
{
"chain_id": 1337,
"access_list": [],
"nonce": 0,
"r": 2628844986784880378434698689940765181553490914879903463877191830852582236748,
"s": 39775559607776431912363889945449043629789293388076288013264795388376358199491,
"max_priority_fee_per_gas": 1500000000,
"gas": 300000,
"max_fee_per_gas": 60000000000,
"from": "0x2105Eaa660ff62b14a5e093fc348e13ab63AF2E6",
"y_parity": 1,
"to": "0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D",
"value": 1000000000000000000,
"data": "0x7ff36ab500000000000000000000000000000000000000000000009e0950598867d8000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000002105eaa660ff62b14a5e093fc348e13ab63af2e600000000000000000000000000000000000000000000000000000000623b16570000000000000000000000000000000000000000000000000000000000000002000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc20000000000000000000000006b175474e89094c44da98b954eedeac495271d0f",
"decoded_function": {
"args": {
"amountOutMin": 2915256698432979992576,
"path": [
"0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2",
"0x6B175474E89094C44Da98b954EedeAC495271d0F"
],
"to": "0x2105Eaa660ff62b14a5e093fc348e13ab63AF2E6",
"deadline": 1648039511
},
"function": "swapExactETHForTokens(uint256,address[],address,uint256)",
"to": "0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D",
"abi": {
"outputs": [
{
"internalType": "uint256[]",
"type": "uint256[]",
"name": "amounts"
}
],
"inputs": [
{
"internalType": "uint256",
"type": "uint256",
"name": "amountOutMin"
},
{
"internalType": "address[]",
"type": "address[]",
"name": "path"
},
{
"internalType": "address",
"type": "address",
"name": "to"
},
{
"internalType": "uint256",
"type": "uint256",
"name": "deadline"
}
],
"stateMutability": "payable",
"type": "function",
"name": "swapExactETHForTokens"
}
}
}
]
उपयोग में आने वाले नोड के लिए eth_chainId JSON-RPC अनुरोध यह पता लगाने के लिए कि हम किस चेन पर काम कर रहे हैं, और चेन के आधार पर, chains.json फ़ाइल में खोज करके एक ब्लॉक एक्सप्लोरर API का चयन करता है।
उपयोग के उदाहरण के रूप में, फ़ंक्शन कॉल्स को डिकोड करने के लिए, हमें कॉन्ट्रैक्ट के ABI (Application Binary Interface) की आवश्यकता होती है, जिसमें कॉन्ट्रैक्ट में बुलाए जा सकने वाले सभी फ़ंक्शन और उनके इनपुट और आउटपुट शामिल होते हैं। अभी के लिए, यह ब्लॉक एक्सप्लोरर में सत्यापित कॉन्ट्रैक्ट्स के साथ काम करता है, या ABI को मैन्युअली जोड़कर। भविष्य के रिलीज़ में, हम सार्वजनिक डेटाबेस में फ़ंक्शन सेलेक्टर्स खोजकर स्वचालित रूप से ABI उत्पन्न करने की संभावना का पता लगाएंगे।
निम्नलिखित "flow" आरेख सरल तरीके से उस प्रक्रिया को दिखाता है जो eth_decoder लाइब्रेरी eth_call JSON-RPC कॉल्स को डिकोड करते समय अपनाती है:
