
إضافة IDA التي تستعلم من النماذج اللغوية لتسريع الهندسة العكسية
Gepetto هو إضافة Python تستخدم نماذج لغوية كبيرة متنوعة لإعطاء معنى للدوال المفككة بواسطة IDA Pro (الإصدار 7.6 أو أحدث). يمكنها الاستفادة منها لشرح ما تفعله الدالة، وإعادة تسمية متغيراتها تلقائيًا. فيما يلي مثال بسيط على النتائج التي يمكنها تقديمها في ثوانٍ معدودة:

أسهل طريقة لتثبيت Gepetto هي استخدام أداة Hex-Rays CLI (hcli):
pip install ida-hcli
hcli plugin install gepetto
سيقوم هذا بتثبيت الإضافة تلقائيًا في دليل مستخدم IDA الخاص بك.
بدلاً من ذلك، يمكنك تثبيت الإضافة يدويًا:
gepetto.py، بالإضافة إلى مجلد gepetto/) في مجلد إضافات IDA الخاص بك ($IDAUSR/plugins).%APPDATA%\Hex-Rays\IDA Pro\plugins\~/.idapro/plugins/~/.idapro/plugins/Computer\HKEY_CURRENT_USER\Software\Hex-Rays\IDA (الافتراضي على Windows: %LOCALAPPDATA%\Programs\Python\Python39).[/path/to/python] -m pip install -r requirements.txt
يحتفظ Gepetto بإعداداته في دليل مستخدم IDA الخاص بك، بحيث تبقى محفوظة عبر ترقيات الإضافة:
%APPDATA%\Hex-Rays\IDA Pro\cfg\gepetto\config.ini~/.idapro/cfg/gepetto/config.iniفي المرة الأولى التي تعمل فيها الإضافة، تنسخ gepetto/config.ini إلى هناك وتخبرك
بالمسار على وحدة التحكم. بعد ذلك، تكون النسخة المرفقة مع الإضافة
مجرد قالب فقط — عدّل النسخة الموجودة في دليل المستخدم الخاص بك. اضبط GEPETTO_CONFIG_DIR
لتجاوز الموقع بالكامل.
أضف مفاتيح API الخاصة بك إلى ذلك الملف، أو وفّرها عبر متغيرات البيئة المذكورة فيه. بالنسبة لـ OpenAI، يمكن إنشاء مفتاح على هذه الصفحة. يُرجى ملاحظة أن استعلامات API عادةً ليست مجانية (وإن لم تكن مكلفة جدًا) وستحتاج إلى إعداد طريقة دفع مع المزوّد المقابل.
يحمّل Gepetto المزوّدين من ثلاثة أماكن، وكل منها يتجاوز الآخر عند تعارض
اسم في القائمة: الوحدات المرفقة في gepetto/models/، ثم أي ملف .py في
$IDAUSR/cfg/gepetto/providers/، ثم أي توزيعة مثبّتة تعلن عن نقطة دخول
gepetto.providers. يتم الإعلان عن التجاوزات على وحدة التحكم، بحيث يمكنك
استبدال مزوّد مدمج دون تفرّع الإضافة.
يستخدم المزوّد المُسقَط نفس العقد تمامًا الذي يستخدمه المزوّد المدمج. بالنسبة لنقطة نهاية متوافقة مع OpenAI، يكون الملف بأكمله:
import openai
import gepetto.config
import gepetto.models.model_manager
from gepetto.models.openai import GPT
class MyProvider(GPT):
@staticmethod
def get_menu_name() -> str:
return "MyProvider"
@staticmethod
def supported_models():
return ["my-model-v1"]
@staticmethod
def is_configured_properly() -> bool:
return bool(gepetto.config.get_config("MyProvider", "API_KEY", "MYPROVIDER_API_KEY"))
def __init__(self, model):
try:
super().__init__(model)
except ValueError:
pass # No OpenAI key needed for this provider.
self.model = model
self.client = openai.OpenAI(
api_key=gepetto.config.get_config("MyProvider", "API_KEY", "MYPROVIDER_API_KEY"),
base_url="https://api.example.com/v1",
)
gepetto.models.model_manager.register_model(MyProvider)
أضف قسم [MyProvider] مطابقًا إلى ملف config.ini الخاص بك وأعد تشغيل IDA: يتم تسجيل المزوّدين عند وقت التحميل، لذا يحتاج مفتاح جديد أو ملف جديد إلى إعادة تشغيل قبل أن يظهر في القائمة.
لتقديم أحدها كحزمة بدلًا من ذلك، اكشف عن الفئة أو عن دالة قابلة للاستدعاء register(register_model):
[project.entry-points."gepetto.providers"]
myprovider = "myprovider:MyProvider"
تُنفّذ الملفات الموجودة في providers/ شيفرة Python عشوائية عند بدء تشغيل IDA. وهذا يمثل نفس مستوى الثقة الممنوح لأي إضافة IDA، لكن لا تثبّت إلا المزوّدات التي تثق بها.
بمجرد تثبيت الإضافة بشكل صحيح، يجب أن تكون قادرًا على استدعائها من قائمة السياق في نافذة الشيفرة الزائفة في IDA، كما هو موضح في لقطة الشاشة أدناه:

بدّل بين النماذج التي يدعمها Gepetto من قائمة Edit > Gepetto:

يوفر Gepetto أيضًا واجهة سطر أوامر (CLI) يمكنك استخدامها لطرح الأسئلة على LLM مباشرةً من IDA. تأكد من اختيار
Gepetto في شريط الإدخال:

تتوفر اختصارات لوحة المفاتيح التالية:
Ctrl + Alt + GCtrl + Alt + KCtrl + Alt + Rتُظهر الاختبارات الأولية أن طلب أسماء أفضل يعمل بشكل أفضل إذا طلبت شرحًا للدالة أولًا – أفترض أن ذلك لأن النموذج يستخدم تعليقه الخاص بعدها لتقديم اقتراحات أكثر دقة. هناك عنصر من العشوائية في ردود الذكاء الاصطناعي. إذا لم يناسبك الرد الأولي الذي تحصل عليه لسبب ما، فيمكنك دائمًا تشغيل الأمر مرة أخرى.
يمكنك تغيير لغة Gepetto عن طريق تعديل الإعدادات المحلية (locale) في التكوين. على سبيل المثال، لاستخدام الإضافة باللغة الفرنسية، ما عليك سوى إضافة:
[Gepetto]
LANGUAGE = "fr_FR"
يجب أن يتطابق اللغة المختارة مع أسماء المجلدات في gepetto/locales. إذا لم تكن اللغة المطلوبة متاحة،
يمكنك المساهمة في المشروع بإضافتها بنفسك! أنشئ مجلدًا جديدًا للغة المطلوبة
(مثال: gepetto/locales/de_DE/LC_MESSAGES/)، وافتح طلب سحب جديدًا مع ملف .po المحدّث، والذي يمكنك
إنشاؤه عن طريق نسخ وتحرير gepetto/locales/gepetto.pot (استبدل جميع الأسطر التي تبدأ بـ msgstr بالنسخة
المترجمة).