SQLite3:删除记录而不用nullbytes覆盖它

时间:2016-07-28 13:23:02

标签: database sqlite computer-forensics

根据这个解释[1]如何从SQLite数据库中恢复已删除的记录,删除记录时会发生两件事:包含已删除记录的区域被添加到空闲列表中(作为空闲块) )和#34;标题"在内容区域被覆盖。

内容本身不是(或只有几个字节)被覆盖,所以例如通过使用十六进制编辑器打开数据库文件,您仍然可以看到已删除记录的部分内容。

所以要检查这是否属实,这是一个最小的例子:

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

我现在期待的是 - 用十六进制编辑器打开文件 - 在CCCC ...和AAAA之间...仍然有一些Bs(但是在Bs或前几个B之前的一些字节应该被覆盖)。 真正发生的是Bs的整个区域都被nullbytes覆盖了。

大型数据库也会发生这种情况。内容区域始终使用nullbytes清理,因此无法恢复任何内容。

我是否有任何选项或标志用于获取博客帖子中显示的结果?

我需要以这种方式创建我的SQLite数据库,以便能够使用取证工具恢复已删除的记录(或部分内容)。

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

1 个答案:

答案 0 :(得分:1)

您的SQLite版本恰好在启用SQLITE_SECURE_DELETE的情况下进行编译。