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

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

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

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

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
ghidra_kernelcache — إطار عمل Ghidra لهندسة عكسية لنظام iOS kernelcache | Kitploit
أدوات/GitHubGitHub/0x36/ghidra_kernelcache
أمان iOSالهندسة العكسيةتحليل الملفات الثنائيةتحليل البرامج الثابتة
GitHub0x36/ghidra_kernelcache

ghidra_kernelcache

إطار عمل Ghidra لهندسة عكسية لنظام iOS kernelcache

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

الأكثر شعبية

عرض الكل →

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

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

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

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

ghidra_kernelcache: إطار عمل Ghidra لـ kernelcache لنظام iOS للهندسة العكسية

هذا الإطار هو نتاج خبرتي في الهندسة العكسية لـ Kernelcache، حيث أبحث عادةً عن الثغرات من خلال التدقيق اليدوي للنواة وامتداداتها، وقد قمت بأتمتة معظم الأشياء التي كنت أرغب حقًا في رؤيتها في Ghidra لتسريع عملية الهندسة العكسية، وقد أثبت ذلك فعاليته ويوفر الكثير من الوقت. يعمل الإطار على iOS 12/13/14/15 و macOS 11/12 (كل من kernelcache و KEXT منفرد) وقد تم إتاحته للجمهور بهدف مساعدة الأشخاص على بدء البحث في نواة iOS دون عناء إعداد بيئتهم الخاصة. كما أعتقد، فإن هذا الإطار (بما في ذلك مجموعة الأدوات التي يوفرها وبعض المعرفة الأساسية بـ IOKit) كافٍ لبدء الاختراق في Kernelcache.

الإطار مكتوب بالكامل بلغة Python، ويمكن توسيعه لبناء أدوات أخرى، ويوفر بعض واجهات برمجة التطبيقات الأساسية التي يمكنك استخدامها في أي مشروع تقريبًا وتوفير الوقت من قراءة الدليل المطول، نرحب بك لقراءة الوظائف الأساسية في دليل utils/ .

Ghidra جيد عندما يتعلق الأمر بتحليل Kernelcaches، ولكن مثل أدوات الهندسة العكسية الأخرى، يتطلب بعض العمل اليدوي، يوفر ghidra_kernelcache نقطة دخول جيدة لإصلاح الأمور في البداية وحتى أثناء القيام بالهندسة العكسية، مما يوفر مخرجات مفكك تبدو جيدة.

هناك مشروع مشابه من قبل @_bazad في IDAPro يسمى ida_kernelcache والذي يوفر نقطة دخول جيدة للباحثين الراغبين في العمل مع صورة النواة في IDA، إطاري يشبه إلى حد ما عمل Brandon، ويتجاوز ذلك من خلال توفير ميزات أكثر بكثير لجعل عملية العمل مع kernelcache أقل إيلامًا.

الميزات :

  • *رمزية kernelcache لنظام iOS.
  • إعادة بناء التسلسل الهرمي لفئات C++ والجداول الافتراضية.
  • مراجع استدعاءات الطرق الافتراضية.
  • الإصلاح التلقائي لجدول توزيع الطرق الخارجية لكل من ::externalMethod() و ::getTargetAndMethodForIndex().
  • تطبيق مساحات الأسماء على طرق الفئات.
  • نشر اسم الرمز ونوعه عبر وسيطات الدالة.
  • تطبيق تواقيع الدوال للدوال المعروفة للنواة.
  • استيراد الهياكل والفئات القديمة من مشروع قديم إلى مشروع جديد.

تم إنشاء هذه الميزات كأدوات منفصلة يمكن تنفيذها إما عن طريق اختصارات لوحة المفاتيح أو بالنقر على أيقوناتها في شريط الأدوات.

التثبيت

