浏览器取证工具开发报告
摘要
本报告记录了基于 Python 的浏览器取证工具的过程,该工具用于从 Chrome 和 Firefox 浏览器中提取历史记录,并生成 PDF 格式的报告。主要包括环境设置、数据提取、数据分析及报告生成等关键步骤。利用此工具,我们可以有效地获取并分析浏览器的记录包含的信息,以便在取证分析中使用。
1. 引言
随着互联网的普及,浏览器成为了用户访问互联网的主要工具,同时也是记录用户上网行为的重要工具。在数字取证中,浏览器历史记录可以提供有价值的线索。本项目的目标是开发一个工具,从 Chrome 和 Firefox 中提取用户的浏览历史,并生成易于阅读的 PDF 报告。
2. 环境设置
2.1 开发环境
- 操作系统: Windows 10
- 编程语言: Python 3.8+
- 依赖库:
sqlite3
: 用于访问 SQLite 数据库。reportlab
: 用于生成 PDF 报告。pandas
: 用于数据分析和处理。argparse
: 用于命令行参数解析。
2.2 安装依赖
确保已安装所有必要的 Python 库。使用以下命令安装依赖:
1 | pip install reportlab pandas |
3.使用方法及成果展示
使用方法
在不知道如何使用的情况下,可以在终端中键入
1 | python evi_hw1.py -h |
来获取帮助,执行需要两个参数——浏览器信息及生成pdf文件名称,默认生成在当前路径文件夹下。
4. 数据提取
浏览器历史记录通常存储在 SQLite 数据库中。Chrome 和 Firefox 都使用这种格式存储历史记录。因此,我们可以使用 sqlite3
库来访问这些数据库。
4.1 关闭浏览器
为了避免文件锁定问题,我们需要在提取数据之前确保浏览器已关闭。使用 subprocess
模块关闭浏览器:
1 | def close_browser(browser_name): |
4.2 提取 Chrome 历史记录
Chrome 历史记录的存储
Chrome 的浏览历史记录存储在一个名为 History
的 SQLite 数据库文件中,通常位于用户目录的 AppData
文件夹下:
1 | C:\Users\<username>\AppData\Local\Google\Chrome\User Data\Default\History |
代码解析
为了提取 Chrome 历史记录,我们需要首先关闭 Chrome 浏览器,因为它会锁定 History
文件,阻止其他程序访问。以下是主要步骤:
1 | def get_chrome_history(): |
- 关闭浏览器: 调用
close_browser('chrome.exe')
关闭所有 Chrome 浏览器进程,避免文件被锁定。 - 等待: 使用
time.sleep(2)
确保进程完全关闭。 - 复制文件: 将
History
文件复制到临时目录,确保不影响原文件。 - 读取数据: 连接到临时文件的 SQLite 数据库,并执行查询以提取 URL、标题、访问次数和最后访问时间。
- 转换时间: 使用
convert_chrome_time
函数将 Chrome 的时间戳转换为标准日期时间格式。
4.3 提取 Firefox 历史记录
Firefox 历史记录的存储
Firefox 的浏览历史记录存储在 places.sqlite
文件中,通常位于用户目录的 AppData
文件夹下:
1 | C:\Users\<username>\AppData\Roaming\Mozilla\Firefox\Profiles\<profile>\places.sqlite |
其中 <profile>
是用户的 Firefox 配置文件名,通常以 .default-release
或 .default-release-1
结尾。
代码解析
为了提取 Firefox 历史记录,首先要确定当前用户的 Firefox 配置文件路径,并关闭 Firefox 浏览器。代码的主要步骤如下:
1 | def get_firefox_history(): |
- 关闭浏览器: 调用
close_browser('firefox.exe')
关闭所有 Firefox 浏览器进程,避免文件被锁定。 - 选择配置文件夹: 从用户的 Firefox 配置文件目录中选择一个默认的配置文件夹,通常以
.default-release
结尾。 - 读取数据: 连接到
places.sqlite
文件的 SQLite 数据库,提取浏览记录数据。 - 转换时间: 使用
convert_firefox_time
函数将 Firefox 的时间戳转换为标准日期时间格式。
时间格式转换
Chrome 和 Firefox 使用不同的时间戳格式。Chrome 的时间戳是自 1601 年以来的微秒数,Firefox 的时间戳是自 1970 年以来的微秒数。为了将这些时间戳转换为人类可读的日期,我们使用了以下函数:
1 | def convert_chrome_time(chrome_time): |
这些函数将浏览器的时间戳转换为标准日期时间格式,便于后续的分析和报告生成。
1 | def convert_chrome_time(chrome_time): |
5. 报告生成
使用 reportlab
库生成 PDF 报告。报告中包括 URL、标题、访问次数和最后访问时间。
5.1 PDF 报告生成
创建一个包含表格的 PDF 文件,以清晰地展示提取到的历史记录:
1 | def generate_pdf_report(data, filename): |
为方便观察,将生成的 pdf 报告以表格的方式呈现,但是由于网站可能过长,表格第一栏与第二栏有时便不可避免地会发生越格现象,我通过
- 合理的栏长度分配;
- 精简 url 长度使得多余部分以省略号显示(在保证url信息不丢失的基础上);
- 将 title 包裹在
Paragraph
中,使其能够自动换行。
解决了上述问题。
5. 结论
通过本次项目开发,我们成功创建了一个能够提取 Chrome 和 Firefox 浏览器历史记录的取证工具。该工具能够有效地提取用户的浏览历史,并生成 PDF 报告,为后续的取证分析提供了便利。本项目展示了使用 Python 进行数据提取和报告生成的过程,同时也为未来进一步开发和优化取证工具提供了良好的基础。
参考文献
- Python 官方文档 https://docs.python.org/3/
sqlite3
模块文档 https://docs.python.org/3/library/sqlite3.htmlreportlab
库文档 https://www.reportlab.com/docs/reportlab-userguide.pdf