
وحدة Ghidra لفك التجميع وفك الترجمة وتحليل Bytecode العقود الذكية في إيثريوم. تكتشف التعليمات غير الآمنة، وتستخرج الطرق المخفية، وتنشئ رسوم تدفق التحكم (Control-Flow Graphs) لتدقيق الأمان.

في السنوات الأخيرة، أدت الهجمات على العقود الذكية المنشورة في سلسلة كتل إيثريوم إلى سرقة كميات كبيرة من الأموال بسبب أخطاء برمجية. نظرًا لأن العقود الذكية، بمجرد تجميعها ونشرها، يصعب تعديلها وتحديثها، فقد اقترح العديد من الممارسين أهمية مراجعة أمانها في سلسلة الكتل حيث لا يتوفر سوى رمز البايت الخاص بآلة إيثريوم الافتراضية (EVM). وفي هذا الصدد، يمكن أن تكون الهندسة العكسية من خلال التفكيك وإعادة التجميع فعّالة.
ghidra-EVM هي وحدة Ghidra للهندسة العكسية للعقود الذكية. يمكن استخدامها لتنزيل رمز بايت آلة إيثريوم الافتراضية (EVM) من سلسلة كتل إيثريوم، ثم تفكيك وإعادة تجميع العقد الذكي. علاوة على ذلك، يمكنها تحليل كود الإنشاء، والعثور على دوال العقد، وتحديد التعليمات غير الآمنة.
تتكون من وحدة معالج، ومُحمّل مخصص، وإضافات تقوم بتفكيك رمز بايت آلة إيثريوم الافتراضية (EVM) وإنشاء رسم بياني لتدفق التحكم (CFG) للعقد الذكي.
النسخة الأخيرة تستخدم واجهة برمجة تطبيقات Ghidra 9.1.2. تعتمد على مكتبة crytic evm_cfg_builder (https://github.com/crytic/evm_cfg_builder) لمساعدة Ghidra في عملية إنشاء CFG.
تتكون Ghidra-evm من:
| Script | الوصف |
|---|---|
| search_codecopy.py | عند تحليل كود الإنشاء في عقد ذكي، يمكننا رؤية دالة _dispatcher فقط التي تستخدم CODECOPI لكتابة كود وقت التشغيل في الذاكرة. يبحث هذا النص عن تعليمات CODECOPI المفيدة ويجد دوال العقد الذكي المخفية في جزء وقت التشغيل من العقد. |
| search_dangerous_instructions.py | يمكن أحيانًا إساءة استخدام تعليمات مثل CALL، CALLCODE، SELFDESTRUCT و DELEGATECALL لتحويل الأموال إلى عقد آخر. يقوم هذا النص بالعثور عليها وإنشاء تسمية لكل occurrence. |
| load_external_contract.py | يقوم بتنزيل رمز بايت العقد الذكي من سلسلة الكتل إلى ملف .evm_h يمكن تحميله إلى ghidra-evm. |
يمكن استخدام محتويات دليل ghidra-evm لإنشاء وحدة Ghidra في Eclipse تحتوي على معالج ومُحمّل بهدف توسيع أو تصحيح ghidra_evm.

Ghidra-evm مرخصة وموزعة بموجب AGPLv3.
| الدرس | الوصف |
|---|
| الاستخدام | تعليمات استخدام بسيطة مع test.evm |
| تحليل رمز بايت الإنشاء | استخدام search_codecopy.py لتحليل كود الإنشاء وإيجاد الدوال المخفية |
| البحث عن تعليمات خطيرة | استخدام search_dangerous_instructions.py لتحليل occurrence من SELFDESTRUCT |
| تنزيل رمز بايت عقد ذكي من سلسلة الكتل إلى Ghidra | استخدام load_external_contract.py لتنزيل رمز بايت EVM من سلسلة الكتل إلى ملف .evm_h |