
امتداد مفتوح المصدر من فريق FLARE لإضافة دعم البرمجة النصية بلغة Python 3 إلى Ghidra.
Ghidrathon هي إضافة لـ Ghidra تضيف إمكانيات البرمجة النصية بلغة Python 3 إلى Ghidra. لماذا؟ يدعم Ghidra البرمجة النصية بشكل أصلي بلغتي Java وJython. لسوء الحظ، فإن العديد من أدوات التحليل مفتوحة المصدر، مثل capa وUnicorn Engine وangr وغيرها، مكتوبة بلغة Python 3، مما يجعل استخدام هذه الأدوات في Ghidra صعبًا، وفي بعض الحالات مستحيلًا. والأكثر من ذلك، أصدر مجتمع الأمن العديد من الإضافات الرائعة لأطر عمل SRE أخرى مثل IDA Pro وBinary Ninja، ولكن مرة أخرى، نظرًا لأن العديد من هذه الإضافات تستخدم Python 3، فمن الصعب نقلها إلى Ghidra. تساعدك Ghidrathon على استخدام الأدوات الحالية وتطوير أدوات جديدة بلغة Python 3 في Ghidra، وكتابة البرامج النصية لـ Ghidra باستخدام Python حديثة بطريقة تتكامل بإحكام مع واجهة مستخدم Ghidra. تستبدل الإضافة القائمة على Python 2.7 والمنفذة عبر Jython. ويشمل ذلك نافذة المفسّر التفاعلية، والتكامل مع Ghidra Script Manager، وتنفيذ البرامج النصية في وضع headless في Ghidra.

يرجى الاطلاع على مثالنا للبرنامج النصي بلغة Python 3 الخاص بـ Ghidra هنا لإلقاء نظرة أقرب على كتابة البرامج النصية بلغة Python 3 لـ Ghidra.
اطّلع على:
استخدم الخطوات التالية لتثبيت Ghidrathon في بيئة Ghidra الخاصة بك:
$ python -m pip install -r requirements.txt
$ python ghidrathon_configure.py <absolute_path_to_ghidra_install_dir>
ملاحظة: يحاول ghidrathon_configure.py افتراضيًا كتابة ملف باسم ghidrathon.save في <absolute_path_to_ghidra_install_dir>. يمكنك تحديد المسار الذي يُكتب فيه هذا الملف عن طريق تعيين متغير البيئة GHIDRATHON_SAVE_PATH قبل تشغيل ghidrathon_configure.py وGhidra:
$ export GHIDRATHON_SAVE_PATH="/path/to/custom/dir" # Linux/MacOS
$ set GHIDRATHON_SAVE_PATH="C:\path\to\custom\dir" # Windows
ملاحظة: قد يُطلب منك تعيين متغير بيئة باسم JAVA_HOME. يجب أن يشير هذا إلى المسار المطلق لـ JDK الذي قمت بتكوينه لتثبيت Ghidra الخاص بك.
.zip) في Ghidra:
File > Install Extensions...+ الأخضر.zip)OkInstall Anyway إذا طُلب منك ذلك بواسطة نافذة Extension Version Mismatch.zip) إلى <absolute_path_to_ghidra_install_dir>\Ghidra\Extensionsيمكنك تبديل Ghidrathon لاستخدام مفسّر Python مختلف عن طريق تنفيذ الخطوة 2 باستخدام مفسّر Python الجديد.
يمكنك استخدام بيئة افتراضية لـ Python مع Ghidrathon عن طريق تنفيذ الخطوة 2 من البيئة الافتراضية. للتبديل إلى بيئة افتراضية مختلفة، ما عليك سوى تنفيذ الخطوة 2 من البيئة الافتراضية الجديدة.
توفر نافذة المفسّر وصولاً تفاعليًا إلى مفسّر Python 3 الخاص بك. انقر على "Window" واختر "Ghidrathon" لفتح نافذة المفسّر.

تتكامل Ghidrathon مباشرة مع Ghidra Script Manager مما يتيح لك إنشاء وتحرير وتنفيذ البرامج النصية بلغة Python 3 داخل Ghidra. انقر على "Create New Script" واختر "Python 3" لإنشاء برنامج نصي جديد بلغة Python 3. انقر على "Run Script" أو "Run Editors's Script" لتنفيذ البرنامج النصي بلغة Python 3 وتحقق من نافذة Ghidra Console لعرض مخرجات البرنامج النصي.

