Torna agli aggiornamenti
New releaseAug 20, 2026

regipy v6.3.0

Regipy è una libreria Python indipendente dal sistema operativo per l'analisi di hive del registro offline.

Condividi

regipy

OpenSSF Scorecard

⚠️ Modifiche incompatibili nella v6.0.0

La versione 6.0.0 include significative modifiche di modernizzazione:

  • Richiesto Python 3.9+ - Rimosso il supporto per Python 3.6, 3.7 e 3.8
  • Libreria attrs rimossa - Le data class ora utilizzano il modulo integrato dataclasses di Python
  • Se il tuo codice importa classi interne (Cell, VKRecord, Value, Subkey) e utilizza funzioni di attrs come attr.asdict(), passa a dataclasses.asdict()

Consulta il CHANGELOG per tutti i dettagli.

Regipy è una libreria Python per l'analisi di hive del registro offline (file Hive con header REGF). regipy ha molte funzionalità:

  • Utilizzo come libreria:
    • Ricorsione sull'hive del registro, dalla radice o da un percorso specificato, per ottenere tutte le sottochiavi e i valori
    • Lettura di sottochiavi e valori specifici
    • Applicazione dei log di transazione su un hive del registro
  • Strumenti da riga di comando
    • Esportazione di un intero hive del registro in json
    • Applicazione dei log di transazione su un hive del registro
    • Confronto di hive del registro
    • Esecuzione di plugin da un robusto sistema di plugin (es: amcache, shimcache, estrazione del nome del computer...)

Richiede Python 3.9 o superiore.

Installazione

L'ultima versione di Regipy può essere installata da pypi:

pip install regipy[full]

NOTA: regipy[full] installa dipendenze che richiedono strumenti di compilazione e potrebbe richiedere del tempo. È possibile installare una versione con dipendenze ridotte, omettendo [full].

Inoltre, è possibile installare dal sorgente clonando il repository ed eseguendo:

pip install --editable .[full]

Backend accelerato in Rust (alpha)

Un'implementazione opzionale in Rust del parser REGF principale è disponibile come backend opt-in, pubblicato separatamente su PyPI come regipy-rs:

pip install regipy[rust]
from regipy.registry_rs import RegistryHive  # invece di regipy.registry

reg = RegistryHive("/tmp/NTUSER.dat")
# Stessa API: get_key, iter_values, recurse_subkeys, plugins — tutto
# funziona invariato, inclusi tutti i plugin di regipy.

È un sostituto drop-in validato 1:1 rispetto al parser in puro Python su l'intero corpus di hive di test — ogni percorso di chiave, timestamp, valore e output dei plugin, notarizzato tramite digest di attraversamento SHA-256 corrispondenti (vedi regipy_tests/comparison_test.py e la sezione Forensic parity evidence di regipy-rs/BENCHMARKS.md).

Attraversamento completo con valori (recurse_subkeys), migliore di 3 esecuzioni:

HiveChiaviPythonRustVelocità
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 mostra il perché: nel backend Python, il tempo di attraversamento è dominato dal parsing della struct construct per record e dalla decodifica dei valori; con il backend Rust, il parser scompare completamente dal profilo e l'unico costo Python rimanente è la costruzione delle dataclass Subkey restituite. I profili completi, i digest per hive e un disclaimer che documenta le poche divergenze intenzionali (tipi di eccezione su hive corrotti, comportamento di protezione dai cicli) sono in regipy-rs/BENCHMARKS.md; python regipy-rs/benchmark.py rigenera l'intero report.

Il parser in puro Python rimane quello predefinito e non è influenzato quando il backend Rust non è installato.

CLI

Analizzare l'header

regipy-parse-header ~/Documents/TestEvidence/Registry/SYSTEM

Output di esempio:

╒════════════════════════╤══════════╕
│ 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
  • Durante l'analisi dell'header di un hive, vengono eseguite anche la validazione del checksum e le validazioni delle transazioni

Esportare l'intero hive su disco (potrebbe richiedere del tempo)

regipy-dump ~/Documents/TestEvidence/Registry/NTUSER-CCLEANER.DAT -o /tmp/output.json

L'utility regipy-dump può anche produrre una timeline invece di un JSON, aggiungendo il flag -t

Eseguire i plugin rilevanti sull'Hive

regipy-plugins-run ~/Documents/TestEvidence/Registry/SYSTEM -o /tmp/plugins_output.json

Il tipo di hive verrà rilevato automaticamente e i plugin rilevanti verranno eseguiti. Consulta la sezione dei plugin per maggiori informazioni

Confrontare hive del registro

Confronta hive del registro dello stesso tipo e produce un CSV (se -o non è specificato, l'output verrà stampato a schermo)

regipy-diff NTUSER.dat NTUSER_modified.dat -o /tmp/diff.csv

Output di esempio:

[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

Recuperare un hive del registro, utilizzando i log di transazione

regipy-process-transaction-logs NTUSER.DAT -p ntuser.dat.log1 -s ntuser.dat.log2 -o recovered_NTUSER.dat

Categorie