是否有可用于搜索 Sqlite 数据库的所有表和列的库或开源实用程序?唯一的输入是 sqlite DB 文件的名称。
我正在尝试编写取证工具,并希望在 sqlite 文件中搜索特定字符串。
您可以使用它"SELECT name FROM sqlite_master WHERE type='table'"
来找出数据库中表的名称。从那里很容易选择每个表的所有行。
例如:
import sqlite3
import os
filename = ...
with sqlite3.connect(filename) as conn:
conn.row_factory = sqlite3.Row
cursor = conn.cursor()
cursor.execute("SELECT name FROM sqlite_master WHERE type='table'")
for tablerow in cursor.fetchall():
table = tablerow[0]
cursor.execute("SELECT * FROM {t}".format(t = table))
for row in cursor:
for field in row.keys():
print(table, field, row[field])
我知道聚会迟到了,但我遇到了类似的问题,但由于它位于 docker 映像中,因此我无法访问 python,所以我像这样解决了它:
for X in $(sqlite3 database.db .tables) ; do sqlite3 database.db "SELECT * FROM $X;" | grep >/dev/null 'STRING I WANT' && echo $X; done
这将遍历数据库文件中的所有表并执行全选操作,然后我对字符串进行 grep。如果它找到字符串,它会打印表格,然后我可以从那里简单地使用 sqlite3 来找出它是如何使用的。
认为它可能对其他无法使用 python 的人有所帮助。
只需转储数据库并搜索它。
% sqlite3 file_name .dump | grep 'my_search_string'
您可以改为通过 less 管道,然后使用 / 进行搜索:
% sqlite3 file_name .dump | less
@MrWorf 的回答不适用于我的 sqlite 文件(来自 Evernote 的 .exb 文件),但这种类似的方法有效:
sqlitebrowser mynotes.exb
grep 'STRING I WANT" mynotes.exb.sql