
iCloud認証、CloudKit/MMCSバックアップのダウンロード、Octagon/PCSリカバリ(ADP、リカバリキー、ロックダウンモード)に対応する実験的な.NET/WPFフォレンジックツールキット。Forensis-Labによる研究用ソフトウェア — 非常に実験的であり、AppleのプライベートAPIは一夜にして変更される可能性があります。
公開実験フェーズ — iCloud サインイン、デバイスバックアップの一覧表示、および CloudKit/MMCS 経由のダウンロードを行う WPF (.NET 10) アプリ。

研究/ラボ用ソフトウェア。完成品ではない:非公開の Apple API、アカウント停止リスク、無保証。ご自身の Apple ID でのみ、自己責任で使用すること。
私の名前は Giordano Sconti です。フォレンジックラボ Forensis-Lab と協働しており、ソフトウェア研究者として、また技術コンサルタント(Consulente Tecnico)として活動しています。
このソフトウェアは MIT ライセンスの下で公開されていますが、Forensis-Lab フォレンジックラボに帰属します。
本プロジェクトは極めて実験的なものと考えるべきです。Apple の内部 API は一夜にして変わりうるからです。
このプロジェクトを公開するのは、極端なケースにおいて、デバイス本体を介さなければアクセスできないバックアップや CloudKit データを復旧しなければならない際に、フォレンジック作業にとって価値があるからです。
私が使用してきた商用ツールとは異なり、ADP が有効でも無効でも、自分自身の個人バックアップの安定かつ完全なダウンロードを実現できました(もちろん、有効化されている場合はデバイスの Octagon PIN またはリカバリーキーを把握していることが前提です)。
ロックダウンモードなどの保護が有効で、iCloud.com がオフになっている場合でも動作します。
本プロジェクトには約7か月の研究を要しました。Cursor のコーディングエージェントモデルがなければ、はるかに長くかかったでしょう。使えた時間は、可能なときの勤務時間中か、深夜だけでした。コード構成はモジュール式に保つよう努めました——成功していれば幸いです。
コーヒーをご馳走したいと思ってくださるなら、代わりに Forensis-Lab に感謝するか、何らかの形で評価を示していただけると嬉しいです。
ソフトウェアを試したい方、改善を提案したい方、残りの機能の完成を手伝いたい方は歓迎します。
有料のコーディングエージェントモデルを使用して構いません(無料のものは避けてください——コードの正確性の面で信頼できないことがよくあります)。重要なのは、生成されたコードを必ずレビューすること、そして同意なく第三者のコードを無断で流用しないことです。プルリクエストは非常に慎重にレビューされます。
連絡先: [email protected]
本プロジェクトのすべてのコード行は、私の直接の許諾の下、Forensis-Lab に帰属します。いかなる使用や改変も、Forensis-Lab に帰属可能な状態を保たなければなりません。
独自の anisette スタックを実行する前にソフトウェアを試したい場合は、私の Anisette Server へのアクセスを希望する旨を非公開でご連絡ください。
https://giordanosconti.github.io/iCloudKitExtractor/

