Ruby ، Kotlin ، Groovy ، Clojure ، و JShell دعم Ghidra.
تحقق من صفحة الإصدارات للحصول على أحدث إصدار من الإصدار للمكون الإضافي. بعد التنزيل ، يمكنك تثبيت هذا في Ghidra عن طريق الانتقال إلى File->Install Extensions... ، واختيار خيار Add Extension ، ثم التنقل إلى ملف zip الذي تم تنزيله. ستتم مطالبتك بإعادة تشغيل Ghidra حتى يكون التمديد الجديد نشطًا.
ستحتاج بعد ذلك إلى تنشيط البرنامج المساعد قبل استخدامه. قد تتم مطالبتك بالقيام بذلك في المرة القادمة التي تقوم فيها بفتح أداة Codebrowser ، وفي هذه الحالة يمكنك ببساطة تحديد موافق. خلاف ذلك ، يمكنك تفعيلها يدويًا عن طريق فتح أداة Codebrowser ، والذهاب إلى File->Configure... ، واختيار البرنامج المساعد RubyDragon لـ Ruby ، و Plogin KotlinDragon لـ Kotlin ، و JShellDragon Plugin لمترجم Java ، و ClojureDragon Plugin for Clojure. يجب أن تظهر في قائمة Ghidra Core ، ولكن يمكنك التحقق من خيار Configure All Plugins إذا لم تكن قادرًا على العثور عليها.
إذا كنت بحاجة إلى إزالة مكون إضافي للغة ، فيمكنك القيام بذلك عن طريق إلغاء تحديد المربع في مربع الحوار تكوين في أداة Codebrowser. إذا كنت ترغب في إزالة الامتداد ككل ، فستحتاج أيضًا إلى إلغاء تحديده في قائمة Install Extensions من متصفح المشروع ، وأخيراً إعادة تشغيل Ghidra. قد تحتاج أيضًا إلى حذف المجلد يدويًا من مجلد .ghidra/<ghidrainstall>/Extensions لإزالته تمامًا ، خاصة إذا كنت ترغب في تحميل المكون الإضافي عبر المكون الإضافي Eclipse للتطوير.
بمجرد تمكين Rubydragon Plugin ، ستتمكن من فتح جلسة Ruby التفاعلية من أداة Codebrowser عن طريق الانتقال إلى Window->Ruby ، أو عن طريق النقر على أيقونة Ruby في شريط الأدوات. هذه جلسة IRB التي توفرها Jruby.
تتوفر نفس المتغيرات البيئية المقدمة في البرامج النصية Java و Python أيضًا في هذه الجلسة إلى جانب بعض الإضافات ، مثل المتغيرات العالمية التالية:
$current_address
$current_api
$current_data
$current_function
$current_highlight
$current_instruction
$current_location
$current_program
$current_selection متغير $current_api هو مثيل لـ FlatProgramAPI الذي تم إنشاؤه باستخدام $current_program . يحتوي هذا على العديد من وظائف الراحة (ولكن ليس كلها) التي ستكون متوفرة في مثيل GhidraScript .
يمكن استيراد العديد من الفصول التي توفرها Ghidra تلقائيًا إلى المحطة التفاعلية ، لذا لا تحتاج إلى استخدام عبارات java_import لاستخدامها. إذا كنت ترغب في تخصيص هذا ، فيمكنك تعديل ملف بيانات auto-import.xml في التثبيت. لتمكين هذه الميزة (تؤثر على وقت بدء التشغيل) ، يمكنك تمكين الخيار ذي الصلة في فئة Ruby Dragon Interpreters . يتم ذلك لجميع اللغات الأخرى أيضًا ، باستخدام نفس ملف البيانات.
يمكنك أيضًا كتابة البرامج النصية في Ruby ، بنفس الطريقة التي تفعل بها مع Java أو Python. سيكون Ruby متاحًا كنوع نص جديد ، ويمكنك رؤية العديد من البرامج النصية للمثال في Examples.Ruby دليل Ruby لمدير البرنامج النصي الذي يظهر الاستخدام الأساسي لكل من أساسيات Jruby و Ghidra. تحتوي البرامج النصية أيضًا على $script الذي يوفر الوصول إلى مثيل RubyScript لهم.
يتم توفير نفس المتغيرات العالمية المتوفرة في الجلسات التفاعلية أيضًا للنصوص لاستخدامها بنفس الطريقة.
يمكنك أيضًا العثور على مساعدة مباشرة في قائمة مساعدة Ghidra (PRESS F1 ) على Ghidra Functionality->Scripting->Ruby Interpreter .
إذا كنت ترغب في تثبيت الأحجار الكريمة لتكون متوفرة في مترجم أو برامج نصية تفاعلية ، فستحتاج إلى اتخاذ بعض الخطوات الإضافية ، اعتمادًا على مدى عزلك إلى بيئة الأحجار الكريمة.
إذا كنت تستخدم شيئًا مثل RVM لإدارة بيئة Ruby الخاصة بك ، فيمكنك ببساطة الاعتماد على ذلك لتعيين متغير بيئة GEM_PATH للإشارة إلى تثبيت GEM الخاص بك. ومع ذلك ، للحصول على أقصى قدر من النجاح ، يجب عليك التبديل إلى تثبيت JRuby ، من الناحية المثالية لنفس الإصدار الذي تم تعبئته في Rubydragon ، والسماح لـ RVM يشير إلى جوهرة داخل ذلك.
إذا كنت تريد أن تكون جوهرة Ghidra خاصة بـ Ghidra ، أو إذا لم يكن لديك بيئة روبي خارج Ghidra للإشارة إليها ، يمكنك اختيار موقع بنفسك وتعيين متغير بيئة GEM_PATH للإشارة إلى ذلك. لتثبيت الأحجار الكريمة الجديدة على المسار ، استدعاء إصدار gem من جرة Jruby المجمعة مثل ذلك ، وتغيير الإصدار والمسارات حسب الحاجة. هنا سيتم ضبط مسار الأحجار الكريمة على ~/ghidra_gems
# from a shell environment
java -jar ~ /.ghidra/.ghidra_10.2_PUBLIC/Extensions/RubyDragon/lib/jruby-complete-9.3.9.0.jar -S gem install -i ~ /ghidra_gems wrapture REM from a windows command line
java -jar %USERPROFILE% .ghidra.ghidra_10.2_PUBLICExtensionsRubyDragonlibjruby-complete-9.3.9.0.jar -S gem install -i %USERPROFILE% ghidra_gems wrapture بمجرد الانتهاء من ذلك ، يمكنك أن تتطلب GEM wrapture (أو أي شيء اخترته لتثبيته) من البرامج النصية والمحطة التفاعلية.
إذا كنت لا ترغب في إنشاء متغير بيئة في التكوين العالمي الخاص بك ، فستحتاج إلى العبث مع البرنامج النصي المستخدم لإطلاق Ghidra من أجل تعيين GEM_PATH بشكل مناسب. يمكنك القيام بذلك عن طريق إضافة أمر set في launch.bat أو launch.sh (اعتمادًا على نظام التشغيل الخاص بك). بالنسبة لأنظمة Windows ، ستحتاج أيضًا إلى إزالة المعلمة /I من أمر start المستخدم لإطلاق Ghidra بحيث يتم تمرير متغير البيئة.
يتم استخدام Kotlin بنفس طريقة مجموعة أدوات Ruby مع بعض الاختلافات الواضحة ، مثل توفيره بواسطة البرنامج المساعد KotlinDragon والوصول إليه من خيار قائمة Window->Kotlin . المتغيرات المدمجة في البرامج النصية ونافذة المترجم المترجم في Kotlin هي نفس Java:
currentAddress
currentAPI
currentData
currentFunction
currentHighlight
currentInstruction
currentLocation
currentProgram
currentSelection
تستخدم البرامج النصية Kotlin امتداد kts حيث يتم تفسيرها على أنها نصوص بدلاً من تجميعها إلى Java أولاً.
يتبع Groovy نفس الأنماط مثل اللغات الأخرى ، التي يتم توفيرها في البرنامج المساعد GroovyDragon ويمكن الوصول إليه من خيار القائمة Window->Groovy . لديها نفس المتغيرات المدمجة التي يوفرها الآخرون:
currentAddress
currentAPI
currentData
currentFunction
currentHighlight
currentInstruction
currentLocation
currentProgram
currentSelection
يتبع Clojure نفس الأنماط مثل اللغات الأخرى ، التي يتم توفيرها في البرنامج المساعد ClojureDragon Window->Clojure .
يحتوي المترجم والبرامج النصية Clojure أيضًا على روابط تجعل معلومات الحالة متاحة لهم ، ضمن مساحة اسم ghidra . هم:
ghidra/current-address
ghidra/current-api
ghidra/current-data
ghidra/current-function
ghidra/current-highlight
ghidra/current-instruction
ghidra/current-location
ghidra/current-program
ghidra/current-selection يتم توفير ghidra/current-api كمثال لـ FlatProgramAPI الذي تم إنشاؤه مع currentProgram ، كما هو الحال مع المترجمين الفوريين الآخرين. يتم الاستيراد التلقائي لفصول Ghidra أيضًا في مساحة اسم ghidra .
وكما هو الحال مع Ruby ، يتوفر ربط ghidra/script ضمن البرامج النصية التي توفر الوصول إلى مثيل ClojureScript الأساسي. على عكس روبي ، لا يسمح هذا المتغير بالوصول إلى الحقول المحمية أو الأساليب الخاصة. يتم حقن هذه بدلاً من ذلك في مساحة اسم ghidra أيضًا. على سبيل المثال ، للوصول إلى TaskMonitor للحصول على برنامج نصي ، يمكنك ببساطة الرجوع إلى ghidra/monitor للقيام بأشياء مثل تحديث التقدم. يحتوي Script Clojure Ghidra Basics على مثال على هذا النوع من الوصول. قد يتعرف أولئك الذين يطلعون على واجهة البرمجة النصية Python إلى هذا النموذج ، لأنه هو نفسه.
يوفر المكون الإضافي JSHELL مترجم Java تفاعلي بواسطة JSHELL ، وهو REPL Java مدرج في Java. يوفر نفس المتغيرات المدمجة في البرامج النصية Java:
currentAddress
currentAPI
currentData
currentFunction
currentHighlight
currentInstruction
currentLocation
currentProgram
currentSelection
يكون هذا المترجم المترجم مفيدًا بشكل خاص عند كتابة نصوص Java ، حيث يسمح لك باختبار قصاصات الكود بشكل تكراري من البرنامج النصي دون الحاجة إلى القيام بأي نوع من التحويل إلى لغات أخرى مثل Python أو Kotlin.
في الوقت الحالي ، فإن أسهل طريقة للمساهمة هي نشر أي اقتراحات أو تجربتها وفتح مشكلة إذا كانت لديك أي مشاكل. توجه إلى قائمة المشكلات للانضمام إلى المناقشة!
إذا كنت تشعر المغامرة ، فيمكنك إضافة نص مثال بلغتك المفضلة. يمكن أن يكون هذا مكافئًا لأحد النصوص التي يتم تعبئتها مع Ghidra ، أو قد يكون كل شيء جديدًا! فقط تأكد من إضافة اختبار له في سير عمل GitHub Action بحيث لا يتم كسره لاحقًا. تحقق من مجلد ghidra_scripts لمعرفة ما هو موجود الآن ، وربما استخلص بعض الإلهام على ما يمكنك إضافته.
أو ، إذا كان كل هذا كثيرًا ، فما عليك سوى إعطائنا صيحة في #GhidrarubyDragon على Twitter مع أفكارك!