
Экспериментальный криминалистический набор инструментов .NET/WPF для аутентификации iCloud, загрузки резервных копий CloudKit/MMCS и восстановления Octagon/PCS (ADP, Recovery Key, Lockdown Mode). Исследовательское ПО от Forensis-Lab — крайне экспериментальное; приватные API Apple могут измениться в одночасье.
Публичная экспериментальная фаза — приложение WPF (.NET 10) для входа в iCloud, просмотра списка резервных копий устройств и загрузки через CloudKit/MMCS.

Исследовательское / лабораторное ПО. Не является готовым продуктом: недокументированные API Apple, риск блокировки аккаунта, без гарантий. Используйте только со своим собственным Apple ID и на свой страх и риск.
Меня зовут Giordano Sconti. Я сотрудничаю с криминалистической лабораторией Forensis-Lab, работаю исследователем в области программного обеспечения, а также техническим консультантом (Consulente Tecnico).
Это программное обеспечение выпущено под лицензией MIT, но принадлежит криминалистической лаборатории Forensis-Lab.
Этот проект следует считать крайне экспериментальным, поскольку внутренние API Apple могут измениться в любой момент.
Я делаю этот проект доступным, потому что он ценен для криминалистической работы, когда нам необходимо восстановить — в крайних случаях — резервные копии и данные CloudKit, которые недоступны иначе как через сами устройства.
В отличие от коммерческих инструментов, которые я использовал, мне удалось добиться стабильной и полной загрузки собственных личных резервных копий как с включённым, так и с отключённым ADP (разумеется, при знании PIN-кода Octagon устройства или Recovery Key, когда он активирован).
Это также работает при включённых защитах, таких как Lockdown Mode, и при отключённом iCloud.com.
Этот проект потребовал примерно семи месяцев исследований. Без моделей кодирующих агентов Cursor это заняло бы гораздо больше времени: единственное время, которое у меня было, — это рабочие часы, когда это было возможно, или поздняя ночь. Я старался сохранить модульную организацию кода — надеюсь, мне это удалось.
Если вы хотите угостить меня кофе, я предпочту, чтобы вы поблагодарили Forensis-Lab или предложили какую-либо иную форму признания.
Все, кто хочет попробовать программное обеспечение, предложить улучшения или помочь завершить оставшиеся функции, — добро пожаловать.
Вы можете использовать платные модели кодирующих агентов (пожалуйста, избегайте бесплатных — они часто ненадёжны в вопросах корректности кода). Важно то, что вы всегда проверяете сгенерированный код и что нет несанкционированного присвоения стороннего кода без согласия. Pull-запросы будут проверяться очень тщательно.
Контакт: [email protected]
Каждая строка кода в этом проекте принадлежит Forensis-Lab в рамках моего прямого предоставления прав. Любое использование или модификация должны оставаться атрибутированными Forensis-Lab.
Если вы хотите попробовать программное обеспечение до развёртывания собственного стека anisette, свяжитесь со мной в частном порядке, чтобы запросить доступ к моему Anisette Server.
https://giordanosconti.github.io/iCloudKitExtractor/

Разблокировка с помощью Recovery Key использует конечную точку Octagon, которая может выгрузить полный набор зашифрованных TLKShares. Из этих долей также можно восстановить те, что связаны с пирами Recovery Key (SHA-384 открытого ключа, подписывающего Recovery Key). Это позволяет проверить, входит ли данный Recovery Key в число присутствующих, и, если да, восстановить Manatee/PCS KeySet для зон CloudKit — включая резервные копии, защищённые ADP, и Keychain.
src/iCloudKitExtractorsrc/PhotosViewer (копируется в viewer-payload при сборке IKE)AnisetteServer (+ опциональные bridge-проекты) для OTP / ADIdocs/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 (или задайте 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 | URL(ы), на которых слушает AnisetteServer |
ANISETTE_SERVER_PORT | нет | 6969 | Порт, если URL не заданы |
ICLOUD_AUTH_MODE | рекомендуется | iphone (через конфиг) | Используйте iphone для полного iPhone SRP через AuthKit |
FRIDA_ANISETTE_HOST | нет | 127.0.0.1:27042 | host:port frida-server (при 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/