2016-07-28 1 views
1

Selon cette explication [1] comment il est possible de récupérer des enregistrements supprimés d'une base de données SQLite, deux choses se produisent lorsque vous supprimez un enregistrement: La zone contenant l'enregistrement supprimé est ajoutée à la liste libre (en tant que bloc libre) et l'en-tête dans la zone de contenu est remplacé.SQLite3: Supprimer l'enregistrement sans l'écraser avec nullbytes

Le contenu lui-même n'est pas (ou seulement quelques octets) écrasé, donc par ex. En ouvrant le fichier de base de données avec un éditeur hexadécimal, vous pouvez toujours voir des parties de l'enregistrement supprimé.

Donc, pour vérifier si cela est vrai ou non, voici un exemple minimal:

sqlite3 example.db 

sqlite> CREATE TABLE 'test'(aColumn VARCHAR(25)); 
sqlite> INSERT INTO test VALUES('AAAAAAAAAA'); 
sqlite> INSERT INTO test VALUES('BBBBBBBBBB'); 
sqlite> INSERT INTO test VALUES('CCCCCCCCCC'); 
sqlite> DELETE FROM test WHERE aColumn = 'BBBBBBBBBB'; 

Ce que je me attends est maintenant - ouvrir le fichier avec un éditeur hexadécimal - entre CCCC ... et Heu ... il sont toujours des Bs (mais quelques octets avant les Bs ou les premiers Bs auraient dû être écrasés). Ce qui se passe réellement, c'est que toute la zone avec Bs a été remplacée par nullbytes.

Cela se produit également avec des bases de données plus volumineuses. La zone de contenu est toujours nettoyée avec nullbytes et pour cette raison, il est impossible de récupérer quoi que ce soit.

Existe-t-il une option ou un indicateur que je dois utiliser pour obtenir les résultats affichés dans le blogpost?

J'ai besoin de créer mes bases de données SQLite de cette façon, pour pouvoir récupérer des enregistrements supprimés (ou des parties d'entre eux) avec des outils médico-légaux.

[1] http://sandersonforensics.com/forum/content.php?222-Recovering-deleted-records-from-an-SQLite-database

Répondre