Introduction
Lors de l'analyse d'un appareil de test à l'aide d'un outil commercial de criminalistique mobile, je suis tombé sur quelque chose d'intrigant : une note Apple verrouillée qui n'apparaissait que comme "cachée". L'outil affichait le résumé de la note (intitulé "Lance"), mais le contenu réel était absent. Il n'y avait aucun indice sur ce qui se cachait sous le cadenas, ce qui me laissait avec une question brûlante : pouvais-je découvrir le secret à l'intérieur ? J'avais besoin d'un flux de travail qui m'aiderait à décrypter Apple Notes sous iOS 16.
L'appareil fonctionnait iOS 16.7.10Après avoir fouillé dans la base de données NoteStore.sqlite, j'ai réalisé que tous les indices de cryptage étaient là, attendant d'être décodés. Avec l'aide d'outils open-source, j'ai entrepris de récupérer le mot de passe et de décrypter le contenu de la note.
Ce billet vous guide à travers les flux de travail médico-légal complet sur la façon de décrypter Apple Notes sur iOS 16 :
- 🔓 Hashcat pour craquer un mot de passe
- 🗄️ DB Browser pour SQLite pour explorer et extraire les paramètres de cryptage
- 🐍 Scripts Python pour la dérivation des clés et le dévoilement des clés AES
- 🔍 CyberChef pour décrypter, décompresser et analyser la charge utile finale du protobuf
⚠️ Remarque importante : Ce flux de travail s'applique spécifiquement aux Apple Notes verrouillées sur iOS 16.x. À partir d'iOS 17, Apple a modifié la façon dont les notes chiffrées sont stockées, et iOS 18 apporte encore d'autres changements.
Plongeons dans l'histoire et révélons le message caché à l'intérieur de cette note Apple verrouillée.
Fouiller dans le fichier NoteStore.sqlite
À ce stade, je savais que le contenu de la note cryptée était stocké dans NoteStore.sqlite, plus précisément dans la table ZICNOTEDATA. Apple gzips les données du protobuf de la note, mais dans le cas de notes verrouillées, l'ensemble du BLOB est d'abord crypté-ce qui signifie qu'une tentative de décompression directe ne permettra pas d'obtenir un texte lisible. Vous aurez besoin de l'outil la bonne clé de décryptage avant de pouvoir décompresser ou analyser les fichiers protobuf.
Dans la capture d'écran, vous pouvez voir les valeurs hexadécimales brutes pour ZDATA. Ces données sont effectivement brouillées par Cryptage AESLes métadonnées essentielles, telles que les sels et le nombre d'itérations, sont sauvegardées dans d'autres parties de la base de données. D'un de l'examinateur médico-légal En reconnaissant que la note est entièrement cryptée, vous devez vous plonger dans la table ZICCLOUDSYNCINGOBJECT pour y trouver les paramètres nécessaires à la mise en œuvre de l'algorithme de cryptage. fissure le code d'accès et déverrouiller la note 🔓.
Pourquoi les notes Apple verrouillées sont-elles cryptées sous iOS 16 ?
Apple Notes sécurise les notes verrouillées à l'aide d'une combinaison de PBKDF2 (dérivation de clés) et AES (chiffrement). Lorsqu'un mot de passe est activé sur une note, Apple stocke des métadonnées cryptographiques clés dans la base de données, telles que :
- ZCRYPTOITERATIONCOUNT
- ZCRYPTOSALT
- ZCRYPTOWRAPPEDKEY
Ces valeurs garantissent que seule une personne possédant le bon code d'accès peut décrypter le contenu de la note.
Approche médico-légale
D'un point de vue médico-légal, les étapes à suivre sont généralement les suivantes :
- Identifier les entrées de notes verrouillées pertinentes dans ZICNOTEDATA et ZICCLOUDSYNCINGOBJECT.
- Extrait les détails cryptographiques, tels que le nombre d'itérations, le sel et la clé enveloppée.
- Fissure le mot de passe de l'utilisateur avec Hashcat (ou un autre outil de récupération de mot de passe comme John the Ripper ou Passware).
- Dériver les clés finales dans Python ou CyberChef et décrypter le BLOB de la note.
- Décompresser les données déverrouillées du protobuf (avec CyberChef ou Python) pour révéler le texte en clair final.
Craquer le mot de passe de l'Apple Note verrouillé avec Hashcat
Mon objectif était de simuler un scénario médico-légal réaliste : j'avais un Apple Note verrouillé et j'avais besoin de récupérer son code d'accès pour décrypter le contenu. C'est là que le Hashcat entre en jeu. En s'appuyant sur le mode de hachage Apple Secure Notes (ID 16200), Hashcat tente systématiquement des mots de passe jusqu'à ce qu'il trouve le bon.
Extraction des colonnes requises
J'ai commencé par ouvrir NoteStore.sqlite dans DB Browser et j'ai ciblé les lignes avec ZISPASSWORDPROTECTED = 1 dans la table ZICCLOUDSYNCINGOBJECT. J'ai ensuite interrogé les colonnes suivantes :
- Z_PK - l'identifiant unique de la note.
- ZCRYPTOSALT - la valeur du sel pour PBKDF2.
- ZCRYPTOWRAPPEDKEY - la clé enveloppée qui sera déballée ultérieurement.
Le fichier d'entrée Hashcat a été généré par un petit script Python notes_to_hashcat.pyqui formatait ces valeurs en une seule ligne que Hashcat pouvait analyser, y compris le nombre d'itérations (de ZCRYPTOITERATIONCOUNT).
Exécuter Hashcat pour décrypter le mot de passe de l'Apple Note verrouillé
Mon fichier d'entrée Hashcat étant prêt et un dictionnaire à portée de main, j'ai exécuté la commande suivante :
hashcat -m 16200 -a 0
Ici :
- -m 16200 spécifie le mode Apple Secure Notes.
- -a 0 met Hashcat en mode d'attaque directe (dictionnaire).
- Le dictionnaire peut être quelque chose comme rockyou.txt ou une liste personnalisée dérivée d'artefacts de l'appareil.
Hashcat a identifié avec succès le mot de passe correct : royalewithcheese. Lors d'une enquête réelle, votre dictionnaire pourrait être beaucoup plus important, mais ce résultat a confirmé que Hashcat pouvait s'acquitter des tâches les plus lourdes.
Dérivation de la clé de chiffrement (KEK) pour décrypter Apple Notes
Avec le mot de passe en main, l'étape suivante a consisté à dériver le Clé de chiffrement (KEK)qui est utilisée pour envelopper la clé AES finale qui crypte le contenu de la note. Pour dériver la KEK, j'ai eu besoin des valeurs suivantes de la table ZICCLOUDSYNCINGOBJECT :
- Phrase de passe (le mot de passe craqué)
- Nombre d'itérations (ZCRYPTOITERATIONCOUNT)
- Sel (ZCRYPTOSALT)
Par exemple, en utilisant DB Browser, j'ai fait une requête :
SELECT ZCRYPTOITERATIONCOUNT, ZCRYPTOSALT FROM ZICCLOUDSYNCINGOBJECT WHERE Z_PK = ;
Ensuite, j'ai ouvert CyberChef - un de mes outils préférés 🛠️ - et j'ai fait glisser l'opération "Derive PBKDF2 key". En réglant la fonction de hachage sur SHA-256 et en saisissant le mot de passe, le sel et le nombre d'itérations, CyberChef a produit le fichier KEK 16 octets:
Pour automatiser ce processus, j'ai créé un script Python appelé get_key.pyqui accepte le chemin de la base de données, la note PK et le mot de passe comme arguments. Son exécution renvoie la KEK en hexadécimal.
python get_kek.py NoteStore.sqlite
Résultat :
Note PK=16 : KEK (hex) = a1dac1516302e1d3d73ad4fd4b6f8fef
Dévoiler la clé AES pour décrypter les notes Apple verrouillées sous iOS 16
L'étape suivante consistait à déballer la clé utilisée pour crypter le contenu de la note. La clé enveloppée est stockée dans la colonne ZCRYPTOWRAPPEDKEY de ZICCLOUDSYNCINGOBJECT. Par exemple, j'ai interrogé: :
SELECT ZCRYPTOWRAPPEDKEY FROM ZICCLOUDSYNCINGOBJECT WHERE Z_PK = 16 ;
Options de déballage
Option 1 : Dévoiler la clé AES pour décrypter les Apple Notes verrouillées sur iOS 16 avec CyberChef
J'ai désactivé toutes les opérations précédentes, j'ai recherché "AES Key Unwrap" et je l'ai fait glisser dans la fenêtre de recette. En collant la KEK et la clé enveloppée, CyberChef a produit la clé AES non enveloppée.
Option 2 : Automatiser l'extraction de la clé AES avec unwrap.py
J'ai également développé un script Python appelé unwrap.py qui prend le chemin d'accès à la base de données et la clé (en hexadécimal) comme arguments. L'exécution de ce script a permis de déballer la clé et de l'imprimer au format hexadécimal. Dans mon cas, la clé décompressée était la suivante :
python unwrap.py NoteStore.sqlite
Il s'agit de la clé AES finale qui sera utilisée pour décrypter le contenu de la note Apple verrouillée.
Décryptage des BLOB d'Apple Notes à l'aide d'AES-GCM sur iOS 16
Maintenant que j'ai la clé décodée, il est temps de décrypter le BLOB Apple Notes stocké dans le fichier ZICNOTEDATA table. Apple utilise AES en mode GCM pour protéger le contenu des notes verrouillées, ce qui signifie que j'avais besoin de quatre composants essentiels pour procéder :
🔑 Clé AES non enveloppée
🔁 Vecteur d'initialisation (IV) de
ZCRYPTOINITIALIZATIONVECTOR🏷 Étiquette d'authentification GCM de
ZCRYPTOTAG💾 BLOB crypté de
ZDATA
📤 Extraction de l'IV et de l'étiquette GCM de NoteStore.sqlite
Pour localiser le IV et Étiquette GCMJ'ai ouvert le ZICNOTEDATA dans DB Browser for SQLite. Ces champs sont stockés sous forme de valeurs binaires et peuvent être trouvés soit dans le champ ZICNOTEDATA ou ZICCLOUDSYNCINGOBJECT tables. Toutes deux stockent les données sous les mêmes noms de colonnes.
IV:
5c0c0bde9b6801747ddad1115a422d05Tag GCM:
b9087ba19e3c7deff2cb4b9b51e6aafa
Le BLOB crypté lui-même était également visible dans le fichier ZDATA colonne. J'ai copié les trois valeurs au format hexadécimal, me préparant ainsi à l'étape finale du décryptage.
🧪 Décrypter la note avec CyberChef
Une fois tout cela en main, je me suis tourné vers CyberChef. Cet outil a permis de combiner facilement tous les paramètres et de révéler le contenu original. Voici ce que j'ai fait :
J'ai ajouté le "Décryptage AES opération.
J'ai collé le clé AES non enveloppée dans le champ Clé.
J'ai fixé le mode à GCM.
J'ai inséré le IV et GCM Tag dans leurs domaines respectifs.
Enfin, j'ai copié le BLOB crypté dans la fenêtre de saisie.
Décompression et analyse de la note finale (Protobuf décrypté à partir d'Apple Notes)
Après avoir décrypté le BLOB chiffré par AES, j'ai enregistré le résultat dans un fichier nommé decrypted_blob.bin et l'a ouvert en HxD. La signature du fichier 0x1F8B08 a confirmé qu'il s'agissait d'un fichier compressé au format GZIP - Apple utilise ce format pour compresser les données protobuf.
Pour extraire le texte en clair, j'ai rouvert CyberChef et ajouté le fichier Gunzip dans le flux de travail. Immédiatement, des chaînes familières ont commencé à apparaître dans les résultats.
Une fois décompressé, j'ai appliqué Protobuf Decode dans CyberChef. Le résultat est une vue structurée ressemblant à JSON, avec des clés et des valeurs représentant le contenu de la note Apple verrouillée.
Pour faciliter la lecture, j'ai également utilisé un script Python qui s'appuie sur la fonction backboxprotobuf pour analyser le fichier protobuf et imprimer la sortie dans un format propre et lisible par l'homme.
Cela correspond à ce que l'utilisateur a tapé dans son Apple Note verrouillé. Vous êtes passé d'une entrée cachée et protégée par un mot de passe à un message en clair, ce qui constitue une découverte inestimable dans le cadre d'une enquête judiciaire.
🔚 Wrapping Up
Félicitations 🎉 - vous venez d'achever un flux de travail médico-légal complet pour décrypter les Apple Notes verrouillées sous iOS 16. Vous avez extrait les paramètres de cryptage de la base de données SQLite, craqué le mot de passe avec Hashcata dérivé et déballé la clé AES à l'aide de Pythonet enfin décrypté et analysé le protobuf avec CyberChef. Chaque étape vous a rapproché de la découverte du contenu caché de la note.
Cette démonstration pratique prouve la puissance de l'outil. les outils open-source peut l'être dans le domaine de la criminalistique numérique. Ils aident les enquêteurs à découvrir des Apple Notes cryptées que les outils commerciaux risquent de ne pas voir, en particulier sur les appareils fonctionnant sous le système d'exploitation iOS 16 ou antérieur.
🕵️ Bonus : L'indice du mot de passe
Voici un petit plus : j'ai trouvé une indice de mot de passe dans le ZICCLOUDSYNCINGOBJECT table :
Quart de livre
Comme l'appareil appartenait à un certain "Vincent", il n'a pas été difficile de deviner le mot de passe : royalwithcheese - un clin d'œil à Pulp Fiction. Dans les cas réels, les indices de mots de passe de ce type peuvent accélérer le flux de travail lorsqu'ils sont combinés à un processus de craquage stratégique.
📱 Encore une chose... à propos d'iOS 17 et iOS 18
Ce guide s'applique spécifiquement à la manière de décrypter Notes d'Apple sur iOS 16 et les versions antérieures. En commençant par iOS 17Lors du lancement de la nouvelle version de Notes, Apple a apporté des modifications importantes au processus de cryptage de Notes. Vous pouvez rencontrer des champs de dérivation de clé manquants, des structures cryptographiques différentes ou des notes qui ne se déchiffrent plus avec les mêmes méthodes.
Si vous cherchez à savoir comment décrypter Apple Notes sur iOS 17 ou iOS 18J'aimerais beaucoup collaborer avec vous. Faites-nous part de vos découvertes - analysons ensemble le nouveau cryptage.






10 réponses
Thank you very much for the research and for sharing it in this post. As a forensic investigator, having access to all this knowledge has been incredibly helpful.
I’m starting to look into what changes have been implemented in versions > iOS 16 and macOS 13, since, as you mentioned, there definitely are some changes.
I’d love it if we could share research findings or if you’ve already made some progress on this topic.
Nice post – I have not gone past extracting the password for the pre 17 notes.
I have been looking at the newer versions – again only with a mind to obtaining the password, happy to get engaged in the newer versions -I am finding iterations, salts and wrapped keys – but multiple versions (differing lengths)and I am not having success with the next stages.