
Boîte à outils forensique expérimentale .NET/WPF pour l'authentification iCloud, le téléchargement de sauvegardes CloudKit/MMCS et la récupération Octagon/PCS (ADP, Recovery Key, Lockdown Mode). Logiciel de recherche par Forensis-Lab — hautement expérimental ; les API privées d'Apple peuvent changer du jour au lendemain.
Phase expérimentale publique — une application WPF (.NET 10) pour la connexion à iCloud, le listage des sauvegardes d'appareils et le téléchargement via CloudKit/MMCS.

Logiciel de recherche / laboratoire. Pas un produit fini : API Apple non documentées, risque de bannissement de compte, aucune garantie. À utiliser uniquement avec votre propre Apple ID et à vos propres risques.
Je m'appelle Giordano Sconti. Je collabore avec le laboratoire forensique Forensis-Lab, et je travaille comme chercheur en logiciels ainsi que comme consultant technique (Consulente Tecnico).
Ce logiciel est publié sous licence MIT, mais il appartient au laboratoire forensique Forensis-Lab.
Ce projet doit être considéré comme hautement expérimental, car les API internes d'Apple peuvent changer du jour au lendemain.
Je rends ce projet disponible car il est précieux pour le travail forensique lorsqu'il faut récupérer — dans des cas extrêmes — des sauvegardes et des données CloudKit qui ne sont accessibles que par l'intermédiaire des appareils eux-mêmes.
Contrairement aux outils commerciaux que j'ai utilisés, j'ai obtenu un téléchargement stable et complet de mes propres sauvegardes personnelles, à la fois avec ADP activé et désactivé (en connaissant bien sûr le code PIN Octagon de l'appareil ou la Recovery Key lorsqu'elle est activée).
Cela fonctionne également lorsque des protections telles que le Mode Isolement (Lockdown Mode) sont activées et que iCloud.com est désactivé.
Ce projet a nécessité environ sept mois de recherche. Sans les modèles d'agents de codage Cursor, cela aurait pris bien plus de temps : le seul temps dont je disposais était pendant les heures de travail lorsque c'était possible, ou tard dans la nuit. J'ai essayé de maintenir une organisation du code modulaire — j'espère y être parvenu.
Si vous souhaitez m'offrir un café, je préférerais que vous remerciiez Forensis-Lab ou que vous proposiez une autre forme de reconnaissance à la place.
Toute personne souhaitant essayer le logiciel, suggérer des améliorations ou aider à terminer les fonctionnalités restantes est la bienvenue.
Vous pouvez utiliser des modèles d'agents de codage payants (veuillez éviter les gratuits — ils sont souvent peu fiables pour la correction du code). Ce qui compte, c'est que vous relisiez toujours le code généré et qu'il n'y ait aucune appropriation non autorisée de code tiers sans consentement. Les pull requests seront examinées très attentivement.
Contact : [email protected]
Chaque ligne de code de ce projet appartient à Forensis-Lab, sous ma concession directe. Toute utilisation ou modification doit rester attribuable à Forensis-Lab.
Si vous souhaitez essayer le logiciel avant de déployer votre propre pile anisette, contactez-moi en privé pour demander l'accès à mon serveur Anisette.
https://giordanosconti.github.io/iCloudKitExtractor/

Le déverrouillage par Recovery Key utilise un endpoint Octagon capable d'extraire l'ensemble complet des TLKShares chiffrés. À partir de ces partages, il est également possible de récupérer ceux associés aux pairs Recovery Key (SHA-384 de la clé publique qui signe la Recovery Key). Cela permet de vérifier si une Recovery Key donnée figure parmi celles présentes et, le cas échéant, de récupérer le KeySet Manatee/PCS pour les zones CloudKit — y compris les sauvegardes protégées par ADP et le Trousseau (Keychain).
src/iCloudKitExtractorsrc/PhotosViewer (copiée dans viewer-payload lors des builds IKE)AnisetteServer (+ projets de pont optionnels) pour OTP / ADIdocs/dotnet build src/iCloudKitExtractor/iCloudKitExtractor.csproj -c Release
dotnet run --project src/iCloudKitExtractor/iCloudKitExtractor.csproj -c Release
Un site de projet se trouve sous docs/ (index.html + site.css).
main vers GitHub.main / dossier : /docs.https://giordanosconti.github.io/iCloudKitExtractor/.Chemin privilégié pour une identité iPhone/akd cohérente : l'OTP est généré sur l'appareil via Frida → AuthKit/akd, puis servi par AnisetteServer.
pip install frida-tools)python (ou définir FRIDA_ANISETTE_PYTHON)fetch_anisette.py (script d'attachement Frida). Définissez son chemin avec FRIDA_ANISETTE_FETCH_PYÉtapes d'installation du jailbreak : voir Preparing a jailbroken iPhone ci-dessous (détails à venir).
| Variable | Requis | Par défaut | Signification |
|---|---|---|---|
ANISETTE_SERVER_BACKEND | oui | coreadi | Doit être frida (alias : iphone-frida, jb-frida) |
ANISETTE_SERVER_URL / ANISETTE_SERVER_URLS | non | http://127.0.0.1:6969 | URL(s) où AnisetteServer écoute |
ANISETTE_SERVER_PORT | non | 6969 | Port si les URL ne sont pas définies |
ICLOUD_AUTH_MODE | recommandé | iphone (via config) | Utilisez iphone pour le SRP iPhone complet d'AuthKit |
FRIDA_ANISETTE_HOST | non | 127.0.0.1:27042 | hôte:port de frida-server (USB souvent via iproxy 27042 27042) |
FRIDA_ANISETTE_PROCESS | non | akd | Processus auquel s'attacher |
FRIDA_ANISETTE_FETCH_PY | oui* | chemin heuristique | Chemin absolu vers fetch_anisette.py |
FRIDA_ANISETTE_PYTHON | non | python | Exécutable Python |
FRIDA_ANISETTE_LITE | non | 1 / true | Mode d'attachement léger |
FRIDA_ANISETTE_TIMEOUT | non | 60 | Secondes avant l'abandon d'une génération |
*Sans FRIDA_ANISETTE_FETCH_PY, l'application ne recherche que quelques anciens chemins voisins ; définissez explicitement la variable d'environnement.
Fichier de configuration facultatif de l'application : %AppData%\iCloudKitExtractor\anisette.json (authMode, serverUrl). Les variables d'environnement ont priorité sur le fichier.
$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"