
Regipy es una biblioteca de Python independiente del sistema operativo para analizar registry hives sin conexión.
⚠️ Cambios importantes en la v6.0.0
La versión 6.0.0 incluye cambios significativos de modernización:
- Se requiere Python 3.9+ - Se eliminó el soporte para Python 3.6, 3.7 y 3.8
- Se eliminó la librería
attrs- Las clases de datos ahora usan el módulo integradodataclassesde Python- Si tu código importa clases internas (
Cell,VKRecord,Value,Subkey) y usa funciones deattrscomoattr.asdict(), cambia adataclasses.asdict()Consulta el CHANGELOG para obtener todos los detalles.
Regipy es una librería de Python para analizar colmenas de registro offline (archivos Hive con cabecera REGF). regipy tiene muchas capacidades:
Requiere Python 3.9 o superior.
La última versión de Regipy se puede instalar desde pypi:
pip install regipy[full]
NOTA: regipy[full] instala dependencias que requieren herramientas de compilación y puede tardar algún tiempo.
Es posible instalar una versión con dependencias relajadas, omitiendo [full].
Además, es posible instalar desde el código fuente clonando el repositorio y ejecutando:
pip install --editable .[full]
Hay disponible una implementación opcional en Rust del analizador REGF principal como
backend opcional, publicada por separado en PyPI como
regipy-rs:
pip install regipy[rust]
from regipy.registry_rs import RegistryHive # instead of regipy.registry
reg = RegistryHive("/tmp/NTUSER.dat")
# Same API: get_key, iter_values, recurse_subkeys, plugins — everything
# works unchanged, including all regipy plugins.
Es un reemplazo directo validado 1:1 contra el analizador en Python puro sobre
todo el corpus de colmenas de prueba — cada ruta de clave, marca de tiempo, valor y salida de plugin,
notarizado mediante digests de recorrido SHA-256 coincidentes (consulta
regipy_tests/comparison_test.py y la sección Forensic parity evidence
de regipy-rs/BENCHMARKS.md).
Recorrido completo con valores (recurse_subkeys), mejor de 3 ejecuciones:
| Hive | Keys | Python | Rust | Speedup |
|---|---|---|---|---|
| NTUSER.DAT | 1,812 | 173 ms | 5 ms | 38x |
| UsrClass.dat | 6,205 | 948 ms | 17 ms | 55x |
| amcache.hve | 2,105 | 837 ms | 12 ms | 67x |
| SYSTEM | 30,756 | 23.1 s | 91 ms | 253x |
| SYSTEM (Win10 1709) | 43,211 | 118.7 s | 111 ms | 1,068x |
| SOFTWARE | 117,488 | 745.6 s | 292 ms | 2,550x |
cProfile muestra por qué: en el backend de Python, el tiempo de recorrido está dominado por
el análisis de estructuras construct por registro y la decodificación de valores; con el backend
de Rust, el analizador desaparece por completo del perfil y el único
coste restante en Python es la construcción de las dataclasses Subkey devueltas.
Los perfiles completos, los digests por colmena y un descargo de responsabilidad que documenta las pocas
divergencias intencionales (tipos de excepción en colmenas corruptas, comportamiento del guardián de ciclos) están en regipy-rs/BENCHMARKS.md;
python regipy-rs/benchmark.py regenera el informe completo.
El analizador en Python puro sigue siendo el predeterminado y no se ve afectado cuando el backend de Rust no está instalado.
regipy-parse-header ~/Documents/TestEvidence/Registry/SYSTEM
Salida de ejemplo:
╒════════════════════════╤══════════╕
│ signature │ b'regf' │
├────────────────────────┼──────────┤
│ primary_sequence_num │ 11639 │
├────────────────────────┼──────────┤
│ secondary_sequence_num │ 11638 │
├────────────────────────┼──────────┤
│ last_modification_time │ 0 │
├────────────────────────┼──────────┤
│ major_version │ 1 │
├────────────────────────┼──────────┤
│ minor_version │ 5 │
├────────────────────────┼──────────┤
│ file_type │ 0 │
├────────────────────────┼──────────┤
│ file_format │ 1 │
├────────────────────────┼──────────┤
│ root_key_offset │ 32 │
├────────────────────────┼──────────┤
│ hive_bins_data_size │ 10534912 │
├────────────────────────┼──────────┤
│ clustering_factor │ 1 │
├────────────────────────┼──────────┤
│ file_name │ SYSTEM │
├────────────────────────┼──────────┤
│ checksum │ 0 │
╘════════════════════════╧══════════╛
[2019-02-09 13:46:12.111654] WARNING: regipy.cli: Hive is not clean! You should apply transaction logs
regipy-dump ~/Documents/TestEvidence/Registry/NTUSER-CCLEANER.DAT -o /tmp/output.json
La utilidad regipy-dump también puede generar una línea de tiempo en lugar de un JSON, añadiendo el flag -t
regipy-plugins-run ~/Documents/TestEvidence/Registry/SYSTEM -o /tmp/plugins_output.json
El tipo de colmena se detectará automáticamente y se ejecutarán los plugins relevantes. Consulta la sección de plugins para más información
Compara colmenas del registro del mismo tipo y genera un CSV (si no se especifica -o, la salida se imprimirá en pantalla)
regipy-diff NTUSER.dat NTUSER_modified.dat -o /tmp/diff.csv
Salida de ejemplo:
[2019-02-11 19:49:18.824245] INFO: regipy.cli: Comparing NTUSER.DAT vs NTUSER_modified.DAT
╒══════════════╤══════════════╤════════════════════════════════════════════════════════════════════════════════╤════════════════════════════════════════════════╕
│ difference │ first_hive │ second_hive │ description │
╞══════════════╪══════════════╪════════════════════════════════════════════════════════════════════════════════╪════════════════════════════════════════════════╡
│ new_subkey │ │ 2019-02-11T19:46:31.832134+00:00 │ \Software\Microsoft\legitimate_subkey │
├──────────────┼──────────────┼────────────────────────────────────────────────────────────────────────────────┼────────────────────────────────────────────────┤
│ new_value │ │ not_a_malware: c:\temp\legitimate_binary.exe @ 2019-02-11 19:45:25.516346+00:00 │ \Software\Microsoft\Windows\CurrentVersion\Run │
╘══════════════╧══════════════╧════════════════════════════════════════════════════════════════════════════════╧════════════════════════════════════════════════╛
[2019-02-11 19:49:18.825328] INFO: regipy.cli: Detected 2 differences