
Regipy ist eine OS-unabhängige Python-Bibliothek zum Parsen von Offline-Registry-Hives.
⚠️ Breaking Changes in v6.0.0
Version 6.0.0 enthält bedeutende Modernisierungsänderungen:
- Python 3.9+ erforderlich - Unterstützung für Python 3.6, 3.7 und 3.8 wurde eingestellt
attrs-Bibliothek entfernt - Datenklassen verwenden jetzt das in Python integriertedataclasses-Modul- Wenn Ihr Code interne Klassen importiert (
Cell,VKRecord,Value,Subkey) undattrs-Funktionen wieattr.asdict()verwendet, wechseln Sie zudataclasses.asdict()Siehe das CHANGELOG für vollständige Details.
Regipy ist eine Python-Bibliothek zum Parsen von Offline-Registry-Hives (Hive-Dateien mit REGF-Header). regipy bietet viele Funktionen:
Erfordert Python 3.9 oder höher.
Die neueste Version von Regipy kann von pypi installiert werden:
pip install regipy[full]
HINWEIS: regipy[full] installiert Abhängigkeiten, die Kompilierungswerkzeuge erfordern und einige Zeit in Anspruch nehmen können.
Es ist möglich, eine Version mit gelockerten Abhängigkeiten zu installieren, indem [full] weggelassen wird.
Außerdem ist es möglich, aus dem Quellcode zu installieren, indem das Repository geklont und Folgendes ausgeführt wird:
pip install --editable .[full]
Eine optionale Rust-Implementierung des Kern-REGF-Parsers ist als
Opt-in-Backend verfügbar und wird separat auf PyPI als
regipy-rs veröffentlicht:
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 ist ein Drop-in-Ersatz, der 1:1 gegen den reinen Python-Parser über
den gesamten Test-Hive-Korpus validiert wurde — jeder Schlüsselpfad, Zeitstempel, Wert und Plugin-
Ausgabe, beglaubigt durch übereinstimmende SHA-256-Traversierungs-Digests (siehe
regipy_tests/comparison_test.py und den Abschnitt Forensic parity evidence
in regipy-rs/BENCHMARKS.md).
Vollständige Traversierung mit Werten (recurse_subkeys), beste von 3 Durchläufen:
| 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 zeigt warum: Im Python-Backend wird die Traversierungszeit von
der construct-Struct-Analyse pro Datensatz und der Wertdekodierung dominiert; mit dem Rust-
Backend verschwindet der Parser vollständig aus dem Profil und die einzigen
verbleibenden Python-Kosten sind die Konstruktion der zurückgegebenen Subkey-Datenklassen.
Die vollständigen Profile, Digests pro Hive und ein Haftungsausschluss, der die wenigen
absichtlichen Abweichungen dokumentiert (Ausnahmetypen bei beschädigten Hives, Cycle-Guard-
Verhalten), befinden sich in regipy-rs/BENCHMARKS.md;
python regipy-rs/benchmark.py regeneriert den gesamten Bericht.
Der reine Python-Parser bleibt der Standard und ist nicht betroffen, wenn das Rust- Backend nicht installiert ist.
regipy-parse-header ~/Documents/TestEvidence/Registry/SYSTEM
Beispielausgabe:
╒════════════════════════╤══════════╕
│ 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
Das regipy-dump-Dienstprogramm kann auch eine Timeline anstelle eines JSON ausgeben, indem das -t-Flag hinzugefügt wird
regipy-plugins-run ~/Documents/TestEvidence/Registry/SYSTEM -o /tmp/plugins_output.json
Der Hive-Typ wird automatisch erkannt und die relevanten Plugins werden ausgeführt. Siehe den Plugin-Abschnitt für weitere Informationen
Registry-Hives desselben Typs vergleichen und als CSV ausgeben (wenn -o nicht angegeben ist, wird die Ausgabe auf dem Bildschirm ausgegeben)
regipy-diff NTUSER.dat NTUSER_modified.dat -o /tmp/diff.csv
Beispielausgabe:
[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