Nous employons de nombreuses techniques pour aider les gens à récupérer leurs données avec nos produits, et une bonne partie de l’ingéniosité que nous avons développée au cours de la dernière décennie se cache sous la surface. Aujourd’hui, nous allons plonger dans l’une des approches que nous utilisons pour récupérer des messages supprimés : la récupération forensique de données SQLite.
Au fait, comment les iPhone stockent-ils les données ?
En bref, de nombreuses apps stockent leurs données dans des bases de données, et la plupart utilisent le format SQLite. SQLite est un petit format de base de données sans serveur, bien pensé, qui convient parfaitement aux besoins d’Apple et des éditeurs d’apps. Comme SQLite fonctionne sans serveur de base de données distinct, il diffère des autres bases de données sur plusieurs points. En particulier, pour que l’accès reste rapide, il ne peut pas se maintenir régulièrement pendant son utilisation. Les utilisateurs ne veulent pas qu’une app ralentisse pendant que la base de données effectue une maintenance de routine, comme le nettoyage des index, par exemple.
Ces opérations de nettoyage ou d’optimisation sont possibles avec SQLite, mais elles sont généralement exécutées rarement. Pour les utilisateurs, c’est le bon équilibre : votre iPhone reste raisonnablement rapide et vos données restent robustes. Et, si le besoin s’en fait sentir, vous aurez de meilleures chances que la moyenne de récupérer vos données iOS supprimées, justement parce que cette maintenance est peu fréquente.
Sans entrer dans les détails techniques, le fonctionnement est assez simple. Imaginez ces bases de données comme de grands classeurs :
- Quand il faut y ajouter des informations, vous ajoutez un dossier avec une belle étiquette qui explique ce qu’il contient, et c’est ainsi que fonctionne votre téléphone.
- Mais quand vous supprimez des données, au lieu de retirer le dossier du classeur, le téléphone se contente d’arracher l’étiquette. Les anciennes données ne sont donc pas supprimées : elles sont simplement laissées sans étiquette (ou « orphelines », comme nous pourrions dire techniquement). Ainsi, lorsque vous supprimez des données, votre téléphone n’a pas à passer par le processus relativement lent qui consiste à libérer de la place dans le classeur. Il se dit simplement « bon, oublions ça », et passe à autre chose.
- Lorsqu’il faut ajouter d’autres données, s’il y a de la place, votre téléphone ajoute de nouveaux dossiers. S’il n’y en a plus, il cherche s’il reste de ces dossiers sans étiquette, et s’il en trouve, il jette les parties dont il a besoin pour faire de la place.
Il faut en retenir qu’il est rapide de supprimer des données sur votre téléphone, et assez rapide d’en ajouter, à condition qu’il y ait de la place. Et, de façon contre-intuitive, c’est l’ajout de données plus récentes qui entraîne réellement la disparition des informations plus anciennes.
Récupérer des informations supprimées de SQLite sur iOS
Supposons que vous utilisiez votre téléphone depuis quelques mois. Les bases de données qu’il contient ressemblent aux classeurs décrits plus haut. Elles renferment un tas de dossiers, et là où vous avez supprimé des données, ces dossiers sont toujours là, avec deux réserves : ils peuvent avoir été partiellement ou totalement écrasés, et ils n’ont pas d’étiquette.
La technique de récupération est alors à peu près celle que l’on imagine : il s’agit de retrouver ces dossiers orphelins, complets ou non, de déterminer où ils s’insèrent et s’il reste assez de données pour qu’ils aient du sens. Comme on peut s’y attendre, tout cela est assez délicat, et diverses autres subtilités techniques peuvent compliquer les choses. En particulier, les bases de données de plus de quelques mégaoctets, et celles qui contiennent des données binaires, peuvent rendre le processus bien plus difficile.
Cela dit, il n’est pas très difficile de récupérer une partie des données, ce qui explique le grand nombre d’outils du marché qui prétendent y parvenir. En général, on peut répartir ces outils en trois catégories :
- Les bons. Ils emploient de nombreuses techniques différentes, conçues et testées sur des milliers d’exemples de suppression ou de corruption.
- Les mauvais. Ils ne récupèrent que le contenu restant qui est parfaitement formé et comporte plusieurs indices sur son emplacement d’origine.
- Les brutes. Ils recherchent du contenu orphelin et signalent tout vieux rebut qui pourrait vaguement convenir au contexte, à condition de plisser les yeux. « NSMutableArray » : serait-ce le nom de votre fiche de contact manquante ? Hmmm.
Annulation de suppression et récupération SQLite sur iOS en conditions réelles
Maintenant que nous avons un peu parlé du fonctionnement, voyons son efficacité en conditions réelles. Après tout, nous voulons permettre aux utilisateurs ordinaires de récupérer leurs données sans être des experts. Y parvenons-nous ? Nous allons comparer les quatre principaux outils de récupération SQLite à iPhone Backup Extractor. Au moment de la rédaction, les dernières versions de ces outils sont les suivantes :
| Nom | Version et date de sortie | Plateformes | Prix |
|---|---|---|---|
| Reincubate iPhone Backup Extractor | 7.6.1.2201, mai ’18 | Windows et macOS | $34.95 |
| SQLite Doctor de SQLabs | 1.3.0, août ’13 | Windows et macOS | $49 |
| Sqlite Database Recovery de SysTools | 1.2, date de sortie non indiquée | Windows uniquement | $149 |
| Stellar Phoenic Repair For Sqlite de Stellar Data Recovery 1.0, date de sortie non indiquée | Windows uniquement | $599 | |
| Forensic Explorer (FEX) de GetData | 4.3.5.7364, mai ’18 | Windows uniquement | $1,695 |
| Sqlite Forensics Explorer d’Acquire Forensics | 2.0, date de sortie non indiquée | Windows uniquement | $149 |
Pour mettre en place ce test, nous allons utiliser une belle grande base de données, remplie de données réelles. Il s’agit ici d’une base « Messages » de 169 Mo, extraite d’un iPhone sous iOS 11. Examinons-la : les commandes suivantes affichent sa taille et le résultat d’une requête qui compte le nombre de messages qu’elle contient.
$ ls -l sms.db
-rw------- 1 afitzpatrick 177565696 Oct 2 2017 sms.db
$ sqlite3 sms.db
SQLite version 3.19.3 2017-06-27 16:48:08
Enter ".help" for usage hints.
sqlite> SELECT COUNT(*) FROM message;
220261
Il y a donc plus de 220 000 messages. Ce sont ceux qui n’ont pas été supprimés. Mais combien de messages supprimés les outils de récupération peuvent-ils retrouver ?
Récupération de données SQLite sur iOS : les résultats
Nous avons exécuté tous les outils ci-dessus sur le même fichier et noté les résultats dans le tableau ci-dessous. Nous aurions adoré utiliser un Mac, mais comme tous les outils ne prennent pas en charge macOS, nous avons utilisé un PC avec 16 Go de RAM sous Windows 10 Pro (version 1803, build 17134.48).
| Reincubate | Acquire Forensics | SQLabs | SysTools | Stellar Data Recovery | GetData | |
|---|---|---|---|---|---|---|
| Nombre récupéré | 342 | 56 (mais surtout des déchets) | 0 | 0 (Après une longue analyse, il a trouvé 220 261 enregistrements, soit exactement le nombre d’enregistrements valides déjà présents !) | 0 (À chaque exécution, il a compté jusqu’à 37 messages supprimés, mais a planté avec l’erreur 0x40000015 avant la fin du processus. Il n’a pas été possible d’en exporter ni d’en enregistrer.) | 0 (We reached out multiple times to purchase a license, but never heard back.) |
| « Déchets » récupérés ? | Aucun ; tous semblent être de véritables messages supprimés. Les emojis, dates, heures et numéros d’expéditeur / de destinataire sont tous récupérés. | La plupart des éléments récupérés sont des déchets | Nous avons dû saisir manuellement les valeurs maximales de ROWID à plusieurs reprises pour essayer différents paramètres. Aucun message récupéré, à aucun moment. | N’a trouvé que des messages déjà existants. | A planté à chaque fois, impossible de conclure. | Wasn’t possible to get it running. |
| Coût effectif par message récupéré (dans cet exemple) | $0.10 | $2.66 | >$49 | >$149 | >$599 | >$1,695 |
OK. C’était donc une petite surprise, car nous nous attendions à ce qu’ils récupèrent tous au moins quelques données. Il s’avère que notre modeste outil est en tête du marché de la récupération de données SQLite, alors qu’il n’est pas un outil dédié à cela. (Si vous vous le demandiez, c’est aussi pourquoi nous concédons notre technologie sous licence à d’autres entreprises. C’est un domaine difficile.)
Récupération de données SQLite selon les versions d’iOS
À chaque nouvelle version d’iOS, Apple peut modifier la façon dont le système d’exploitation gère les bases de données SQLite. Cela inclut des optimisations de la fréquence des opérations de nettoyage et de maintenance, et de leurs déclencheurs.
À mesure que les appareils gagnent en puissance, ces opérations peuvent être utilisées plus librement, car leur impact sur l’expérience utilisateur diminue. Ainsi, à chaque nouvelle génération, une base de données SQLite a de fortes chances d’être nettoyée plus souvent, ce qui la rend plus rapide pour les opérations courantes. Cela rejoint l’objectif d’Apple de renforcer la protection et la confidentialité des données des utilisateurs, puisqu’aucune donnée indésirable ne reste sur l’appareil. Mais cela a pour contrepartie de rendre impossible la récupération de données par la méthode SQLite.
Dans iOS 11, nous avons commencé à observer une hausse de l’activité de nettoyage des bases de données pour les SMS et les iMessages. La récupération reste possible, et plus probable pour les messages récents supprimés par la suite, mais elle n’est pas garantie.
Dans iOS 12, la fréquence de nettoyage de la base de données des SMS et des iMessages a fortement augmenté. Comme cette version a été présentée comme très axée sur la maintenance et l’amélioration de la vitesse, ce changement est logique, car il se traduira probablement par des performances plus fluides pour les opérations les plus courantes.
Que dois-je faire pour en profiter lors de la récupération de données iOS ?
C’est peut-être le meilleur : cette technologie est intégrée à Reincubate iPhone Backup Extractor, et ce depuis les débuts. Lorsque vous utilisez l’app, elle applique cette technologie pour afficher l’aperçu ou exporter vos messages et plusieurs autres types de données. Selon les données que vous consultez et la façon dont vous les consultez, l’app indique quels éléments ont été récupérés après suppression et lesquels ne l’ont pas été. Tout est inclus.






