Volver a actualizaciones
Nuevo releaseAug 20, 2026

regipy v6.3.0

Regipy es una biblioteca de Python independiente del sistema operativo para analizar registry hives sin conexión.

Compartir

regipy

OpenSSF Scorecard

⚠️ 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 integrado dataclasses de Python
  • Si tu código importa clases internas (Cell, VKRecord, Value, Subkey) y usa funciones de attrs como attr.asdict(), cambia a dataclasses.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:

  • Uso como librería:
    • Recorrer recursivamente la colmena del registro, desde la raíz o desde una ruta dada, y obtener todas las subclaves y valores
    • Leer subclaves y valores específicos
    • Aplicar registros de transacciones sobre una colmena del registro
  • Herramientas de línea de comandos
    • Volcar una colmena del registro completa a json
    • Aplicar registros de transacciones sobre una colmena del registro
    • Comparar colmenas del registro
    • Ejecutar plugins desde un sistema de plugins robusto (es decir: amcache, shimcache, extraer nombre de equipo...)

Requiere Python 3.9 o superior.

Instalación

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]

Backend acelerado con Rust (alfa)

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:

HiveKeysPythonRustSpeedup
NTUSER.DAT1,812173 ms5 ms38x
UsrClass.dat6,205948 ms17 ms55x
amcache.hve2,105837 ms12 ms67x
SYSTEM30,75623.1 s91 ms253x
SYSTEM (Win10 1709)43,211118.7 s111 ms1,068x
SOFTWARE117,488745.6 s292 ms2,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.

CLI

Analizar la cabecera

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
  • Al analizar la cabecera de una colmena, también se realizan la validación de checksum y las validaciones de transacciones

Volcar la colmena completa a disco (esto puede tardar algún tiempo)

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

Ejecutar plugins relevantes en la colmena

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

Comparar colmenas del registro

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

Recuperar una colmena del registro usando registros de transacciones

Categorías