
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 de Desenvolvedor AMFI do iOS (arm64/arm64e)
Kit de ferramentas de nível de pesquisa. Compare o firmware do iOS 27.0.1 com o 27.2, faça engenharia reversa da tabela de despacho
IOUserClientdo AMFI, compile de forma cruzada um PoC IOKit bare-metal a partir do Linux — sem necessidade de Xcode — e ative o Modo de Desenvolvedor no iOS 27.0.1 através do protocolo lockdown padrão da Apple (persistência verificada em nível de kernel). Descoberta principal atual: fortalecimento silencioso contra overflow de ASTC/DDS no ImageIO, estruturalmente alcançável a partir do caminho de decodificação genérico — cadeia MediaAnalysis rastreada atéASTCReadPlugin::initialize(Sessões 28–31).
IOExternalMethodDispatch, identificou selector 11 = armSecurityBootMode.poc/poc.c abre AppleMobileFileIntegrity/AppleCredentialManager, chama armSecurityBootMode e registra o resultado. Sem o peso 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 de 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 falsificação de entitlement — 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 uma reinicialização independente (as mesmas verificações anteriormente voltavam para false, portanto a persistência é a prova real; consulte 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 a 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
| ação | Significado | Efeito |
|---|---|---|
0 | revelar | Mostra a opção de Modo de Desenvolvedor nas Configurações |
1 | ativar | Define o sinalizador, reinicia o dispositivo |
2 | aceitar | Confirmação pós-reinício, reinicia novamente |
⚠️ O
pymobiledevice3faz um curto-circuito: se o status já fortrue,enable-developer-modeapenas registra "Developer mode is already enabled" e não envia nada. As duas reinicializações 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: compilar de forma cruzada o binário IOKit autónomo no Linux e
enviá-lo para o dispositivo através do túnel CoreDevice / RSD do iOS 17+, e depois executá-lo com o
serviço de controlo de processos DVT (fora do App Sandbox — sem installd, sem IPA com assinatura gratuita).
./run_dvt.sh enable # build (clang + ld64.lld) → deploy → `dvt launch --stream`
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 binário SDKSettings.plist 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á WIP — vejaHANDOFF.md«Сессия 12». Observe também que o caminho IOKit do PoC (seletor 11 deAppleMobileFileIntegrity) 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 iniciado via DVT — a forma suportada de habilitar o Developer Mode é o protocolo lockdown documentado acima.
Duas etapas limpas 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.