
regipy v6.3.0
Regipy è una libreria Python indipendente dal sistema operativo per l'analisi di hive del registro offline.
regipy
⚠️ 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
attrsrimossa - Le data class ora utilizzano il modulo integratodataclassesdi Python- Se il tuo codice importa classi interne (
Cell,VKRecord,Value,Subkey) e utilizza funzioni diattrscomeattr.asdict(), passa adataclasses.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:
| Hive | Chiavi | Python | Rust | Velocità |
|---|---|---|---|---|
| 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 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