
iOS 27 kernelcache RE: خريطة إرسال SEP، فرق AMFI، سير عمل Ghidra
مترجم متقاطع أصلي لنظام Linux + إثبات مفهوم لتفعيل وضع مطوّر AMFI على iOS (arm64/arm64e)
مجموعة أدوات بمستوى بحثي. قارن بين برامج iOS 27.0.1 و27.2 الثابتة، وأعد هندسة جدول توزيع
IOUserClientالخاص بـ AMFI، وترجم بشكل متقاطع إثبات مفهوم IOKit عاري المعدن من Linux — دون الحاجة إلى Xcode — وفعّل وضع المطوّر على iOS 27.0.1 عبر بروتوكول lockdown القياسي من Apple (مُتحقَّق من ثباته على مستوى النواة).
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). لا jailbreak، ولا IPA، ولا تزوير
entitlement — فقط 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
| action | المعنى | التأثير |
|---|---|---|
0 | reveal | يُظهر مفتاح وضع المطوّر في الإعدادات |
1 | enable | يعيّن العلامة، ويعيد تشغيل الجهاز |
2 | accept | تأكيد ما بعد إعادة التشغيل، ويعيد التشغيل مرة أخرى |
⚠️ يقوم
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 من SDKSettings.plist الثنائي عبر plistlib؛dvt launch --stream.الحالة: الترجمة المتقاطعة على Linux تعمل (يُنتَج Mach-O حقيقي
arm64). خطوة النشر على الجهاز لا تزال قيد العمل — انظرHANDOFF.md«Сессия 12». لاحظ أيضاً أن مسار IOKit في إثبات المفهوم (AppleMobileFileIntegrityselector 11) يتطلب entitlement المقيّد بالمنصة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.
.
├── ipsws/ # iOS firmware images (NOT versioned — multi-GB)
├── kernelcaches/ # Extracted kernelcaches (arm64e Mach-O)
├── extracted/ # RootFS dumps + entitlements scan
├── diff_output/ # Full markdown diff reports (KEXTS, DYLIBS, SANDBOX...)
├── research/ # CVE analysis, XNU source excerpts
├── docs/WHITEPAPER.md # Full AMFI binary-diff whitepaper (iOS 27.0.1 → 27.2)
├── poc/ # ★ PoC source + Linux build system
│ ├── poc.c # AMFI + ACM IOKit client (C99)
│ ├── stubs/iokit_stub.h # Minimal IOKit header for Linux syntax check
│ ├── entitlements.plist # Required entitlements for armSecurityBootMode
│ ├── build_ipa.sh # ★ Linux cross-compiler (clang + ld64.lld + ldid)
│ ├── syntax_check_linux.sh
│ ├── lockdown_devmode.py # Session 9: lockdown/AMFI dev-mode probes
│ ├── action_probe.py # ★ Real AMFI protocol {"action": N}
│ ├── state_check.py # ★ Full kernel-level status + mounter query
│ ├── verify_now2.py # Post-restart accept (action=2) + verification
│ ├── semantics_probe.py # lockbot KV-store semantics (set_value dead-end)
│ ├── spoof_test.py # DeveloperModeStatus spoof attempt (failed)
│ ├── probe_amfi_service.py
│ ├── final_verify.py
│ └── verify_now.py
├── run_dvt.sh # ★ CoreDevice/DVT deploy (build + usbmuxd + RSD tunnel + launch)
├── tools/macho_tool.py # stdlib-only Mach-O arm64e disassembler (kernelcache RE)
├── HANDOFF.md # Full session log (Russian + English)
└── README.md # You are here