Skip to content
KitploitKITPLOIT
أدواتعمليات الاستغلالالمدونة
Log in
إرسال
أدواتعمليات الاستغلالالمدونة
إرسال

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

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

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

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
Virtuailor — أداة IDAPython لإنشاء جداول افتراضية C++ تلقائية في IDA Pro | Kitploit
أدوات/GitHubGitHub/0xgalz/virtuailor
التحليل الثابتالتحليل الديناميكي (عزل)الهندسة العكسيةمصممي الأخطاءتحليل الملفات الثنائية
GitHub0xgalz/virtuailor

Virtuailor

أداة IDAPython لإنشاء جداول افتراضية C++ تلقائية في IDA Pro

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

الأكثر شعبية

عرض الكل →

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

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

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

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

Virtuailor - أداة IDAPython لإعادة بناء جداول الدوال الافتراضية (vtables) في C++

Virtuailor هي أداة IDAPython تعيد بناء جداول الدوال الافتراضية (vtables) لشفرة C++ المكتوبة لمعمارية إنتل، لكل من الشفرات 32 بت و64 بت و AArch64 (جديد!). تتكون الأداة من جزئين: ثابت وديناميكي.

الجزء الأول هو الجزء الثابت، ويحتوي على القدرات التالية:

  • اكتشاف الاستدعاءات غير المباشرة.
  • ربط تعيين القيمة للاستدعاءات غير المباشرة باستخدام نقاط التوقف الشرطية (كود الربط).

الجزء الثاني هو الجزء الديناميكي، ويحتوي على القدرات التالية:

  • إنشاء هياكل جداول الدوال الافتراضية.
  • إعادة تسمية الدوال وعناوين جداول الدوال الافتراضية.
  • إضافة إزاحة الهيكل إلى استدعاءات التجميع غير المباشرة.
  • إضافة مراجع متبادلة (xref) من الاستدعاءات غير المباشرة إلى دوالها الافتراضية (مراجع متعددة).
  • لـ AArch64 - محاولة إصلاح جداول الدوال الافتراضية غير المعرفة والدوال الافتراضية المرتبطة بها (دعم للبرامج الثابتة Firmware).

كيفية الاستخدام؟

تدعم Virtuailor الآن إصدارات IDA من 7.0 إلى أحدث إصدار (7.5)، إذا كنت تستخدم إصدارات IDA أقدم من 7.4، فستحتاج إلى التبديل إلى فرع beforeIDA-7.4، أما فرع master فيدعم أحدث إصدار متاح (7.5).

  1. افتراضيًا، ستبحث Virtuailor عن الاستدعاءات الافتراضية في جميع العناوين في الشفرة. إذا كنت ترغب في قصر الشفرة على نطاق عناوين محدد، فلا مشكلة، فقط قم بتعديل ملف Main لإضافة النطاق الذي تريد استهدافه في المتغيرين start_addr_range و end_addr_range:
if __name__ == '__main__':

    start_addr_range = idc.MinEA()  # يمكنك تغيير نطاق عناوين الاستدعاءات الافتراضية
    end_addr_range = idc.MaxEA()
    add_bp_to_virtual_calls(start_addr_range, end_addr_range)
  1. اختياري (لكنه موصى به بشدة)، قم بإنشاء لقطة (snapshot) لقاعدة بيانات IDA الخاصة بك. فقط اضغط على ctrl+shift+t وأنشئ لقطة.

  2. اضغط على File->Run script... ثم انتقل إلى مجلد Virtuailor واختر تشغيل Main.py. يمكنك رؤية الصورة المتحركة التالية للحصول على شرح أوضح وأكثر بصرية. How to use

الآن ستوفر لك الواجهة الرسومية خيارًا لاختيار نطاق للاستهداف، في حال كنت ترغب في استهداف الملف الثنائي بالكامل، فقط اضغط على OK مع القيم الافتراضية في عناوين البداية والنهاية.

بعد ذلك، سيتم وضع نقاط التوقف في شفرتك، وكل ما عليك فعله هو تنفيذ شفرتك باستخدام مصحح IDA، وقم بأي إجراءات تريدها وشاهد كيف يتم بناء جداول الدوال الافتراضية! بالنسبة لـ AArch64، يمكنك إعداد خادم gdb عن بعد وتصحيح الأخطاء باستخدام مصحح IDA.

