
iOS 27 kernelcache RE: mapa de despacho do SEP, diff do AMFI, fluxo de trabalho no Ghidra
Cross-compilador nativo para Linux + PoC para ativação do Modo Desenvolvedor do AMFI no iOS (arm64/arm64e)
Toolkit de nível de pesquisa. Compare o firmware iOS 27.0.1 vs 27.2, faça engenharia reversa da tabela de despacho do
IOUserClientdo AMFI, compile de forma cruzada um PoC IOKit bare-metal a partir do Linux — sem necessidade de Xcode — e ative o Modo Desenvolvedor no iOS 27.0.1 através do protocolo lockdown padrão da Apple (persistência verificada em nível de kernel).
IOExternalMethodDispatch, identificou selector 11 = armSecurityBootMode.poc/poc.c abre AppleMobileFileIntegrity/AppleCredentialManager, chama armSecurityBootMode e registra o resultado. Sem inchaço de Foundation/UIKit — C puro + IOKit.poc/build_ipa.sh produz um .ipa assinado no CachyOS/Arch usando clang + ld64.lld + ldid. Zero dependências de Apple/Xcode.A cadeia de alternância do Modo Desenvolvedor do iOS pode ser acionada inteiramente através do protocolo lockdown padrão da Apple (com.apple.amfi.lockdown). Sem jailbreak, sem IPA, sem forjar entitlements — apenas pymobiledevice3 no Linux.
Verificado: após a cadeia abaixo, mounter query-developer-mode-status → true e o DeveloperDiskImage foi montado em /System/Developer — e ambos sobreviveram a um reboot independente (as mesmas verificações anteriormente voltavam para false, então a persistência é a prova real; veja FINDINGS_LOCK.md).
Remova o código de acesso (Ajustes → Face ID e Código → Desativar Código). Com um código de acesso definido, o AMFI responde action=1/action=2 com 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 | Significado | Efeito |
|---|---|---|
0 | revelar | Mostra a opção do Modo Desenvolvedor nos Ajustes |
1 | ativar | Define o sinalizador, reinicia o dispositivo |
2 | aceitar | Confirmação pós-reinício, reinicia novamente |
⚠️ O
pymobiledevice3curto-circuita: se o status já fortrue,enable-developer-modeapenas registra "Developer mode is already enabled" e não envia nada. Os dois reinícios são parte do protocolo da Apple, não incidentais.
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)Existe um segundo caminho, sem IPA: compile de forma cruzada o binário IOKit autônomo no Linux e envie-o para o dispositivo através do túnel CoreDevice / RSD do iOS 17+, depois execute-o com o serviço de controle de processos DVT (fora do App Sandbox — sem installd, sem IPA de assinatura gratuita).
./run_dvt.sh enable # build (clang + ld64.lld) → deploy → `dvt launch --stream`
O run_dvt.sh automatiza toda a cadeia:
usbmuxd, verifica o dispositivo com ideviceinfo (libimobiledevice);poc/poc.c para um Mach-O arm64 puro (sem toolchain da Apple):
clang -c → ld64.lld -platform_version ios … -syslibroot … -undefined dynamic_lookup;
a versão do SDK é lida do SDKSettings.plist binário via plistlib;dvt launch --stream.Status: a compilação cruzada no Linux funciona (um Mach-O
arm64real é produzido). A etapa de implantação no dispositivo ainda está em desenvolvimento — vejaHANDOFF.md«Сессия 12». Observe também que o caminho IOKit do PoC (AppleMobileFileIntegrityselector 11) requer o entitlement restrito à plataformacom.apple.private.amfi.developer-mode-control, então um binário não assinado pela Apple será recusado pelo userclient mesmo quando lançado via DVT — a forma suportada de ativar o Modo Desenvolvedor é o protocolo lockdown documentado acima.
Dois passos limpos por fatia de arquitetura (evita que o driver clang engula -arch/-platform_version ao delegar para ld64.lld):
-arch arm64 -platform_version ios <min> <sdk> explícitosDetecta automaticamente clang-20...15, ld64.lld/lld, llvm-lipo, ldid. Fallback gracioso: arm64e → arm64 se a toolchain não tiver suporte a ptrauth.