リカバリーキーのロック解除は、暗号化された TLKShares の完全なセットをダンプできる Octagon エンドポイントを使用します。これらのシェアから、リカバリーキーのピア(リカバリーキーに署名する公開鍵の SHA-384)に関連するシェアを復旧することも可能です。これにより、特定のリカバリーキーが存在するものの中に含まれているかを検証でき、含まれている場合は、CloudKit ゾーンの Manatee/PCS KeySet——ADP で保護されたバックアップやキーチェーンを含む——を復旧できます。
src/iCloudKitExtractorsrc/PhotosViewer(IKE のビルド時に viewer-payload へコピーされる)AnisetteServer(および任意のブリッジプロジェクト)docs/ 配下のドキュメントdotnet build src/iCloudKitExtractor/iCloudKitExtractor.csproj -c Release
dotnet run --project src/iCloudKitExtractor/iCloudKitExtractor.csproj -c Release
プロジェクトサイトは docs/ 配下にあります(index.html + site.css)。
main を GitHub にプッシュします。main / folder: /docs を指定します。https://giordanosconti.github.io/iCloudKitExtractor/ のようになります。一貫した iPhone/akd アイデンティティを実現するための推奨パスです。OTP は Frida 経由でデバイス上(AuthKit/akd)で生成され、その後 AnisetteServer によって提供されます。
pip install frida-tools)python として利用可能な Python 3(または FRIDA_ANISETTE_PYTHON を設定)fetch_anisette.py(Frida アタッチスクリプト)。パスは FRIDA_ANISETTE_FETCH_PY で設定します脱獄のインストール手順: 下記の 脱獄済み iPhone の準備 を参照してください(詳細は後日)。
| 変数 | 必須 | デフォルト | 意味 |
|---|---|---|---|
ANISETTE_SERVER_BACKEND | はい | coreadi | frida である必要があります(エイリアス: iphone-frida、jb-frida) |
ANISETTE_SERVER_URL / ANISETTE_SERVER_URLS | いいえ | http://127.0.0.1:6969 | AnisetteServer が待ち受ける URL |
ANISETTE_SERVER_PORT | いいえ | 6969 | URL が未設定の場合のポート |
ICLOUD_AUTH_MODE | 推奨 | iphone(設定経由) | 完全な AuthKit iPhone SRP には iphone を使用 |
FRIDA_ANISETTE_HOST | いいえ | 127.0.0.1:27042 | frida-server の host:port(USB の場合は多くの場合 iproxy 27042 27042 経由) |
FRIDA_ANISETTE_PROCESS | いいえ | akd | アタッチするプロセス |
FRIDA_ANISETTE_FETCH_PY | はい* | ヒューリスティックパス | fetch_anisette.py への絶対パス |
FRIDA_ANISETTE_PYTHON | いいえ | python | Python 実行ファイル |
FRIDA_ANISETTE_LITE | いいえ | 1 / true | ライトアタッチモード |
FRIDA_ANISETTE_TIMEOUT | いいえ | 60 | 生成を中止するまでの秒数 |
*FRIDA_ANISETTE_FETCH_PY がない場合、アプリはいくつかのレガシーな兄弟パスのみを検索します。環境変数を明示的に設定してください。
オプションのアプリ設定ファイル: %AppData%\iCloudKitExtractor\anisette.json(authMode、serverUrl)。環境変数はファイルより優先されます。
$env:ANISETTE_SERVER_BACKEND = "frida"
$env:ANISETTE_SERVER_PORT = "6971"
$env:FRIDA_ANISETTE_HOST = "127.0.0.1:27042"
$env:FRIDA_ANISETTE_PROCESS = "akd"
$env:FRIDA_ANISETTE_FETCH_PY = "C:\path\to\fetch_anisette.py"
$env:FRIDA_ANISETTE_PYTHON = "python"
$env:FRIDA_ANISETTE_LITE = "1"
$env:FRIDA_ANISETTE_TIMEOUT = "60"
dotnet run --project src/AnisetteServer/AnisetteServer.csproj -c Release -- --backend frida --port 6971
CLI の --backend / --port は環境変数を上書きします。
スモークテスト:
curl http://127.0.0.1:6971/health
curl http://127.0.0.1:6971/
X-Apple-I-MD-M、com.apple.akd を含む X-MMe-Client-Info などのマシンデータを含む JSON を期待します。
$env:ANISETTE_SERVER_URL = "http://127.0.0.1:6971/"
$env:ICLOUD_AUTH_MODE = "iphone"
dotnet run --project src/iCloudKitExtractor/iCloudKitExtractor.csproj -c Release
まずデバイスに Sileo から Frida(frida-server)と OpenSSH をインストールしてください。
ルートレスの脱獄(/var/jb/...)を前提としています。root として SSH 経由で:
ls -l /var/jb/usr/sbin/frida-server
LaunchDaemon plist を再作成します(LF 改行、rootless)—エディタは不要です:
cat > /var/jb/Library/LaunchDaemons/re.frida.server.plist <<'EOF'
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>re.frida.server</string>
<key>ProgramArguments</key>
<array>
<string>/var/jb/usr/sbin/frida-server</string>
<string>-l</string>
<string>0.0.0.0:27042</string>
</array>
<key>RunAtLoad</key>
<true/>
<key>KeepAlive</key>
<true/>
<key>ThrottleInterval</key>
<integer>3</integer>
</dict>
</plist>
EOF
改行コードを正規化し、plist をバイナリに変換してから、デーモンを(再)ロードします:
tr -d '\r' < /var/jb/Library/LaunchDaemons/re.frida.server.plist > /tmp/frida.plist
mv /tmp/frida.plist /var/jb/Library/LaunchDaemons/re.frida.server.plist
plutil -convert binary1 /var/jb/Library/LaunchDaemons/re.frida.server.plist
killall frida-server 2>/dev/null
launchctl bootout system /var/jb/Library/LaunchDaemons/re.frida.server.plist 2>/dev/null
launchctl bootstrap system /var/jb/Library/LaunchDaemons/re.frida.server.plist
launchctl enable system/re.frida.server
launchctl kickstart -k system/re.frida.server
ps aux | grep '[f]rida-server'
これは frida-server を 0.0.0.0:27042(全インターフェース)にバインドし、起動時に開始して、それを維持します。PC 側からは、USB ポートフォワード(iproxy 27042 27042)後に例えば FRIDA_ANISETTE_HOST=127.0.0.1:27042 を設定するか、デバイスの LAN IP を使用します。