استنساخ المستودع :```sh git clone https://github.com/0x36/ghidra_kernelcache.git

**ملاحظة مهمة**: تم اختبار المشروع على Ghidra 10.1_PUBLIC و 10.2_DEV وهو غير متوافق مع الإصدارات الأقدم.

انتقل إلى *`Windows → Script Manager`*، وانقر على *`script Directory`*، ثم أضف *`ghidra_kernelcache`* إلى قائمة مسارات الدليل.
انتقل إلى *`Windows → Script Manager`*، في قائمة *scripts*، انتقل إلى فئة *`iOS→kernel`* وتحقق من الإضافات الموجودة هناك، ستظهر في شريط أدوات GHIDRA.

في دليل [logos/](https://github.com/0x36/ghidra_kernelcache/tree/master/logos) يمكنك وضع شعاراتك الخاصة لكل أداة.

## ترميز نواة iOS kernelcache

يتطلب `ghidra_kernelcache` في المرحلة الأولى [iometa](https://github.com/Siguza/iometa/) (من صنع [@s1guza](https://twitter.com/s1guza))، وهي أداة قوية توفر معلومات فئة C++ في النواة الثنائية، الشيء الرائع أنها تعمل كملف ثنائي مستقل، لذا يمكن استيراد المخرجات إلى إطار عمل RE المفضل لديك بمجرد تحليلها. يأخذ إطاري مخرجات iometa ويحللها لترميز وإصلاح الجداول الافتراضية.

### الاستخدام
بعد فك ضغط النواة، قم بتشغيل الأوامر التالية:```sh
$ iometa -n -A /tmp/kernel A10-legacy.txt > /tmp/kernel.txt
# if you want also to symbolicate using jtool2
$ jtool2 --analyze /tmp/kernel

قم بتحميل kernelcache في Ghidra، لا تستخدم الاستيراد الدفعي، قم بتحميله كصورة Mach-O. بعد تحميل Kernelcache وتحليله تلقائيًا، انقر على الأيقونة الظاهرة في شريط الأدوات أو اضغط على Meta-Shift-K، ثم ضع المسار الكامل لمخرجات iometa وهو /tmp/kernel.txt في حالتنا.

إذا كنت ترغب في استخدام رموز jtool2، يمكنك استخدام jsymbol.py الموجود في فئة iOS→kernel أيضًا.

iOS kernelcache API

أمثلة كاملة لواجهة API موجودة في ghidra_kernelcache/kc.py

