
iOS 27 kernelcache RE: SEPディスパッチマップ、AMFI差分、Ghidraワークフロー
iOS AMFI開発者モード有効化のためのLinuxネイティブクロスコンパイラ + PoC (arm64/arm64e)
研究グレードのツールキット。 iOS 27.0.1と27.2のファームウェアを差分比較し、AMFI
IOUserClientディスパッチテーブルをリバースエンジニアリングし、LinuxからベアメタルのIOKit PoCをクロスコンパイルし(Xcode不要)、標準のApple lockdownプロトコル経由でiOS 27.0.1の開発者モードを有効化します(カーネルレベルで永続性を検証済み)。
IOExternalMethodDispatchスロットをマッピングし、selector 11 = armSecurityBootModeを特定。poc/poc.cはAppleMobileFileIntegrity/AppleCredentialManagerを開き、armSecurityBootModeを呼び出して結果をログに記録します。Foundation/UIKitの肥大化なし — 純粋なC + IOKit。poc/build_ipa.shはCachyOS/Arch上でclang + ld64.lld + ldidを使用して署名済み.ipaを生成します。Apple/Xcode依存ゼロ。iOS開発者モードのトグルチェーンは、標準のApple lockdownプロトコル(com.apple.amfi.lockdown)を通じて完全に駆動できます。脱獄もIPAもentitlement偽造も不要 — Linux上のpymobiledevice3だけです。
検証済み: 以下のチェーン実行後、mounter query-developer-mode-status → trueとなり、DeveloperDiskImageが/System/Developerにマウントされました — そして両方とも独立した再起動を生き延びました(以前は同じチェックがfalseに戻っていたため、永続性こそが本当の証明です。FINDINGS_LOCK.mdを参照)。
パスコードを削除してください(設定 → Face IDとパスコード → パスコードをオフにする)。
パスコードが設定されていると、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"*とログするだけで何も送信しません。 2回の再起動は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)2つ目のIPA不要のパスが存在します: スタンドアロンIOKitバイナリをLinuxでクロスコンパイルし、iOS 17+のCoreDevice / RSDトンネル経由でデバイスにプッシュし、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をベアarm64 Mach-Oにクロスコンパイル(Appleツールチェーンなし):
clang -c → ld64.lld -platform_version ios … -syslibroot … -undefined dynamic_lookup;
SDKバージョンはバイナリSDKSettings.plistからplistlib経由で読み取られます;dvt launch --streamを呼び出します。ステータス: Linuxクロスコンパイルは動作します(実際の
arm64Mach-Oが生成されます)。オンデバイスへのデプロイ手順はまだWIPです —HANDOFF.mdの«Сессия 12»を参照。また、PoCのIOKitパス(AppleMobileFileIntegrityselector 11)はプラットフォーム制限付きentitlementcom.apple.private.amfi.developer-mode-controlを必要とするため、Apple署名されていないバイナリはDVT経由で起動してもuserclientに拒否されることに注意してください — 開発者モードを有効化するサポートされた方法は、上記で文書化されたlockdownプロトコルです。
アーキテクチャスライスごとに2つのクリーンなステップ(ld64.lldに委譲する際にclangドライバが-arch/-platform_versionを飲み込むのを回避):
-arch arm64 -platform_version ios <min> <sdk>を持つ実行ファイルclang-20...15、ld64.lld/lld、llvm-lipo、ldidを自動検出。グレースフルフォールバック: ツールチェーンがptrauthサポートを欠く場合、arm64e → arm64。
.
├── 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
📄 完全版ホワイトペーパー → docs/WHITEPAPER.md — vnode_check_signatureのバイナリ差分、強制有効化されたデバッグブリッジ、IOExternalMethodDispatchテーブルのデコード、およびCVE-2025-43520(DarkSword)VFSレース分析。
| 変数 | デフォルト | 説明 |
|---|---|---|
CLANG | 自動検出 | clangバイナリへのパス |
IOS_SDK | 自動検出 | iPhoneOS.sdkへのパス |
LD64 | 自動検出 | ld64.lldリンカへのパス |
LDID | 自動検出 | ldidへのパス(存在しない場合はスキップ → 未署名IPA) |
MINIOS | 16.0 | 最小iOSデプロイメントターゲット |
SDKVER | SDKから自動検出 | -platform_version用のSDKバージョン |
ABrake27は17歳の独立系開発者によって作られています — Macハードウェアなし、企業資金なし、シリコンバレーの後ろ盾なし。 すべてのカーネル差分、すべてのディスパッチテーブルデコード、クロスコンパイラのすべての行は、寝室のLinuxラップトップから、カフェインと執念だけで書かれました。