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

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

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

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

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
Learning-History-of-CFF-bug-in-iphone — اغص في خط CFF وتعرّف بالصدفة على ثغرة bof في تحليل cff من أحد الـ jailbreaks. فقط للمتعة | Kitploit
أدوات/GitHubGitHub/spiralbl0ck/learning-history-of-cff-bug-in-iphone
أمان iOSتحليل الثغرات الأمنيةالهندسة العكسيةتحليل الملفات الثنائيةالتعلم والتعليماستغلال الملفات الثنائية
GitHubspiralbl0ck/learning-history-of-cff-bug-in-iphone

Learning-History-of-CFF-bug-in-iphone

اغص في خط CFF وتعرّف بالصدفة على ثغرة bof في تحليل cff من أحد الـ jailbreaks. فقط للمتعة

الأكثر شعبية

عرض الكل →

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

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

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

عرض جميع الأدوات →
عرض المستودع
113منذ 2 سنواتلم تتم المراجعة بعد
مشاركة

Learning-History-of-CFF-bug-in-iphone

اغوص في خط CFF وبالمصادفة تعلّم عن ثغرة bof في تحليل cff من بعض أدوات jailbreak. فقط للمتعة

إذن.... ما هو CFF بحق الجحيم؟ من معرفتي إنه تنسيق ملف، لكن دعنا نحاول فهم ما تقوله ويكيبيديا: "يعمل CFF كحاوية لتخزين خطوط متعددة معًا في وحدة واحدة تُعرف باسم FontSet." (https://docs.fileformat.com/font/cff/) إذن ببساطة يمكننا تخزين الخطوط معًا. رائع، وماذا الآن؟ حسنًا، بما أنه تنسيق ملف، فلا بد أن له مواصفة، ونعم لديه واحدة، ولا، ليست لطيفة لأنها 60 صفحة ولست مستعدًا لتعلم تنسيقه. لكن يمكننا استخدام الاستغلال من مستودع star-master على GitHub (الكود المصدري من jailbreak 2.0 على ما أعتقد) لتعلم تنسيقه.

إذن... نبدأ باستخدام سكربت cff.py المقدم من المؤلف، ونفتح أيضًا ملف out.cff (ملف .cff بسيط قياسي) في محرر hxd.1

يمكننا أن نرى أنه عندما نمرر الملف إلى المحلل نحصل على التالي 1

إذن لقد أحرزنا بعض التقدم حيث يمكننا بالفعل الوصول إلى تعريف لـ cff، إذ يمكننا أن نستنتج أن لدينا بعض البيانات الوصفية حول ترويسته التي تشير إلى إصدارات tff على ما أظن، وحجم الترويسة، وabsoffsize أياً كان ذلك.

إذن حتى الآن |الإصدار الرئيسي (1 بايت)|الإصدار الثانوي (1 بايت)|حجم الترويسة (1 بايت) | ترويسة absoffsize (1 بايت) |

ثم نذهب أبعد من ذلك ولدينا دالة تجلب الخطوط المستخدمة في ملف .cff هذا. كما نرى

Screenshot 2023-12-31 090700

إذن من أين نعرف أن الغرض منه هو قراءة الخطوط المستخدمة؟ حسنًا، عند تشغيل الأداة حصلنا على النتيجة التالية في cmd

Screenshot 2023-12-31 090837

والتي نرى أنها البايتات التالية بعد البيانات الوصفية للملف

Screenshot 2023-12-31 090921

سنعود لاحقًا إلى تحليل هذه الدالة، لكن في الوقت الحالي يمكننا استنتاج أن تنسيق الملف هو |الإصدار الرئيسي (1 بايت)|الإصدار الثانوي (1 بايت)|حجم الترويسة (1 بايت) | ترويسة absoffsize (1 بايت) | ABCDEF+الخطوط في الحزمة|

علاوة على ذلك، نرى أننا نبحث عن ما يسمى string في السكربت:

1

لماذا ذلك؟ لأنني أفترض أنهم يريدون جمع معلومات حول الخط المستخدم في الحزمة. من الوثائق، يقولون: "جميع السلاسل النصية، باستثناء سلاسل FontName وCIDFontName التي تظهر في Name INDEX، المستخدمة من قِبل خطوط مختلفة داخل FontSet، تُجمع معًا في بنية INDEX ويُشار إليها برقم غير موقّع من 2 بايت يسمى معرّف السلسلة أو SID. هذه السلاسل، المعروفة باسم السلاسل القياسية، تصف جميع الأسماء المستخدمة في مجموعات الأحرف ISOAdobe وExpert". على أي حال، هناك شيء مثير للاهتمام نلاحظه هنا، وهو أننا تخطينا حوالي 41 بايت للوصول إلى السلسلة النصية.

1

1

بعد ذلك نحصل على معلومات حول الخطوط الموجودة في ملف .cff

1

كيف بحق الجحيم نفعل ذلك؟ حسنًا، نجمع ما يسمى بيانات top dict. ما هذا بحق الجحيم؟ حسنًا، من ما استطعت فهمه من الوثائق، هو عبارة عن dict بلغة بايثون يحتوي على معلومات معينة، مشفرة بطريقة معينة.

1

بالمصادفة، إذا اتبعنا خوارزمية فك التشفير:

1

نقوم بعملية dereference على نوع بيانات strings للحصول على معلومات حول الخط، لذا نستنتج أن topdicts تحتوي ببساطة على بعض الفهارس التي تُستخدم لاحقًا في نوع بيانات strings للحصول على معلومات حول الخط.

إذن حتى الآن، يظل تعريف الملف قائمًا،

|الإصدار الرئيسي (1 بايت)|الإصدار الثانوي (1 بايت)|حجم الترويسة (1 بايت) | ترويسة absoffsize (1 بايت) | ABCDEF+الخطوط في الحزمة|41 بايت معروفة|25 بايت من المعلومات حول الخط|

رائع، إذن ماذا يحدث بعد ذلك؟ حسنًا، إذا فحصنا سكربت المحلل، نرى أنه يحصل على charstring_off وprivate_off، وسيذهب إلى موضع charstring_off ويقرأ المزيد من الأشياء

1

لكن كيف يساعدنا ذلك في فهم الصورة الأكبر؟ لذلك سأنهي هذا فجأة. في الأساس، أجريت مقارنة diff بين ملفين، أحدهما cff عادي والآخر cff تالف.

1

على اليسار ملف .cff التالف وعلى اليمين ملف .cff عادي. إذا فحصنا نتيجة التشغيل

1

في المرة الأولى عند تشغيل التحليل، نرى أن كل شيء مثل count وoffsize وoffbase هو ببساطة بعض الإزاحات حتى بعض المحددات. أي محددات؟ تحديدًا اسم الخط. كما ترى ('offbase', 8L) إزاحة من بداية الملف حتى أول ظهور لسلسلة الخط الموجودة في ملف cff

1

كما يمكن رؤيته أيضًا في "الجولة الثانية من التحليل"

1

نرى عند الإزاحة 0x6c في عارض hex أن \x0e\0xe\0xe\x0e هي بداية بياناتنا الخبيثة

إذن كاستنتاج، التنسيق العام لملف .cff

|الإصدار الرئيسي (1 بايت)|الإصدار الثانوي (1 بايت)|حجم الترويسة (1 بايت) | ترويسة absoffsize (1 بايت) | ABCDEF+الخطوط في الحزمة|41 بايت معروفة|25 بايت من المعلومات حول الخط|

وتنسيق الملف المخصص (مع محتوى المستخدم)

|الإصدار الرئيسي (1 بايت)|الإصدار الثانوي (1 بايت)|حجم الترويسة (1 بايت) | ترويسة absoffsize (1 بايت) | ABCDEF+الخطوط في الحزمة|41 بايت غير معروفة|25 بايت من المعلومات حول الخط| 4 بايت (count) | 4 بايت (offsize) | 9 بايت متبقية للتوثيق| محتوى المستخدم|

تنزيل الأداة