
iOS 27 kernelcache RE: خريطة إرسال SEP، فرق AMFI، سير عمل Ghidra
مترجم متقاطع أصلي لنظام Linux + إثبات مفهوم (PoC) لتفعيل وضع المطوّر في AMFI على iOS (arm64/arm64e)
مجموعة أدوات بمستوى بحثي. قارن بين برنامجي iOS 27.0.1 و27.2 الثابتين (firmware)، واعكس هندسة جدول الإرسال
IOUserClientالخاص بـ AMFI، وترجم متقاطعًا إثبات مفهوم IOKit يعمل على العتاد مباشرةً من Linux — دون الحاجة إلى Xcode — وفعّل وضع المطوّر على iOS 27.0.1 عبر بروتوكول lockdown القياسي من Apple (تم التحقق من استمراريته على مستوى النواة). الاكتشاف الرئيسي الحالي: تقوية صامتة ضد الفائض في ASTC/DDS داخل ImageIO، يمكن الوصول إليها بنيويًا من مسار فك الترميز العام — سلسلة MediaAnalysis تم تتبعها حتىASTCReadPlugin::initialize(الجلسات 28–31).
IOExternalMethodDispatch، وتحديد selector 11 = armSecurityBootMode.poc/poc.c كلاً من AppleMobileFileIntegrity/AppleCredentialManager، ويستدعي armSecurityBootMode، ويسجّل النتيجة. بلا تضخّم Foundation/UIKit — C خالص + IOKit.poc/build_ipa.sh ملف .ipa موقّعًا على CachyOS/Arch باستخدام clang + ld64.lld + ldid. صفر اعتماديات على Apple/Xcode.يمكن تشغيل سلسلة مفتاح وضع المطوّر في iOS بالكامل عبر بروتوكول lockdown
القياسي من Apple (com.apple.amfi.lockdown). لا كسر حماية، ولا IPA، ولا تزوير
استحقاقات — فقط pymobiledevice3 على Linux.
تم التحقق: بعد السلسلة أدناه، أصبح mounter query-developer-mode-status → true وتم
تثبيت DeveloperDiskImage على /System/Developer — ونجا كلاهما من إعادة تشغيل مستقلة
(كانت الفحوصات نفسها تعود سابقًا إلى false، لذا فإن الاستمرارية هي
الدليل الحقيقي؛ انظر FINDINGS_LOCK.md).
أزل رمز المرور (الإعدادات → Face ID & Passcode → إيقاف رمز المرور).
عند تعيين رمز مرور، يردّ AMFI على action=1/action=2 بـ Device has a passcode set.
# 1) enable → action=1 → REBOOT #1
flatpak-spawn --host python3 -m pymobiledevice3 amfi enable-developer-mode
# 2) after the device boots: post-restart accept → action=2 → REBOOT #2
# (the CLI has no separate accept command — call the service method directly,
# e.g. via poc/verify_now2.py)
# 3) reveal the Settings toggle → action=0
flatpak-spawn --host python3 -m pymobiledevice3 amfi reveal-developer-mode
flatpak-spawn --host python3 -m pymobiledevice3 mounter query-developer-mode-status # → true
flatpak-spawn --host python3 -m pymobiledevice3 mounter list # → IsMounted: true, /System/Developer
flatpak-spawn --host python3 -m pymobiledevice3 mounter auto-mount # → DeveloperDiskImage mounted successfully
| الإجراء | المعنى | التأثير |
|---|---|---|
0 | كشف | يُظهر مفتاح وضع المطوّر في الإعدادات |
1 | تفعيل | يضبط العلامة، ويُعيد تشغيل الجهاز |
2 | قبول | تأكيد بعد إعادة التشغيل، ويُعيد التشغيل مرة أخرى |
⚠️ يقوم
pymobiledevice3بـاختصار المسار: إذا كانت الحالة بالفعلtrue، فإنenable-developer-modeيسجّل فقط "Developer mode is already enabled" ولا يرسل شيئًا. عمليتا إعادة التشغيل هما جزء من بروتوكول Apple، وليستا أمرًا عارضًا.
sudo pacman -S clang lld zip # compiler + Mach-O linker
yay -S ldid # entitlement injector (AUR)
# iOS SDK:
mkdir -p poc/SDK
git clone https://github.com/theos/sdks poc/tmp && mv poc/tmp/iPhoneOS*.sdk poc/SDK/iPhoneOS.sdk
cd poc
IOS_SDK=/path/to/iPhoneOS.sdk ./build_ipa.sh
# Output: EnableAMFIDevMode.ipa
# Via ideviceinstaller (libimobiledevice):
ideviceinstaller --install EnableAMFIDevMode.ipa
# Via TrollStore (if jailbroken/CT-bypass device):
# → TrollStore app → "+" → pick EnableAMFIDevMode.ipa
# Via SideStore/AltStore:
# → Add to SideStore → sign with your Apple ID
# On device (SSH / NewTerm):
./EnableAMFIDevMode 1
cat /tmp/amfi_devmode_poc.log
# Then REBOOT to activate Developer Mode
run_dvt.sh)يوجد مسار ثانٍ خالٍ من IPA: ترجمة الملف التنفيذي المستقل IOKit بشكل متقاطع على Linux ودفعه إلى الجهاز عبر نفق CoreDevice / RSD في iOS 17+، ثم تشغيله باستخدام خدمة التحكم في العمليات DVT (خارج App Sandbox — بدون installd، وبدون IPA موقّع مجانًا).
./run_dvt.sh enable # build (clang + ld64.lld) → deploy → `dvt launch --stream`
run_dvt.sh يؤتمت السلسلة بأكملها:
usbmuxd، ويفحص الجهاز باستخدام ideviceinfo (libimobiledevice)؛poc/poc.c تجميعًا متقاطعًا إلى Mach-O بصيغة arm64 مجرّدة (بدون سلسلة أدوات Apple):
clang -c → ld64.lld -platform_version ios … -syslibroot … -undefined dynamic_lookup؛
تُقرأ نسخة SDK من ملف binary SDKSettings.plist عبر plistlib؛dvt launch --stream.الحالة: التجميع المتقاطع على Linux يعمل (يُنتَج ملف Mach-O حقيقي بصيغة
arm64). خطوة النشر على الجهاز لا تزال قيد العمل (WIP) — راجعHANDOFF.md«Сессия 12». لاحظ أيضًا أن مسار IOKit في PoC (مُحدِّدAppleMobileFileIntegrityرقم 11) يتطلب الاستحقاق المقيّد بالمنصةcom.apple.private.amfi.developer-mode-control، لذا سيُرفض ملف ثنائي غير موقّع من Apple بواسطة userclient حتى عند تشغيله عبر DVT — والطريقة المدعومة لتمكين وضع المطوّر هي بروتوكول lockdown الموثّق أعلاه.
خطوتان نظيفتان لكل شريحة معمارية (لتجنّب أن يبتلع مشغّل clang الخيارين -arch/-platform_version عند التفويض إلى ld64.lld):
-arch arm64 -platform_version ios <min> <sdk> صريحينيكتشف تلقائيًا clang-20...15 وld64.lld/lld وllvm-lipo وldid. تراجع سلس: arm64e → arm64 إذا كانت سلسلة الأدوات تفتقر إلى دعم ptrauth.