في حال لم تعد ترغب/تحتاج إلى نقاط التوقف، انتقل إلى علامة التبويب "قائمة نقاط التوقف" في IDA واحذف نقاط التوقف كما تشاء.

من المهم أيضًا أن أذكر أن هذه هي النسخة الثانية من الأداة مع دعم كل من 32 و64 بت و AArch64، ومن المحتمل في بعض الحالات أن يتم تفويت عدد قليل من نقاط التوقف، وفي هذه الحالات، يرجى فتح مشكلة (issue) والتواصل معي حتى أتمكن من تحسين الشفرة والمساعدة في إصلاحها. شكرًا لكم مقدمًا :)

المخرجات والوظائف العامة

هياكل جداول الدوال الافتراضية

الهياكل التي تنشئها Virtuailor من جدول الدوال الافتراضية المستخدم في الاستدعاء الافتراضي الذي تم تنشيطه. يتم استخراج دوال جدول الدوال الافتراضية من الذاكرة بناءً على السجل ذي الصلة المستخدم في كود العملية الخاص بنقطة التوقف.

vtable example نظرًا لأنني أردت إنشاء علاقة بين الهيكل في IDA وجداول الدوال الافتراضية في قسم البيانات، فإن نقطة التوقف تغير اسم عنوان جدول الدوال الافتراضية في قسم البيانات ليتوافق مع اسم الهيكل. كما ترى في الصورة التالية: vtable example

يتم أيضًا تغيير أسماء الدوال الافتراضية، باستثناء الحالات التي لا تكون فيها الأسماء هي الأسماء الافتراضية لـ IDA (دوال تحتوي على رموز أو دوال قام المستخدم بتغييرها)، ففي هذه الحالات ستبقى أسماء الدوال كما هي وستتم إضافتها أيضًا إلى هيكل جدول الدوال الافتراضية باسمها الحالي.

يتم إنشاء الأسماء المختارة باستخدام النمط التالي:

  • vtable_
  • vfunc_ باقي الاسم هو إما إزاحة من بداية المقطع (Segment)، وهذا في الغالب لأن معظم الملفات الثنائية هذه الأيام هي PIE و PIC وبالتالي يتم تطبيق ASLR، (بدلاً من استخدام اسم العنوان الكامل، وهو طويل جدًا في بيئات 64 بت). يحتوي هيكل جدول الدوال الافتراضية أيضًا على تعليق: "Was called from offset: XXXX"، هذه الإزاحة هي الإزاحة من بداية المقطع.

إضافة الهياكل إلى التجميع

بعد إنشاء جدول الدوال الافتراضية، تقوم Virtuailor أيضًا بإضافة اتصال بين الهيكل الذي تم إنشاؤه والتجميع كما ترى في الصور التالية: BP after an execution, Example 2

ملاحظة: إزاحة الهيكل المستخدمة في نقطة التوقف ذات صلة فقط بآخر استدعاء تم إجراؤه، من أجل الحصول على فهم أفضل لجميع الاستدعاءات الافتراضية التي تم إجراؤها، تمت إضافة ميزة المراجع المتبادلة (xref) كما هو موضح في القسم التالي.

مراجع متبادلة (Xref) للدوال الافتراضية

عند إجراء الهندسة العكسية لـ C++ بشكل ثابت، ليس من السهل رؤية من استدعى من، وذلك لأن معظم الاستدعاءات هي استدعاءات غير مباشرة، ولكن بعد تشغيل Virtuailor، كل دالة تم استدعاؤها بشكل غير مباشر أصبح لديها مرجع متبادل (xref) لتلك المواقع.

الصورة المتحركة التالية توضح المراجع المتبادلة المضافة مع استدعاء الدالة غير المباشرة الخاص بها:

xref

المحاضرات والندوات السابقة

تم تقديم الأداة في مؤتمرات RECon Brussels و Troopers و Warcon. يمكن العثور على العرض التقديمي في الرابط التالي: https://www.youtube.com/watch?v=Xk75TM7NmtA

شكر

طواقم REcon Brussels و Troopers و Warcon، Nana، @tmr232، @matalaz، @oryandp، @talkain، @shiftreduce

الترخيص

الملحق الإضافي مرخص بموجب رخصة GNU GPL v3.

تنزيل الأداة