
Este es el árbol de desarrollo. Las descargas de producción están en:
[](https://codecov.io/gh/simsong/bulk_extractor)
<a href="https://scan.coverity.com/projects/simsong-bulk_extractor">
<img alt="Coverity Scan Build Status" src="https://scan.coverity.com/projects/29726/badge.svg"/></a>
`bulk_extractor` es una herramienta de explotación forense digital de alto rendimiento. Es un botón de "obtener evidencia" que escanea rápidamente cualquier tipo de entrada (imágenes de disco, archivos, directorios de archivos, etc.) y extrae información estructurada como direcciones de correo electrónico, números de tarjetas de crédito, JPEG y fragmentos JSON sin analizar el sistema de archivos ni sus estructuras. Los resultados se almacenan en archivos de texto que se pueden inspeccionar, buscar o utilizar fácilmente como entradas para otros procesos forenses. bulk_extractor también crea histogramas de ciertos tipos de características que encuentra, como términos de búsqueda de Google y direcciones de correo electrónico, ya que investigaciones anteriores han demostrado que dichos histogramas son especialmente útiles en aplicaciones de investigación y aplicación de la ley.
A diferencia de otras herramientas de forensia digital, `bulk_extractor` examina cada byte de datos para determinar si es el inicio de una secuencia que puede descomprimirse o decodificarse de alguna otra forma. Si es así, los datos decodificados se vuelven a examinar recursivamente. Como resultado, `bulk_extractor` puede encontrar elementos como JPEG codificados en BASE64 y objetos JSON comprimidos que las herramientas de carving tradicionales pasan por alto.
Este árbol de fuentes compila bulk_extractor 2.2.0. Para uso en producción, prefiera una versión probada de https://github.com/simsong/bulk_extractor/releases.
Compilación de `bulk_extractor`
=========================
Recomendamos compilar desde las fuentes. Proporcionamos varios scripts `bash` en el directorio `etc/` que configurarán una máquina virtual limpia:
```
git clone https://github.com/simsong/bulk_extractor.git
./bootstrap.sh
./configure
make
make check
make install
```
Para obtener instrucciones detalladas sobre cómo instalar los paquetes y compilar bulk_extractor, lea la página wiki aquí:
https://github.com/simsong/bulk_extractor/wiki/Installing-bulk_extractor
Para más información sobre bulk_extractor, visite: https://forensics.wiki/bulk_extractor
Documentación
=============
Los manuales PDF generados se publican en
https://simsong.github.io/bulk_extractor/ después de que los cambios se fusionen en `main`.
Contiene los manuales de operación y de desarrollador de la 2.2. Las solicitudes de incorporación de cambios (pull requests) reciben los mismos PDF como artefacto del flujo de trabajo.
Configuraciones probadas
=====================
Esta versión de bulk_extractor requiere C++17. La validación actual cubre:
* Apple Silicon macOS (compilación local y `make distcheck`, 2026-07-19)
* Ubuntu 22.04 y los runners actuales de macOS en GitHub Actions
Los scripts de preparación de plataformas más antiguos en `etc/` no son equivalentes al soporte actual de CI y pueden requerir mantenimiento.
Configuraciones probadas en las que bulk_extractor no funciona
========================================================
* Debian 10 (no compatible con compilaciones nativas)
CITACIÓN RECOMENDADA
====================
Si está escribiendo un artículo científico y utiliza bulk_extractor, cícelo con:
Garfinkel, Simson, Digital media triage with bulk data analysis and bulk_extractor. Computers and Security 32: 56-72 (2013)
* [Science Direct](https://www.sciencedirect.com/science/article/pii/S0167404812001472)
* [Bibliometría](https://plu.mx/plum/a/?doi=10.1016/j.cose.2012.09.011&theme=plum-sciencedirect-theme&hideUsage=true)
* [Sitio web del autor](https://simson.net/clips/academic/2013.COSE.bulk_extractor.pdf)
```
@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}
}
```
VARIABLES DE ENTORNO
=====================
Las siguientes variables de entorno se pueden configurar para cambiar el funcionamiento de `bulk_extractor`:
|Variable|Comportamiento|
|--------|--------|
|`DEBUG_BENCHMARK`|Incluye información de referencia de CPU en el archivo `report.xml`|
|`DEBUG_NO_SCANNER_BYPASS`|Desactiva la lógica de omisión de escáneres que evita algunos escáneres si un sbuf contiene n-gramas o no tiene un recuento alto de caracteres distintos.|
|`DEBUG_HISTOGRAMS`|Imprime información de depuración sobre histogramas basados en archivos.|
|`DEBUG_HISTOGRAMS_NO_INCREMENTAL`|No utiliza histogramas incrementales basados en memoria.|
|`DEBUG_PRINT_STEPS`|Imprime en stdout cuando se llama a cada escáner para cada sbuf|
|`DEBUG_SCANNER_DUMP_DATA`|Vuelca en hexadecimal cada sbuf que se va a escanear.|
|`DEBUG_SCANNERS_IGNORE`|Una subcadena utilizada para identificar escáneres que se deben ignorar. Útil para depurar pruebas unitarias.|
Otras sugerencias para la depuración:
* Ejecute -xall para ejecutar sin ningún escáner.
* Ejecute con un muestreo aleatorio del 0.001% para depurar la lectura del tamaño de la imagen y algunas búsquedas rápidas.
ESCÁNERES CARGABLES
=================
bulk_extractor carga módulos de escáner llamados scan_*.so (o scan_*.dylib en macOS y scan_*.dll en Windows) desde los directorios proporcionados con -P o en BE_PATH. Un módulo exporta esta fábrica de enlazado C:
extern "C" scanner_t *bulk_extractor_scanner_v1();
La fábrica devuelve una función scanner_t normal. Compile los módulos contra la misma versión del código fuente de bulk_extractor que el ejecutable; el manejador PHASE_INIT del escáner debe llamar a sp.check_version(). Los módulos permanecen cargados hasta que se complete la limpieza del escáner.
COMPILACIÓN EN WINDOWS
===================
Las compilaciones nativas de bulk_extractor para Windows no son compatibles actualmente.
El flujo de trabajo de GitHub Actions `Windows MinGW build` compila de forma cruzada el ejecutable en Ubuntu para cada solicitud de incorporación de cambios y sube `bulk_extractor64.exe` en el artefacto `bulk_extractor-windows-x86_64`. El flujo de trabajo verifica que el ejecutable PE no importe las DLL de tiempo de ejecución de MinGW, RE2, Abseil, Expat, zlib o GNU crypto. Un runner de Windows descarga y ejecuta ese mismo artefacto contra un directorio con un nombre de archivo Unicode. El flujo de trabajo utiliza la cadena de herramientas POSIX x86_64 MinGW-w64 y Expat, RE2 y Abseil estáticos de un checkout de vcpkg fijado. El artefacto de CI se compila actualmente sin libewf, por lo que no incluye soporte para E01, no está firmado y no es un instalador de versión final. El archivo del flujo de trabajo y sus notas de compilación mantenidas son `.github/workflows/mingw.yml` y `doc/mingw_notes.txt`.
NOTAS DE LA VERSIÓN DE BULK_EXTRACTOR
============================
## Versión 2.2.0 (19 de julio de 2026)
Se integró la API be20 y sus dependencias de código fuente en el árbol de fuentes de bulk_extractor, eliminando la configuración recursiva de submódulos. La compilación unificada ahora valida bulk_extractor, be20 y DFXML conjuntamente y corrige defectos de cierre del grupo de subprocesos encontrados mediante pruebas de imagen completa y AddressSanitizer.
## Versión 2.1.1 (26 de abril de 2024)
Se renombró el registrador de características jpeg_carved a jpeg, de modo que el modo de carving jpeg se pueda establecer con -S jpeg_carve_mode=2, en lugar de -S jpeg_carved_carve_mode=2, que resultaba confuso.
## Versión 2.0
`bulk_extractor` 2.0 (BE2) ya está operativo. Aunque funciona con el visor basado en Java, actualmente no disponemos de un instalador que funcione en Windows.
BE2 requiere C++17 para compilar. Las fuentes de la API de escáner be20, dfxml_cpp, utfcpp y el esquema DFXML se mantienen directamente en este repositorio; no se requiere una descarga recursiva de submódulos.
El proyecto tomó más tiempo de lo previsto. Además de la actualización a C++17, se aprovechó como una oportunidad para una refactorización masiva del código y un aumento general de la calidad, la capacidad de prueba y la fiabilidad del código. Un artículo sobre el experimento aparecerá en un próximo número de [ACM Queue](https://queue.acm.org/)