2016-07-28 20 views
1

Gemäß dieser Erklärung [1], wie gelöschte Datensätze aus einer SQLite-Datenbank wiederhergestellt werden können, passieren beim Löschen eines Datensatzes zwei Dinge: Der Bereich mit dem gelöschten Datensatz wird hinzugefügt zur freien Liste (als freier Block) und der "Header" im Inhaltsbereich wird überschrieben.SQLite3: Datensatz löschen, ohne ihn mit nullbytes zu überschreiben

Der Inhalt selbst wird nicht (oder nur ein paar Bytes) überschrieben, so z. Durch Öffnen der Datenbankdatei mit einem Hex-Editor können Sie immer noch Teile des gelöschten Datensatzes sehen.

So zu prüfen, ob dies wahr ist oder nicht, ist hier ein minimales Beispiel:

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'; 

Was jetzt erwarte ich, dass - die Datei mit einem Hex-Editor öffnen - zwischen CCCC ... und AAAA ... da sind noch einige Bs (aber einige Bytes vor den Bs oder die ersten Bs sollten überschrieben worden sein). Was wirklich passiert, ist, dass der gesamte Bereich mit Bs mit nullbytes überschrieben wurde.

Dies ist auch bei größeren Datenbanken der Fall. Der Inhaltsbereich wird immer mit nullbytes bereinigt und daher ist es unmöglich, etwas wiederherzustellen.

Gibt es eine Option oder ein Flag, die ich verwenden muss, um die Ergebnisse im Blogpost zu erhalten?

Ich muss meine SQLite-Datenbanken auf diese Weise erstellen, um gelöschte Datensätze (oder Teile davon) mit forensischen Tools wiederherstellen zu können.

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

Antwort