
إضافة لـ Burp Suite لفك ترميز استدعاءات Ethereum JSON-RPC وتفاعلات العقود الذكية، مع دعم سلاسل متعددة واسترجاع تلقائي لـ ABI.
Web3 Decoder هو امتداد لـ Burp Suite مصمم لتحليل عمليات البلوكتشين وتفاعلات العقود الذكية. يعالج استدعاءات JSON-RPC الموجهة إلى إيثريوم والشبكات المتوافقة (بما في ذلك Polygon و Arbitrum و BSC وغيرها)
معظم مستكشفي البلوكتشين المدعومين، مثل etherscan.io، يتطلبون مفتاح API للسماح بأكثر من طلب واحد كل 5 ثوانٍ.
لإضافة مفاتيح API لديك خياران:
يقوم الامتداد بتخزين ملفات ABI التي تم تنزيلها من مستكشفي البلوكتشين مثل etherscan
داخل مجلد باسم .abi_caches بصيغة JSON. يمكنك ببساطة إضافة ملف جديد داخل هذا المجلد،
باتباع اصطلاح التسمية التالي:
{chain_id}_{contract_address.lower()}.abi
على سبيل المثال:
# شبكة إيثريوم الرئيسية (معرف السلسلة 1)، العقد 0xfbdca68601f835b27790d98bbb8ec7f05fdeaa9b
1_0xfbdca68601f835b27790d98bbb8ec7f05fdeaa9b.abi
# Polygon (معرف السلسلة 137)، العقد 0x447646e84498552e62ecf097cc305eabfff09308
137_0x447646e84498552e62ecf097cc305eabfff09308.abi
هذه الوثائق تنطبق على Windows و Linux؛ يمكن لمستخدمي macOS استخدام ملف DMG.
تحقق من وجود Git و Python على نظامك.
ابدأ جلسة طرفية (Terminal) بصلاحيات المسؤول.
يتطلب هذا الامتداد مكتبات 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، يمكنك إضافة امتداد python عن طريق تحديد ملف burp_web3_decoder.py في علامة التبويب Extender في Burp Suite
eth_calleth_sendRawTransaction (والدوال الداخلية لها)eth_calleth_calleth_call و eth_sendRawTransactionيمكن العثور على جميع السلاسل المدعومة في ملف chains.json. هذه هي السلاسل التي لديها مستكشف بلوكتشين بنفس واجهات برمجة التطبيقات مثل etherscan. إذا كنت تريد إضافة المزيد من مستكشفي البلوكتشين، أضفهم إلى ملف chains.json، واختبره، ثم أنشئ طلب سحب (pull request)!
لمزيد من الأمثلة، بما في ذلك استدعاءات proxy و multicall، راجع EXAMPLES.md
eth_call:
خام:

مفكك:

eth_sendRawTransaction (اختبار Uniswap v2):
{
"method": "eth_sendRawTransaction",
"params": [
"0x02f9015b820539808459682f00850df8475800830493e0947a250d5630b4cf539739df2c5dacb4c659f2488d880de0b6b3a7640000b8e47ff36ab500000000000000000000000000000000000000000000009e0950598867d8000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000002105eaa660ff62b14a5e093fc348e13ab63af2e600000000000000000000000000000000000000000000000000000000623b16570000000000000000000000000000000000000000000000000000000000000002000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc20000000000000000000000006b175474e89094c44da98b954eedeac495271d0fc001a005cfdf9ff11dea2d3e8781cb6ba140ae6e86a0922bfa75938b6f2456f513e24ca057f02b3f7125edb59e22651d503bc296153860e3843f9d495ad21d898c8e20c3"
],
"id": 4700418092893,
"jsonrpc": "2.0"
}
مفكك:
[
{
"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"
}
}
}
]
طلب JSON-RPC من نوع eth_chainId إلى العقدة المستخدمة لاكتشاف السلسلة التي نعمل عليها، واعتمادًا على السلسلة، يختار واجهة برمجة تطبيقات مستكشف بلوكتشين، عن طريق البحث في ملف chains.json.
كمثال على الاستخدام، لفك تشفير استدعاءات الدوال، نحتاج إلى ABI (واجهة التطبيق الثنائية) للعقد، والذي يحتوي على جميع الدوال التي يمكن استدعاؤها في العقد ومدخلاتها ومخرجاتها. حاليًا، يعمل مع العقود الموثقة في مستكشف البلوكتشين، أو عن طريق إضافة ABI يدويًا. في الإصدارات المستقبلية، سنستكشف إمكانية توليد ABI تلقائيًا عن طريق البحث عن محددات الدوال في قواعد البيانات العامة.
يوضح مخطط "التدفق" التالي بطريقة مبسطة العملية التي تتبعها مكتبة eth_decoder عند فك تشفير استدعاءات JSON-RPC من نوع eth_call:
