Skip to content
KitploitKITPLOIT
أدواتالمدونة
إرسال
أدواتالمدونة
إرسال

أدوات الاختراق واختبار الاختراق والأمن السيبراني لترسانتك الأمنية!

Kitploit هو دليل لأدوات الاختراق والأمن السيبراني واختبار الاختراق. اكتشف آخر تحديثات المشاريع للعثور على الثغرات وتحليل الأنظمة وأتمتة الاختبارات وتعزيز أمنك.

··الخلاصات·اتصال·الخصوصية·© 2026 Kitploit

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
pythia — أداة لاستخراج معلومات RTTI من الملفات التنفيذية لدلفي، مكتوبة بلغة Python خالصة | Kitploit
أدوات/GitHubGitHub/nccgroup/pythia
الهندسة العكسيةتحليل البرمجيات الخبيثةتحليل الملفات الثنائية
GitHubnccgroup/pythia

pythia

أداة لاستخراج معلومات RTTI من الملفات التنفيذية لدلفي، مكتوبة بلغة Python خالصة

عرض المستودع
247منذ 6 سنواتتمت المراجعة من قبل Kitploit

الأكثر شعبية

عرض الكل →

اكتشف الأدوات الأكثر استخدامًا من قبل مجتمعنا.

استكشف جميع الأدوات

تصفح مجموعتنا من الأدوات

عرض جميع الأدوات →
مشاركة

مقدمة / خلاصة

تقوم هذه الأداة بفحص ملف تنفيذي بحثاً عن بيانات Delphi، بما في ذلك RTTI وجداول الدوال الافتراضية. وهي تُخرج ملف JSON يحتوي على معلومات حول الفئات والدوال المحددة، والتي يمكن استخدامها لتحليل إضافي، على سبيل المثال:

  • إنشاء شجرة فئات.
  • توليد أسماء وتعليقات لـ IDA.
  • إدخالها في مزيد من المعالجة، مثل فك الترجمة التلقائي.

يتم توفير سكربت IDAPython يمكنه تحميل المخرجات إلى IDA.

كُتب هذا السكربت ليكمّل أدوات أخرى للهندسة العكسية لـ Delphi.

المؤلف والترخيص

صدر كمصدر مفتوح بواسطة NCC Group Plc - http://www.nccgroup.com/

طُوّر بواسطة David Cannings (@edeca) [email protected]

http://www.github.com/nccgroup/pythia

يُطرح هذا المشروع بموجب رخصة AGPL. يرجى الاطلاع على LICENSE لمزيد من المعلومات.

كيف يعمل

التدفق العام هو:

  • تحميل ملف PE والعثور على مقاطع الكود
  • فحص كل مقطع كود 4 بايتات في كل مرة
  • تحديد vftables المحتملة والتحقق منها
  • استخراج اسم الفئة وعلاقات الآباء
  • تحديد وراثة الدوال

تحديد vftables المحتملة

جداول vftables الخاصة بـ Delphi موثقة جيداً. المعلومات الخاصة بأحدث إصدار متاحة من Embarcadero. تتوفر وثائق غير رسمية لـ Delphi 2005 (انظر هنا).

شفرة مصدر Free Pascal مفيدة أيضاً (مرآة Github).

العنصر الأول في vftable هو vmtSelfPtr، الذي يشير إلى بداية جدول الدوال الافتراضية. يفحص السكربت كل مقطع كود في ملف PE بحثاً عن أي موقع يشير إلى الأمام بمقدار +0x4C بايت. لاحظ أن مترجم Delphi يحاذي vftables إلى حدود 4 بايت (من أجل التحسين).

على سبيل المثال، يحتوي العنوان الافتراضي VA التالي 0x0046E1C8 على الإزاحة 0x0046E214، والتي تسبق الموقع الحالي بمقدار 0x4C. كما هو موضح في IDA:

root@kitploit:~
.text:0046E1C8                   ; Classes::TComponent *vftable_TDCP_misty1
.text:0046E1C8 14 E2 46 00       vftable_TDCP_misty1 dd offset off_46E214

يمكن أن ينتج عن هذا الأسلوب نتائج إيجابية خاطئة، لذلك يتم فحص الحقول الأخرى في vftable للتأكد من كونها قيماً معقولة. على سبيل المثال، يتم فحص vmtInstanceSize للتأكد من أنه ليس مفرطاً، ويتم التحقق من أن مؤشرات الدوال تقع في مقطع قابل للتنفيذ. أثناء الاختبار، كان معدل النتائج الإيجابية الخاطئة منخفضاً جداً، على الرغم من أسلوب البحث بالقوة الغاشمة.

الوراثة

يتم فحص كل دالة موجودة في vftable لمعرفة ما إذا كانت موروثة من الفئة الأم أو مُحمّلة بشكل زائد (overloaded). لا يدعم Delphi الوراثة المتعددة، لذلك يمكن تحقيق ذلك عن طريق فحص المؤشر في vftable الخاص بالأم مع نفس الإزاحة.

إذا كان كلا المؤشرين يشير إلى نفس الدالة، فهي موروثة. وإذا كان للفئة الفرعية مؤشر مختلف، فهي دالة مُحمّلة بشكل زائد.

مثال على المخرجات

المخرج الأساسي للأداة هو ملف JSON يمكن إدخاله في معالجات / أدوات لاحقة. ومع ذلك، يتم تضمين عدد قليل من تنسيقات المخرجات الأخرى.

مخرجات الشجرة

استخدم الخيار --save-tree لإنشاء ملف مثل:

root@kitploit:~
TObject (at 0x0040112c)
|-- Exception (at 0x004081f8)
|   |-- EAbort (at 0x00408260)
|   |-- EAbstractError (at 0x00408ad4)
|   |-- EAssertionFailed (at 0x00408a74)
|   |-- EBcdException (at 0x004bd110)
|   |   +-- EBcdOverflowException (at 0x004bd16c)
|   |-- EBitsError (at 0x0041ab04)
|   |-- EComponentError (at 0x0041abbc)
|   |-- EConvertError (at 0x00408850)
|   |-- EDCP_cipher (at 0x0046a0ac)
|   |   +-- EDCP_blockcipher (at 0x0046a29c)
|   |-- EDCP_hash (at 0x00469f20)
.. إلخ ..

أهداف مستقبلية

  • تحديد إصدار Delphi (مثلاً من مورد PACKAGEINFO أو DVCLAL) وضبط الفحص لتخطيطات vftable المختلفة.
  • تحليل المزيد من معلومات الفئات، مثل الخصائص (عنصر خاص بـ Delphi) وجداول الأساليب.
  • تحليل معلومات RTTI الخاصة بـ Delphi (vmtTypeInfo في vftable).
  • تفكيك الكود باستخدام Capstone وتحديد الاستدعاءات الافتراضية (مثل مطابقة call [ecx+3Fh] مع أسلوب مثيل).

تحذيرات

  • تم اختباره فقط على كود 32-بت حتى الآن. يرجى إرسال عينات 64-بت.
  • يدعم ملفات Windows PE فقط (يمكن لـ Delphi الترجمة إلى صيغ أخرى).
  • غير مصمم ليكون مفكك ترجمة (decompiler) كاملاً لـ Delphi. استخدم DeDe / IDR / Hex-Rays.
  • مفيد فقط مع برامج Delphi الثنائية التي تستخدم الكائنات (وليس كلها).
  • يستخدم Delphi الحديث أسماء مثل TComparer<System.Bindings.EvalProtocol.TPair<System.IInterface,System.Pointer>> والتي يصعب فك شفرتها في IDA.

يرجى إرسال أمثلة على البرامج الثنائية التي لا تعمل معها هذه الأداة، حتى يمكن تحسينها.

تنزيل الأداة