→ فيما يلي بعض الأمثلة على التعامل مع كائنات الفئة:```py from utils.helpers import * from utils.class import * from utils.iometa import ParseIOMeta

ff = "/Users/mg/ghidra_ios/kernel.txt" iom = ParseIOMeta(ff) Obj = iom.getObjects() kc = kernelCache(Obj)

symbolicate the kernel

kc.process_all_classes()

symbolicate the classes under com.apple.iokit.IOSurface bundle

kc.process_classes_for_bundle("com.apple.iokit.IOSurface")

symbolicate the classes under kernel bundle

kc.process_classes_for_bundle("kernel")

Process one class (including its parents)

kc.process_class("IOGraphicsAccelerator2")

Clears the content of the class structures (vtables are excluded)

kc.clear_class_structures()

Overwrite the old vtable structure definition and resymbolicate it again

kc.update_classes_vtable()

Reconstructing function call trees by enumerating all pac references and find their corresponding virtual method call

kc.explore_pac()

كما ترى، يمكنك ترميز الكرنل كاش بالكامل أو جزئيًا، وإذا تم اختيار الترميز الجزئي، فسيقوم `ghidra_kernelcache` تلقائيًا ببناء جميع تبعيات الفئات قبل المتابعة.
إذا قمت بتشغيل السكريبت على الكرنل كاش بالكامل (الترميز الكامل)، فسيستغرق `ghidra_kernelcache` عدة دقائق لتحليل صورة النواة.

بمجرد الانتهاء، سيوفر Ghidra ما يلي:

→ تمت إضافة فئة جديدة في مرشح الإشارات المرجعية (Bookmark Filter) باسم "iOS":

<img src="https://raw.githubusercontent.com/0x36/ghidra_kernelcache/master/screenshots/image1.png" alt="صورة1" width="200"/>

→ تتم إضافة الجداول الافتراضية لفئات IOKit إلى الإشارات المرجعية الخاصة بـ 'iOS' للحصول على بحث أسرع وأفضل في الجداول الافتراضية، يمكنك ببساطة البحث عن كيكست (kext) أو فئة بإدخال أحرف أو كلمات أو معرف حزمة الكيكست في شريط البحث.

<img src="https://raw.githubusercontent.com/0x36/ghidra_kernelcache/master/screenshots/image2.png" alt="صورة2"/>

→ إصلاح الجدول الافتراضي: يقوم بفك تجميع/ترجمة الكود غير المعروف، ويصلح مساحات الأسماء، ويعيد ترميز طرق الفئة ويطبق تعريف دالة على كل طريقة:

<img src="https://raw.githubusercontent.com/0x36/ghidra_kernelcache/master/screenshots/image3.png" alt="صورة3"/>

→ إنشاء مساحات أسماء للفئات ووضع كل طريقة في مساحة الاسم المقابلة لها:

<img src="https://raw.githubusercontent.com/0x36/ghidra_kernelcache/master/screenshots/image4.png" alt="صورة4"/>

→ إنشاء هيكل الفئة مع مراعاة التسلسل الهرمي للفئات:

<img src="https://raw.githubusercontent.com/0x36/ghidra_kernelcache/master/screenshots/image5.png" alt="صورة5"/>

→ إنشاء الجداول الافتراضية للفئات، ولكل طريقة تعريفها الخاص للحصول على مخرجات فك تجميع أفضل:

<img src="https://raw.githubusercontent.com/0x36/ghidra_kernelcache/master/screenshots/image6.png" alt="صورة6"/>

يمكن العثور على التنفيذ الكامل في [`utils/class.py.`](https://github.com/0x36/ghidra_kernelcache/blob/master/utils/class.py)

فيما يلي بعض لقطات الشاشة قبل وبعد الترميز باستخدام `ghidra_kernelcache`:

<img src="https://raw.githubusercontent.com/0x36/ghidra_kernelcache/master/screenshots/image7.png" alt="صورة7"/>

<img src="https://raw.githubusercontent.com/0x36/ghidra_kernelcache/master/screenshots/image8.png" alt="صورة8"/>

## ترميز كيكستات macOS
---
دعم `ghidra_kernelcache` لنظام macOS مخصص لكل من ترميز الكرنل كاش وكيكست واحد (KEXT) لمعماريتي ARM64e و x86_64.
**هام:** في وقت كتابة هذه السطور، لا يستطيع Ghidra تحليل كامل الكرنل كاش لنظام macOS، ولكن من الممكن تحميله في IDA للتحليل الأولي ثم استيراد قاعدة البيانات (idb إلى xml) إلى Ghidra لاحقًا، لكن هذا خارج النطاق. إذا تمكنت من القيام بذلك، فسيتولى `ghidra_kernelcache` الباقي.

هناك بعض الخطوات القليلة التي يجب اتباعها قبل ترميز أي إضافة نواة (Kernel Extension) لنظام macOS، حيث أن الهدف الرئيسي لـ `ghidra_kernelcache` هو إعادة بناء التسلسل الهرمي للفئات وإدارة جميع هياكل الفئات في قاعدة بيانات واحدة، ولا تستوفي إضافة النواة تلك المتطلبات، مما يعني أن ترميز كيكست واحد يتطلب ترميز النواة وربما إضافات نواة أخرى تعتمد عليها، وبالتالي يجب القيام ببعض العمل الإضافي هنا.
يوفر `ghidra_kernelcache` الآن طريقة قوية لترميز إضافات النواة بما في ذلك النواة نفسها عن طريق إدارة ومشاركة هياكل الفئات وتعريفات الطرق الافتراضية عبر أرشيف مشروع نوع البيانات (DataType Project Archive) القوي من Ghidra.
تنزيل الأداة