这是开发分支。生产下载请访问:
bulk_extractor 是一款高性能数字取证提取工具。它就像一个“获取证据”按钮,可快速扫描任何类型的输入(磁盘镜像、文件、文件目录等),并提取结构化信息,如电子邮件地址、信用卡号、JPEG 和 JSON 片段,而无需解析文件系统或文件系统结构。结果保存在易于检查、搜索或用作其他取证处理输入的文本文件中。bulk_extractor 还会为其发现的某些类型特征(如 Google 搜索词和电子邮件地址)创建直方图,因为先前的研究表明,此类直方图在调查和执法应用中尤其有用。
与其他数字取证工具不同,bulk_extractor 会探测每个字节的数据,以判断它是否是可解压或可通过其他方式解码的序列的起始位置。如果是,则对解码后的数据递归地重新检查。因此,bulk_extractor 能够发现 BASE64 编码的 JPEG 和压缩的 JSON 对象等传统雕刻工具会遗漏的内容。
此源码树构建 bulk_extractor 2.2.0。如需用于生产环境,请优先使用 https://github.com/simsong/bulk_extractor/releases 中经过测试的发行版。
bulk_extractor我们建议从源代码构建。我们在 etc/ 目录中提供了许多 bash 脚本,可用于配置干净的虚拟机:
git clone https://github.com/simsong/bulk_extractor.git
./bootstrap.sh
./configure
make
make check
make install
有关安装软件包和构建 bulk_extractor 的详细说明,请阅读此处的 wiki 页面: https://github.com/simsong/bulk_extractor/wiki/Installing-bulk_extractor
有关 bulk_extractor 的更多信息,请访问:https://forensics.wiki/bulk_extractor
生成的 PDF 手册在更改合并到 main 后发布于
https://simsong.github.io/bulk_extractor/ 。其中包含 2.2 版操作手册和开发人员手册。拉取请求会以工作流工件的形式收到相同的 PDF。
此版本的 bulk_extractor 需要 C++17。当前验证涵盖:
make distcheck,2026-07-19)etc/ 下的旧平台准备脚本与当前的 CI 支持并不等同,可能需要进行维护。
如果您正在撰写科学论文并使用 bulk_extractor,请按以下方式引用:
Garfinkel, Simson, Digital media triage with bulk data analysis and bulk_extractor. Computers and Security 32: 56-72 (2013)
@article{10.5555/2748150.2748581,
author = {Garfinkel, Simson L.},
title = {Digital Media Triage with Bulk Data Analysis and Bulk_extractor},
year = {2013},
issue_date = {February 2013},
publisher = {Elsevier Advanced Technology Publications},
address = {GBR},
volume = {32},
number = {C},
issn = {0167-4048},
journal = {Comput. Secur.},
month = feb,
pages = {56–72},
numpages = {17},
keywords = {Digital forensics, Bulk data analysis, bulk_extractor, Stream-based forensics, Windows hibernation files, Parallelized forensic analysis, Optimistic decompression, Forensic path, Margin, EnCase}
}
可以通过设置以下环境变量来改变 bulk_extractor 的运行方式:
其他调试提示:
bulk_extractor 从通过 -P 或 BE_PATH 提供的目录中加载名为 scan_.so(在 macOS 上为 scan_.dylib,在 Windows 上为 scan_*.dll)的扫描器模块。模块导出以下 C 链接工厂函数:
extern "C" scanner_t *bulk_extractor_scanner_v1();
该工厂返回一个普通的 scanner_t 函数。请针对与可执行文件相同的 bulk_extractor 源码版本构建模块;扫描器的 PHASE_INIT 处理程序必须调用 sp.check_version()。模块会一直保持加载,直到扫描器清理完成。
目前不支持原生 Windows 构建。
Windows MinGW build GitHub Actions 工作流会在每次拉取请求时于 Ubuntu 上交叉编译可执行文件,并在 bulk_extractor-windows-x86_64 工件中上传 bulk_extractor64.exe。该工作流会验证 PE 可执行文件不导入 MinGW、RE2、Abseil、Expat、zlib 或 GNU crypto 运行时 DLL。Windows 运行器会下载并运行该确切工件,针对包含 Unicode 文件名的目录进行测试。该工作流使用 x86_64 MinGW-w64 POSIX 工具链,以及来自固定 vcpkg 签出版本的静态 Expat、RE2 和 Abseil。CI 工件目前在没有 libewf 的情况下构建,因此不包含 E01 支持,也未签名,且不是发布安装程序。工作流文件及其维护的构建说明位于 .github/workflows/mingw.yml 和 doc/mingw_notes.txt。
将 be20 API 及其源代码依赖项集成到 bulk_extractor 源码树中,消除了递归子模块设置。统一构建现在会同时验证 bulk_extractor、be20 和 DFXML,并修复了通过全镜像测试和 AddressSanitizer 发现的线程池关闭缺陷。
将 jpeg_carved 特征记录器重命名为 jpeg,这样就可以用 -S jpeg_carve_mode=2 设置 jpeg 雕刻模式,而不是令人困惑的 -S jpeg_carved_carve_mode=2。
bulk_extractor 2.0(BE2)现已可用。虽然它可以与基于 Java 的查看器配合使用,但我们目前没有可在 Windows 下运行的安装程序。
BE2 需要 C++17 才能编译。be20 扫描器 API、dfxml_cpp、utfcpp 和 DFXML schema 源代码直接维护在此仓库中,无需递归子模块检出。
这个项目花费的时间比预期的要长。除了升级到 C++17 之外,它还作为一个契机进行了大规模代码重构,并普遍提高了代码质量、可测试性和可靠性。关于该实验的文章将刊登在即将出版的一期 ACM Queue 中。
| 变量 | 行为 |
|---|
DEBUG_BENCHMARK | 在 report.xml 文件中包含 CPU 基准测试信息。 |
DEBUG_NO_SCANNER_BYPASS | 禁用扫描器绕过逻辑;该逻辑会在 sbuf 包含 ngrams 或不具有高唯一字符数时跳过某些扫描器。 |
DEBUG_HISTOGRAMS | 打印基于文件的直方图的调试信息。 |
DEBUG_HISTOGRAMS_NO_INCREMENTAL | 不使用基于内存的增量直方图。 |
DEBUG_PRINT_STEPS | 在每个扫描器针对每个 sbuf 被调用时向 stdout 打印信息。 |
DEBUG_SCANNER_DUMP_DATA | 以十六进制转储每个待扫描的 sbuf。 |
DEBUG_SCANNERS_IGNORE | 用于识别要忽略的扫描器的子字符串。对调试单元测试很有用。 |