
webkit; but pwned
هذا البرنامج بالتأكيد ليس برنامج تجسس.
قم بتشغيله على جهاز iOS بمعمارية 64-بت في أقرب وقت ممكن.
سيتم مكافأة امتثالك.
[ نسخة حية على totally-not.spyware.lol ]
الواجهة الأمامية واستغلال WebKit موجودان في /root.
استغلال النواة موجود في /glue.
مرحلة ما بعد الاستغلال موجودة في /glue/dep.
يمكن بناء DoubleH3lix وMeridian بشكل مستقل إلى مكتبات ثابتة باستخدام make headless وmake all على التوالي، داخل دليليهما.
يُستخدم هذان بعد ذلك لبناء payload في /glue، وهو الثنائي الذي يُشغَّل من JIT بعد استغلال WebKit. يمكن بناؤه فقط باستخدام make، وسيبني جميع الاعتماديات حسب الحاجة.
وكل ذلك يُجمَع أخيراً مع استغلال WebKit عن طريق تشغيل make في /root، والذي سيبني الاعتماديات أيضاً حسب الحاجة.
لقد أردنا في الأصل نقل تصحيح WebKit إلى 10.x، لكننا استسلمنا في النهاية.
انظر /patch للتفاصيل، لكن الخلاصة هي:
أحد أجزاء خطأ WebKit كان تنبؤات غير صحيحة في JSC::DFG::clobberize، والذي هو في الأساس جملة switch-case ضخمة. كان الإصلاح لذلك هو إعادة توجيه بعض القيم إلى كتل تُستخدم بالفعل لقيم أخرى.
على الإصدارات التي فحصناها، كان المترجم قد أنشأ جداول قفز (jump tables) لذلك، لذا كانت فكرتنا ستكون مجرد العثور على كل جداول القفز هذه وتصحيحها، لأن الكود الصحيح سيكون موجوداً بالفعل.
المشكلة هي أن القيم التي يعتمد عليها كل شيء تغيّرت مئات المرات على مدى عمر iOS 10 (نعم، أكثر بكثير من عدد إصدارات iOS)، ويبدو أنه لا توجد أي معالم قريبة في الكود، لذا من المستحيل تقريباً بالنسبة لنا تحديد القيم التي يجب تصحيحها. :(