
iOS 27 kernelcache RE: mappa di dispatch SEP, diff AMFI, workflow Ghidra
Cross-compiler nativo per Linux + PoC per l'attivazione della Modalità Sviluppatore AMFI su iOS (arm64/arm64e)
Toolkit di livello di ricerca. Confronta il firmware iOS 27.0.1 vs 27.2, esegui il reverse engineering della tabella di dispatch
IOUserClientdi AMFI, compila in cross-compilazione un PoC IOKit bare-metal da Linux — senza Xcode — e abilita la Modalità Sviluppatore su iOS 27.0.1 tramite il protocollo lockdown standard di Apple (verificato persistente a livello kernel).
IOExternalMethodDispatch, identificato selector 11 = armSecurityBootMode.poc/poc.c apre AppleMobileFileIntegrity/AppleCredentialManager, chiama armSecurityBootMode e registra il risultato. Niente Foundation/UIKit — puro C + IOKit.poc/build_ipa.sh produce un .ipa firmato su CachyOS/Arch usando clang + ld64.lld + ldid. Zero dipendenze Apple/Xcode.La catena di attivazione della Modalità Sviluppatore di iOS può essere pilotata interamente attraverso il protocollo lockdown standard di Apple (com.apple.amfi.lockdown). Niente jailbreak, niente IPA, niente falsificazione di entitlement — solo pymobiledevice3 su Linux.
Verificato: dopo la catena sottostante, mounter query-developer-mode-status → true e il DeveloperDiskImage è stato montato su /System/Developer — ed entrambi sono sopravvissuti a un riavvio indipendente (gli stessi controlli in precedenza tornavano a false, quindi la persistenza è la vera prova; vedi FINDINGS_LOCK.md).
Rimuovi il codice di sblocco (Impostazioni → Face ID e codice → Disattiva codice).
Con un codice impostato, AMFI risponde a action=1/action=2 con 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 | Significato | Effetto |
|---|---|---|
0 | reveal | Mostra l'interruttore della Modalità Sviluppatore nelle Impostazioni |
1 | enable | Imposta il flag, riavvia il dispositivo |
2 | accept | Conferma post-riavvio, riavvia di nuovo |
⚠️
pymobiledevice3cortocircuita: se lo stato è giàtrue,enable-developer-moderegistra solo "Developer mode is already enabled" e non invia nulla. I due riavvii sono parte del protocollo Apple, non incidentali.
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)Esiste un secondo percorso, senza IPA: compila in cross-compilazione il binario IOKit standalone su Linux e invialo al dispositivo attraverso il tunnel CoreDevice / RSD di iOS 17+, poi eseguilo con il servizio di controllo dei processi DVT (al di fuori dell'App Sandbox — niente installd, niente IPA con firma gratuita).
./run_dvt.sh enable # build (clang + ld64.lld) → deploy → `dvt launch --stream`
run_dvt.sh automatizza l'intera catena:
usbmuxd, controlla il dispositivo con ideviceinfo (libimobiledevice);poc/poc.c in un Mach-O arm64 puro (senza toolchain Apple):
clang -c → ld64.lld -platform_version ios … -syslibroot … -undefined dynamic_lookup;
la versione dell'SDK viene letta dal SDKSettings.plist binario tramite plistlib;dvt launch --stream.Stato: la cross-compilazione su Linux funziona (viene prodotto un vero Mach-O
arm64). Il passaggio di deploy sul dispositivo è ancora WIP — vediHANDOFF.md«Сессия 12». Nota anche che il percorso IOKit del PoC (AppleMobileFileIntegrityselector 11) richiede l'entitlement con restrizioni di piattaformacom.apple.private.amfi.developer-mode-control, quindi un binario non firmato da Apple verrà rifiutato dall'userclient anche quando avviato via DVT — il modo supportato per abilitare la Modalità Sviluppatore è il protocollo lockdown documentato sopra.
Due passaggi puliti per ogni slice di architettura (evita che il driver clang inghiotta -arch/-platform_version quando delega a ld64.lld):
-arch arm64 -platform_version ios <min> <sdk> esplicitiRileva automaticamente clang-20...15, ld64.lld/lld, llvm-lipo, ldid. Fallback graduale: arm64e → arm64 se la toolchain non supporta ptrauth.