
iOS 27 kernelcache RE: SEP-Dispatch-Map, AMFI-Diff, Ghidra-Workflow
Linux-nativer Cross-Compiler + PoC für die Aktivierung des iOS AMFI Developer Mode (arm64/arm64e)
Forschungs-Toolkit. Vergleiche iOS 27.0.1 mit 27.2 Firmware, reverse-engineere die AMFI
IOUserClientDispatch-Tabelle, cross-compiliere einen Bare-Metal IOKit PoC von Linux — kein Xcode erforderlich — und aktiviere den Developer Mode auf iOS 27.0.1 über das stock Apple lockdown Protokoll (verifiziert persistent auf Kernel-Ebene).
IOExternalMethodDispatch Slot kartiert, selector 11 = armSecurityBootMode identifiziert.poc/poc.c öffnet AppleMobileFileIntegrity/AppleCredentialManager, ruft armSecurityBootMode auf und loggt das Ergebnis. Kein Foundation/UIKit Ballast — reines C + IOKit.poc/build_ipa.sh erzeugt eine signierte .ipa auf CachyOS/Arch mit clang + ld64.lld + ldid. Null Apple/Xcode Abhängigkeiten.Die iOS Developer Mode Toggle-Kette kann vollständig über das stock Apple
lockdown Protokoll (com.apple.amfi.lockdown) gesteuert werden. Kein Jailbreak, keine IPA, kein Entitlement
Fälschen — nur pymobiledevice3 auf Linux.
Verifiziert: nach der untenstehenden Kette, mounter query-developer-mode-status → true und das
DeveloperDiskImage wurde unter /System/Developer gemountet — und beides überlebte einen unabhängigen
Reboot (die gleichen Checks sprangen zuvor auf false zurück, daher ist die Persistenz der
echte Beweis; siehe FINDINGS_LOCK.md).
Entferne den Passcode (Einstellungen → Face ID & Passcode → Passcode ausschalten).
Mit gesetztem Passcode antwortet AMFI auf action=1/action=2 mit 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 | Bedeutung | Effekt |
|---|---|---|
0 | reveal | Zeigt den Developer Mode Toggle in den Einstellungen |
1 | enable | Setzt das Flag, rebootet das Gerät |
2 | accept | Post-Restart Bestätigung, rebootet erneut |
⚠️
pymobiledevice3short-circuited: wenn der Status bereitstrueist, loggtenable-developer-modenur "Developer mode is already enabled" und sendet nichts. Die zwei Reboots sind Teil des Apple Protokolls, nicht zufällig.
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)Ein zweiter, IPA-freier Pfad existiert: cross-compiliere das standalone IOKit Binary auf Linux und
pushe es auf das Gerät durch den iOS 17+ CoreDevice / RSD Tunnel, dann führe es mit dem
DVT Process-Control Service aus (außerhalb der App Sandbox — kein installd, keine free-sign IPA).
./run_dvt.sh enable # build (clang + ld64.lld) → deploy → `dvt launch --stream`
run_dvt.sh automatisiert die gesamte Kette:
usbmuxd, prüft das Gerät mit ideviceinfo (libimobiledevice);poc/poc.c zu einem bare arm64 Mach-O (keine Apple Toolchain):
clang -c → ld64.lld -platform_version ios … -syslibroot … -undefined dynamic_lookup;
die SDK-Version wird aus der binären SDKSettings.plist via plistlib gelesen;dvt launch --stream auf.Status: der Linux Cross-Compile funktioniert (ein echtes
arm64Mach-O wird erzeugt). Der On-Device Deploy-Schritt ist noch WIP — sieheHANDOFF.md«Сессия 12». Beachte auch, dass der PoC's IOKit Pfad (AppleMobileFileIntegrityselector 11) das platform-restricted Entitlementcom.apple.private.amfi.developer-mode-controlerfordert, daher wird ein nicht-Apple-signiertes Binary vom Userclient abgelehnt, selbst wenn es via DVT gestartet wird — der unterstützte Weg, den Developer Mode zu aktivieren, ist das oben dokumentierte Lockdown-Protokoll.
Zwei saubere Schritte pro Architektur-Slice (vermeidet, dass der clang Driver -arch/-platform_version verschluckt, wenn er an ld64.lld delegiert):
-arch arm64 -platform_version ios <min> <sdk>Auto-erkennt clang-20...15, ld64.lld/lld, llvm-lipo, ldid. Graceful Fallback: arm64e → arm64, wenn die Toolchain keine ptrauth-Unterstützung hat.