تساعدك Ghidrathon على تنفيذ البرامج النصية بلغة Python 3 في وضع headless في Ghidra. نفّذ البرنامج النصي analyzeHeadless الموجود في مجلد تثبيت Ghidra الخاص بك، وحدد البرنامج النصي بلغة Python 3، وتحقق من نافذة وحدة التحكم لعرض مخرجات البرنامج النصي.
$ analyzeHeadless C:\Users\wampus example -process example.o -postScript ghidrathon_example.py
[...]
INFO SCRIPT: C:\Users\wampus\.ghidra\.ghidra_10.0.3_PUBLIC\Extensions\Ghidrathon-master\ghidra_scripts\ghidrathon_example.py (HeadlessAnalyzer)
Function _init @ 0x101000: 3 blocks, 8 instructions
Function FUN_00101020 @ 0x101020: 1 blocks, 2 instructions
Function __cxa_finalize @ 0x101040: 1 blocks, 2 instructions
Function printf @ 0x101050: 1 blocks, 2 instructions
Function _start @ 0x101060: 1 blocks, 13 instructions
Function deregister_tm_clones @ 0x101090: 4 blocks, 9 instructions
Function register_tm_clones @ 0x1010c0: 4 blocks, 14 instructions
Function __do_global_dtors_aux @ 0x101100: 5 blocks, 14 instructions
[...]
INFO REPORT: Post-analysis succeeded for file: /example.o (HeadlessAnalyzer)
INFO REPORT: Save succeeded for processed file: /example.o (HeadlessAnalyzer)
لمزيد من المعلومات حول تشغيل Ghidra في وضع headless، راجع <absolute_path_to_ghidra_install_dir>/support/analyzeHeadlessREADME.html.
كان أحد أكبر دوافعنا لتطوير Ghidrathon هو تمكين استخدام وحدات Python 3 من جهات خارجية في Ghidra. يمكنك تثبيت وحدة والبدء في استخدامها داخل Ghidra تمامًا كما تفعل في إعداد Python نموذجي. وينطبق هذا أيضًا على الوحدات التي قمت بتثبيتها مسبقًا. على سبيل المثال، يمكننا تثبيت واستخدام Unicorn لمحاكاة كود ARM داخل Ghidra.

توفر Ghidrathon تجربة برمجة نصية تحاكي عن كثب إضافتي Java وJython الخاصتين بـ Ghidra، والتي تتضمن جعل متغيرات الحالة لمثيل GhidraScript، مثل currentProgram، وطرق FlatProgramAPI، مثل findBytes، متاحة في نطاق builtins الخاص بـ Python. وهذا يعني أن جميع وحدات Python التي يستوردها الكود الخاص بك لديها حق الوصول إلى هذه المتغيرات والطرق. تختلف Ghidrathon قليلاً عن إضافتي Java وJython الخاصتين بـ Ghidra من خلال كشف متغيرات حالة GhidraScript كاستدعاءات لدوال Python بدلاً من الوصول المباشر، على سبيل المثال، يجب أن يصل الكود الخاص بك بلغة Python 3 إلى currentProgram باستخدام استدعاء الدالة currentProgram(). يضمن هذا التغيير الصغير تزويد الكود الخاص بك بلغة Python 3 بمتغيرات حالة GhidraScript الصحيحة أثناء التنفيذ. يرجى الاطلاع على مثالنا للبرنامج النصي بلغة Python 3 الخاص بـ Ghidra هنا لإلقاء نظرة أقرب على كتابة البرامج النصية بلغة Python 3 لـ Ghidra.
تربط Ghidrathon تثبيت Python المحلي لديك بـ Ghidra باستخدام المشروع مفتوح المصدر Jep. في الأساس، يعمل مفسّر Python المحلي لديك داخل Ghidra مع إمكانية الوصول إلى جميع حزم Python الخاصة بك و واجهة برمجة التطبيقات القياسية للبرمجة النصية في Ghidra. تعمل Ghidrathon أيضًا مع البيئات الافتراضية لـ Python، مما يساعدك على إنشاء وعزل وإدارة الحزم التي قد ترغب في تثبيتها فقط لاستخدامها في Ghidra. نظرًا لأن Ghidrathon تستخدم تثبيت Python المحلي لديك، فلديك التحكم في إصدار Python والبيئة التي تعمل داخل Ghidra.
لمزيد من المعلومات حول كيفية عمل Jep لتضمين Python في Java، راجع وثائقهم هنا.
تستخدم Ghidrathon المكتبة مفتوحة المصدر Jep التي تستخدم Java Native Interface (JNI) لتضمين Python في JVM. ينصح مطورو Ghidra بعدم استخدام JNI في Ghidra للأسباب التي تمت مناقشتها هنا.
| الأداة | الإصدار | المصدر |
|---|
| Ghidrathon | >= 4.0.0 | https://github.com/mandiant/Ghidrathon/releases |
| Python | >= 3.8.0 | https://www.python.org/downloads |
| Jep | == 4.2.0 | https://pypi.org/project/jep |
| Ghidra | >= 10.3.2 | https://github.com/NationalSecurityAgency/ghidra/releases |
| Java | >= 17.0.0 | https://adoptium.net/temurin/releases |