We gebruiken veel technieken om mensen met onze producten te helpen hun gegevens terug te krijgen, en veel van de vernuftigheid die we de afgelopen tien jaar hebben ingebouwd, zit onder de oppervlakte. Vandaag duiken we in een van de methoden die we gebruiken om verwijderde berichten te herstellen: forensisch herstel van SQLite-gegevens.
Hoe slaan iPhones eigenlijk gegevens op?
Kort gezegd slaan veel apps hun gegevens op in databases, en de meeste gebruiken daarvoor het SQLite-formaat. SQLite is een handig klein databaseformaat zonder server en past goed bij wat Apple en app-ontwikkelaars nodig hebben. Omdat SQLite draait zonder aparte databaseserver, verschilt het op een paar punten van andere databases. Om snel te blijven kan het zichzelf bijvoorbeeld niet regelmatig onderhouden terwijl het in gebruik is. Gebruikers willen niet dat een app trager wordt omdat de database routineonderhoud uitvoert, zoals het opruimen van indexen.
Zulke opschoon- of optimalisatiebewerkingen kunnen met SQLite wel plaatsvinden, maar ze worden meestal zelden uitgevoerd. Voor gebruikers is dat de juiste balans: je iPhone blijft redelijk snel en je gegevens blijven robuust. En als het nodig is, heb je betere kansen dan gemiddeld om verwijderde iOS-gegevens te herstellen, juist doordat dit onderhoud zo zelden plaatsvindt.
Zonder al te technisch te worden: het proces is vrij eenvoudig. Zie deze databases als grote archiefkasten:
- Wanneer er informatie aan wordt toegevoegd, leg je er een map in met een net label erop waarop staat wat erin zit. Zo werkt je telefoon.
- Maar als je gegevens verwijdert, haalt de telefoon niet de map uit de kast, maar trekt hij alleen het label eraf. De oude gegevens worden dus niet verwijderd, ze blijven gewoon zonder label achter (of “verweesd”, zoals wij technisch zouden zeggen). Dat betekent dat je telefoon bij het verwijderen van gegevens geen relatief traag proces hoeft te doorlopen om ruimte in de kast vrij te maken. Hij zegt gewoon “hm, vergeet dit maar” en gaat verder.
- Als er meer gegevens bij moeten, voegt je telefoon extra mappen toe zolang er ruimte is. Is er geen ruimte meer, dan kijkt hij of er nog van die mappen zonder label rondslingeren, en zo ja, dan gooit hij daar weg wat hij nodig heeft om ruimte te maken.
Daaruit kun je opmaken dat het snel gaat om gegevens op je telefoon te verwijderen, en ook vrij snel om ze toe te voegen, mits er ruimte is. En, tegen de intuïtie in, het toevoegen van nieuwere gegevens zorgt er juist voor dat oudere informatie verdwijnt.
Verwijderde informatie herstellen uit SQLite op iOS
Stel dat je je telefoon al een paar maanden gebruikt. De databases erop zijn als de archiefkasten die we eerder beschreven. Er zitten een heleboel mappen in, en waar je gegevens hebt verwijderd, zijn die mappen er nog steeds, maar met twee kanttekeningen: ze kunnen gedeeltelijk of volledig zijn overschreven, en ze hebben geen label.
De herstelmethode is dan ongeveer wat je verwacht: je zoekt deze verweesde mappen, compleet of niet, en probeert uit te zoeken waar ze thuishoren en of er genoeg gegevens over zijn om ze betekenis te geven. Zoals je zou verwachten is het allemaal nogal priegelwerk, en er kunnen allerlei andere technische hobbels opduiken die het lastig maken. Vooral databases van meer dan een paar megabyte en databases met binaire gegevens maken het proces een stuk moeilijker.
Toch is het niet zo moeilijk om wat gegevens terug te krijgen, en daarom zie je op de markt een flink aantal tools die beweren dit te kunnen. Over het algemeen kun je deze tools in drie categorieën verdelen:
- De goeden. Ze gebruiken veel verschillende technieken die zijn ontwikkeld en getest aan de hand van duizenden verschillende voorbeelden van verwijdering of beschadiging.
- De slechten. Ze herstellen alleen de overgebleven inhoud die perfect gevormd is en een aantal aanwijzingen bevat over waar die thuishoort.
- De lelijken. Die scannen op verweesde inhoud en markeren alle oude rommel die in de context zou kunnen passen. Als je ernaar kijkt met half dichtgeknepen ogen. “NSMutableArray”: zou dat de naam van je ontbrekende contactrecord kunnen zijn? Hmmm.
SQLite-herstel van verwijderde gegevens uit iOS in de praktijk
Nu we een beetje hebben besproken hoe dit werkt, gaan we kijken hoe effectief het in de praktijk is. We willen er tenslotte voor zorgen dat gewone gebruikers hun gegevens terugkrijgen zonder expert te hoeven zijn. Lukt ons dat? We vergelijken de vier toonaangevende SQLite-hersteltools met iPhone Backup Extractor. Op het moment van schrijven zijn dit de nieuwste versies van die tools:
| Naam | Versie en releasedatum | Platformen | Prijs |
|---|---|---|---|
| Reincubate iPhone Backup Extractor | 7.6.1.2201, mei ’18 | Windows en macOS | $34.95 |
| SQLite Doctor van SQLabs | 1.3.0, aug. ’13 | Windows en macOS | $49 |
| Sqlite Database Recovery van SysTools | 1.2, geen releasedatum vermeld | Alleen Windows | $149 |
| Stellar Phoenic Repair For Sqlite van Stellar Data Recovery 1.0, geen releasedatum vermeld | Alleen Windows | $599 | |
| Forensic Explorer (FEX) van GetData | 4.3.5.7364, mei ’18 | Alleen Windows | $1,695 |
| Sqlite Forensics Explorer van Acquire Forensics | 2.0, geen releasedatum vermeld | Alleen Windows | $149 |
Voor deze test gebruiken we een mooie grote database vol gegevens uit de echte wereld. In dit geval is het een “Messages”-database van 169 MB, afkomstig van een iPhone met iOS 11. Laten we er eens naar kijken: de volgende opdrachten tonen de bestandsgrootte en het resultaat van een query die telt hoeveel berichten erin staan.
$ 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
Er zijn dus meer dan 220.000 berichten. Dat zijn de berichten die niet zijn verwijderd. Maar hoeveel van de verwijderde berichten kunnen de hersteltools vinden?
SQLite-gegevensherstel uit iOS: de resultaten
We hebben alle bovenstaande tools op hetzelfde bestand uitgevoerd en de resultaten in de onderstaande tabel genoteerd. We hadden graag een Mac gebruikt, maar omdat niet alle tools macOS ondersteunen, gebruikten we een pc met 16 GB RAM waarop Windows 10 Pro draaide (versie 1803, build 17134.48).
| Reincubate | Acquire Forensics | SQLabs | SysTools | Stellar Data Recovery | GetData | |
|---|---|---|---|---|---|---|
| Aantal hersteld | 342 | 56 (maar vooral rommel) | 0 | 0 (Na een lange scan vond het er 220.261, precies evenveel als het aantal geldige records dat er al was!) | 0 (Bij elke run telde het tot 37 verwijderde berichten, maar het crashte met foutcode 0x40000015 voordat het klaar was. Exporteren of opslaan was niet mogelijk.) | 0 (We reached out multiple times to purchase a license, but never heard back.) |
| “Rommel” hersteld? | Geen; alles lijkt geldige, niet-verwijderde berichten te zijn. Emoji, datums, tijden en nummers van afzender en ontvanger zijn allemaal hersteld. | Het merendeel van wat is hersteld is rommel | We moesten een paar keer handmatig maximale ROWID-waarden invoeren om andere parameters uit te proberen. Er is op geen enkel moment iets hersteld. | Vond alleen bestaande berichten. | Crashte elke keer, dus we kunnen er niets over zeggen. | Wasn’t possible to get it running. |
| Effectieve kosten per hersteld bericht (in dit voorbeeld) | $0.10 | $2.66 | >$49 | >$149 | >$599 | >$1,695 |
Oké. Dat was een beetje een verrassing, want we hadden verwacht dat ze allemaal in elk geval wat gegevens zouden herstellen. Onze bescheiden tool blijkt de markt aan te voeren in SQLite-gegevensherstel, ondanks dat het geen speciale tool voor SQLite-gegevensherstel is. (Als je je afvroeg waarom we onze technologie ook in licentie geven aan andere bedrijven: dit is moeilijk spul.)
SQLite-gegevensherstel op verschillende versies van iOS
Bij elke nieuwe iOS-release kan Apple veranderen hoe het besturingssysteem met SQLite-databases omgaat. Dat omvat optimalisaties in hoe vaak opschoon- en andere onderhoudsbewerkingen plaatsvinden en wanneer ze worden gestart.
Naarmate apparaten krachtiger worden, kunnen deze bewerkingen ruimer worden ingezet, omdat de impact op de gebruikerservaring kleiner wordt. Met elke nieuwe generatie wordt een SQLite-database daarom waarschijnlijk vaker opgeschoond, wat het voordeel heeft dat de database sneller werkt voor normale bewerkingen. Dat sluit aan bij het doel van Apple om gebruikersgegevens en privacy beter te beschermen, omdat er geen ongewenste gegevens op het apparaat achterblijven. De keerzijde is dat gegevensherstel via de SQLite-methode daardoor onmogelijk wordt.
In iOS 11 zagen we een toename van de opschoonactiviteit in databases voor sms en iMessages. Herstel is nog steeds mogelijk, en waarschijnlijker voor recentere berichten die later zijn verwijderd, maar het is niet gegarandeerd.
In iOS 12 is de opschoonfrequentie van de sms- en iMessage-database sterk toegenomen. Omdat deze release werd aangekondigd met veel nadruk op onderhoud en snelheidsverbeteringen, is deze verandering logisch, want ze zal waarschijnlijk leiden tot soepelere prestaties bij gangbare bewerkingen.
Wat moet ik doen om hiervan te profiteren bij het herstellen van iOS-gegevens?
Misschien is dat nog wel het beste: deze technologie is geïntegreerd in Reincubate iPhone Backup Extractor, en dat al sinds de beginjaren. Terwijl je de app gebruikt, past hij deze technologie toe bij het bekijken of exporteren van je berichten en een aantal andere soorten gegevens. Afhankelijk van de gegevens die je bekijkt en de manier waarop, geeft de app aan welke gegevens zijn hersteld en welke niet. Het zit er allemaal bij.






