🔍 Chrome Forensic - CVE-2024-0044
📋 项目概述
本项目是一个专为数字取证调查设计的专业工具,利用 CVE-2024-0044 (Run-as) 漏洞,绕过安卓12/13设备的权限限制,实现对Google Chrome浏览器数据的深度提取与分析。该工具无需Root权限,即可完整解析Chrome的SQLite数据库,生成详细的取证报告,帮助安全专家快速定位关键证据和可疑行为。
✨ 功能特性
- 深度数据提取:自动扫描并提取 Chrome 的多个核心数据库文件,包括历史记录、Cookie、登录凭证和自动填充数据。
- 智能报告生成:将所有提取的数据整合至一个结构化的 Excel 报告 (
result_chrome_forensic.xlsx) 中,包含多个数据表,便于查阅和分析。 - 可疑行为标记:内置敏感关键词库(如
hack、tor、bank),自动对URL进行匹配,并在报告中生成“警报”页,高亮潜在的可疑活动。 - 自动化取证流程:从递归扫描数据库文件到数据解析和报告输出,实现全流程自动化。
- 非Root设备支持:利用 CVE-2024-0044 漏洞,解决了传统取证在较新安卓版本上需要Root权限的痛点。
- 多维度分析:
- 📖 浏览历史:详细的时间线,包含访问时间、URL、页面标题。
- 📈 站点分析:统计并排序最常访问的域名。
- ⚠️ 安全警报:自动标记与恶意软件、敏感内容相关的访问记录。
- 📥 下载记录:提取下载文件的名称、路径和大小。
- 🔍 搜索词条:获取用户在地址栏或搜索引擎中输入的查询词。
- 🍪 会话数据:提取Cookie信息,包括会话令牌(十六进制加密)。
- ✍️ 自动填充:恢复浏览器保存的表单数据,如姓名、地址等。
🔧 安装指南
系统要求
- 操作系统:Windows / Linux / macOS
- 目标设备:已开启USB调试的Android 12/13手机
- Python版本:3.6 或更高
分步安装
-
克隆仓库
git clone https://github.com/JackTekno/Chrome-Forensic_CVE-2024-0044.git cd Chrome-Forensic_CVE-2024-0044 -
安装依赖 项目依赖
pandas、colorama和openpyxl(通常由pandas调用) 等库。使用以下命令一键安装:pip install -r requirements.txt如果项目未提供
requirements.txt,请手动安装核心依赖:pip install pandas colorama openpyxl
📖 使用说明
数据采集指南
- 连接设备:通过USB数据线将目标安卓手机连接到电脑,并确保已在手机上 启用“USB调试”模式。
- 获取数据库文件:利用CVE-2024-0044漏洞,将Chrome的数据库文件从手机复制到您的电脑工作目录。具体命令可参考作者仓库的详细指南。
- 运行工具:将工具脚本放置在与数据库文件相同的目录下,或在运行前确保数据库文件位于当前目录或其子目录中。在终端执行:
python chrome_forensic.py - 查看报告:程序运行完毕后,会在当前目录生成
result_chrome_forensic.xlsx文件。打开此文件即可查看所有解析后的数据。
代码示例
以下是如何快速开始取证的示例:
# 这仅仅是示意工具的内部工作流程,用户通常只需运行主脚本
# 1. 自动扫描当前目录下的所有Chrome数据库文件
found_dbs = find_database_files()
print(f"找到数据库: {found_dbs}")
# 2. 解析History数据库
history_df = parse_history(found_dbs.get('History'))
# 3. 根据关键词标记可疑记录
suspicious_df = flag_suspicious_urls(history_df, SUSPICIOUS_KEYWORDS)
# 4. 将所有数据写入Excel报告
with pd.ExcelWriter('result_chrome_forensic.xlsx') as writer:
history_df.to_excel(writer, sheet_name='Browsing History', index=False)
suspicious_df.to_excel(writer, sheet_name='ALERTS - Suspicious', index=False)
# ... 写入其他数据表
API 概览
核心脚本 chrome_forensic.py 提供了以下主要函数:
find_database_files(): 自动递归查找History,Cookies,Web Data,Login Data等目标数据库。print_status(): 美化控制台输出,显示不同级别的日志信息。(parse_*): 一系列内部函数(如解析History、Cookies)用于处理SQLite数据并将其转换为Pandas DataFrame,便于后续分析和导出。
💻 核心代码
1. 数据库自动发现器
此函数是取证的第一步,它通过递归遍历目录,智能定位Chrome的各类SQLite数据库文件,为后续的数据解析奠定基础。
# === CORE: 数据库自动发现器 ===
def find_database_files():
"""
自动在当目录及所有子目录中搜索Chrome的数据库文件。
例如:在模拟的安卓数据分区内查找 data/data/com.android.chrome/...
"""
found_files = {}
print_status("正在扫描目录,查找Chrome数据库...", "INFO")
for root, dirs, files in os.walk("."):
for key, target_name in TARGET_DB_NAMES.items():
if target_name in files:
# 构建文件的完整路径
full_path = os.path.join(root, target_name)
# 简单策略:优先选择包含'Default'路径的配置文件,否则使用第一个找到的
if key not in found_files or 'Default' in root:
found_files[key] = full_path
print_status(f"找到 {key} 数据库: {full_path}", "SUCCESS")
return found_files
2. 可疑URL标记器
此函数体现了工具的智能分析能力。它通过预定义的关键词库对提取出的URL进行匹配,自动筛选出高风险记录,极大提升了调查员的审查效率。
# === CORE: 可疑URL标记器 ===
# 全局定义的关键词库
SUSPICIOUS_KEYWORDS = [
'hack', 'admin', 'login', 'password', 'tor', 'onion',
'shell', 'root', 'porn', 'bokep', 'bank', 'transfer',
'weapon', 'senjata', 'narkoba', 'drug', 'wa.me', 't.me'
]
def flag_suspicious_urls(history_df):
"""
基于预定义的关键词列表,自动标记历史记录中的可疑URL。
Args:
history_df (pd.DataFrame): 包含 'url' 列的浏览历史DataFrame。
Returns:
pd.DataFrame: 仅包含被标记为可疑的URL的记录。
"""
if history_df is None or history_df.empty:
return pd.DataFrame()
suspicious_records = []
for index, row in history_df.iterrows():
url = row.get('url', '')
# 检查URL中是否包含任何可疑关键词
if any(keyword in url.lower() for keyword in SUSPICIOUS_KEYWORDS):
suspicious_records.append(row)
return pd.DataFrame(suspicious_records)
3. 美观的控制台输出
该函数通过使用 colorama 库,为不同级别的日志信息(信息、成功、警告、错误)提供彩色输出,使得取证过程的可读性大大增强,方便用户实时监控工具状态。
# === CORE: 彩色控制台输出 ===
from colorama import init, Fore, Style
init(autoreset=True)
def print_status(msg, status='INFO'):
"""
根据状态类型,打印带有颜色前缀的状态消息。
Args:
msg (str): 要打印的消息内容。
status (str): 消息类型 ('INFO', 'SUCCESS', 'WARN', 'ERROR')。
"""
if status == 'INFO':
print(f"{Fore.CYAN}[*] {msg}")
elif status == 'SUCCESS':
print(f"{Fore.GREEN}[+] {msg}")
elif status == 'WARN':
print(f"{Fore.YELLOW}[!] {msg}")
elif status == 'ERROR':
print(f"{Fore.RED}[-] {msg}")
```FINISHED
6HFtX5dABrKlqXeO5PUv/0kuC9tuyONaib4sAXa62IUgNqEgqzCq+2sIyyTFI4kJ