
وحدة IDAPython لتعزيز دعم C++ فوق ida_kernelcache
وحدة IDAPython توفر طريقة أكثر ملاءمة بكثير لهندسة عكسية لـ iOS kernelcaches.
جزء كبير من iOS kernelcache مكتوب بلغة C++، والتي تُترجم إلى شيفرة ثنائية معقدة تستخدم العديد من إلغاءات مراجع الجداول الافتراضية بدلاً من الاستدعاءات المباشرة الصريحة. يستفيد ida_kcpp من إعادة بناء التسلسل الهرمي للفئات في ida_kernelcache. فهو يربط IDB ويزامن الدوال الثنائية والدوال الافتراضية الأصلية. ويتيح التنقل عبر iOS kernelcache بالنقر المزدوج على استدعاء دوال C++ الافتراضية، وإيجاد مراجعها المتقاطعة (xrefs)، والحفاظ على كل ذلك متزامنًا أثناء البحث المباشر.
ida_kcpp مستوحى من ida_medigate لكنه يستفيد من البنية الفريدة لـ iOS kernelcache ويوفر بيئة بحث أكثر قوة وملاءمة.

لا يوجد أي منهما على PyPI، لذا اتبع تعليمات التثبيت في مستودعاتهما.
مع ida-setup:
ida-setup plugin install -e /path/to/ida-kcpp
أو يدويًا:
ida_kernelcache وida_kcpp في مسار IDA python.يمكن أيضًا إضافتهما عبر الإضافة إلى ~/.idapro/idapythonrc.py:
import sys
sys.path.append(IDA_KCPP_PATH)
sys.path.append(IDA_KERNELCACHE_PATH)
~/.idapro/plugins/ida_kcpp_plugin.py إلى ida_kcpp_plugin.pyida_kernelcache قد تم تشغيله بعد، فيرجى تشغيله عبر edit >> Plugins >> Kernel Cache CPP >> ida_kernelcache process kernelEdit >> Plugins >> Kernel Cache CPP >> Perform Initial sync... (قد تظهر بعض مربعات حوار التحذير، يمكنك تجاهلها في الوقت الحالي). تعيد هذه الخطوة تسمية أسماء الدوال الافتراضية (Virtual functions) عبر تعيين بادئتها إلى الفئة التي تنتمي إليها. كما تقوم هذه الخطوة أيضًا بفك تجميع (decompile) جميع الدوال الافتراضية، وتعيين وسيط this الخاص بها، وتغيير العضو ذي الصلة ::vmethods ليكون مؤشر دالة إلى النوع المفكوك. قد تستغرق هذه الخطوة بعض الوقت...يقوم ida_kcpp تلقائيًا بنشر الأسماء والنماذج الأولية (prototypes)، ويغيّر أيضًا بعض جوانب التنقل في IDA، ولذلك لا يتم تفعيله تلقائيًا بل يمكن تفعيله أو تعطيله في أي لحظة.
فعّل ida_kcpp بالنقر على edit >> Plugins >> Kernel Cache CPP >> Activate Plugin (سيؤدي هذا إلى تثبيت خطافات Hexrays وتشغيل ida_kernelcache.collect_class_info() أيضًا)
بالنقر على Edit >> Plugins >> Kernel Cache CPP >> Deactivate Plugin
عند إعادة تسمية دالة افتراضية يمكن للمرء تعديل الاسم المُشوَّه (mangled name) (على سبيل المثال __ZNK10AppleA7IOP9method_86Ev_99)، أو تغييره إلى أسماء مفهومة للبشر (AppleA7IOP::method_86) والتي ستُشوَّه تلقائيًا. سيتم إعادة تسمية العضو ذي الصلة ANCESTOR::vmethods أيضًا، وكذلك سيتم إعادة تسمية جميع الدوال الافتراضية التي تنفّذ نفس الدالة الافتراضية.
ينطبق الأمر نفسه على تغيير النموذج الأولي للدالة الافتراضية. في هذه الحالة، سيتم تغيير النموذج الأولي للعضو ذي الصلة ANCESTOR::vmethods إلى مؤشر دالة للنوع الذي تم تعيينه للتو، مع تعيين this كـ ANCESTOR *. كما سيتم تغيير النماذج الأولية لجميع تنفيذات الدوال الافتراضية ذات الصلة الخاصة بـ DESCENDANTS التابعة لـ ANCESTOR، مع تعيين this الخاصة بها إلى DESCENTANT *.
::vmethods.ida_referee يمكننا تتبع استخدامات كل حقل، وخاصة عضو ::vmethods (الاستدعاءات الافتراضية) في المفكك (decompiler).
CTRL+SHIFT+Y من الدالة الافتراضية، لفتح نافذة المراجع (xrefs) مباشرةً إلى عضو ::vmethod ذي الصلة. لدى IDA خطأ وهذا يعمل فقط من نافذة فك التجميع وليس من المفكك.المفكك (Decompiler): النقر المزدوج على استدعاء دالة افتراضية يُظهر نافذة تتيح للمستخدم اختيار تنفيذ الدالة الافتراضية.

عرض الأنواع المحلية (Local Types view) (Shift+F1):
Cmd+Enter على دالة افتراضية ينتقل أيضًا إلى التنفيذ (بديل أنظف من النقر المزدوج):: لا ينتقل.من تأليف Uriel Malin وIevgen Solodovnykov وOmer Porzecanski من Cellebrite Labs. تم تطويره واختباره لـ IDA 9.2 على macOS مع Python 3.13