अपडेट पर वापस जाएँ
New releaseAug 20, 2026

regipy v6.3.0

Regipy एक os स्वतंत्र पायथन लाइब्रेरी है जो ऑफलाइन रजिस्ट्री हाइव्स को पार्स करने के लिए है।

साझा करें

regipy

OpenSSF Scorecard

⚠️ v6.0.0 में ब्रेकिंग बदलाव

संस्करण 6.0.0 में महत्वपूर्ण आधुनिकीकरण परिवर्तन शामिल हैं:

  • Python 3.9+ आवश्यक - Python 3.6, 3.7, और 3.8 के लिए समर्थन हटा दिया गया
  • attrs लाइब्रेरी हटा दी गई - डेटा क्लासेस अब Python के अंतर्निहित dataclasses मॉड्यूल का उपयोग करते हैं
  • यदि आपका कोड आंतरिक क्लासेस (Cell, VKRecord, Value, Subkey) आयात करता है और attr.asdict() जैसे attrs फ़ंक्शन का उपयोग करता है, तो dataclasses.asdict() पर स्विच करें

पूर्ण विवरण के लिए CHANGELOG देखें।

Regipy ऑफ़लाइन रजिस्ट्री हाइव्स (REGF हेडर वाली Hive फ़ाइलें) को पार्स करने के लिए एक Python लाइब्रेरी है। regipy में बहुत सारी क्षमताएँ हैं:

  • लाइब्रेरी के रूप में उपयोग करें:
    • रजिस्ट्री हाइव पर पुनरावृत्ति करें, रूट या किसी दिए गए पथ से, और सभी सबकीज़ और मान प्राप्त करें
    • विशिष्ट सबकीज़ और मान पढ़ें
    • रजिस्ट्री हाइव पर ट्रांज़ैक्शन लॉग लागू करें
  • कमांड लाइन टूल्स
    • पूरी रजिस्ट्री हाइव को json में डंप करें
    • रजिस्ट्री हाइव पर ट्रांज़ैक्शन लॉग लागू करें
    • रजिस्ट्री हाइव्स की तुलना करें
    • एक मजबूत प्लगइन सिस्टम से प्लगइन्स निष्पादित करें (जैसे: amcache, shimcache, कंप्यूटर नाम निकालें...)

Python 3.9 या उच्चतर आवश्यक है।

इंस्टॉलेशन

Regipy का नवीनतम संस्करण pypi से इंस्टॉल किया जा सकता है:

pip install regipy[full]

नोट: regipy[full] उन निर्भरताओं को इंस्टॉल करता है जिनके लिए कंपाइलेशन टूल्स की आवश्यकता होती है और इसमें कुछ समय लग सकता है। [full] को छोड़कर, शिथिल निर्भरताओं वाला संस्करण इंस्टॉल करना भी संभव है।

साथ ही, रिपॉजिटरी को क्लोन करके और निम्नलिखित निष्पादित करके स्रोत से इंस्टॉल करना संभव है:

pip install --editable .[full]

Rust-accelerated बैकएंड (alpha)

कोर REGF पार्सर का एक वैकल्पिक Rust कार्यान्वयन एक opt-in बैकएंड के रूप में उपलब्ध है, जो PyPI पर अलग से 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.

यह एक drop-in प्रतिस्थापन है जिसे पूरे test-hive कॉर्पस पर शुद्ध-Python पार्सर के विरुद्ध 1:1 सत्यापित किया गया है — प्रत्येक key path, timestamp, value और plugin output, मेल खाते SHA-256 traversal digests द्वारा प्रमाणित (देखें regipy_tests/comparison_test.py और regipy-rs/BENCHMARKS.md का Forensic parity evidence अनुभाग)।

मानों के साथ पूर्ण traversal (recurse_subkeys), 3 रनों में से सर्वश्रेष्ठ:

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 दिखाता है क्यों: Python बैकएंड में, traversal समय प्रति-रिकॉर्ड construct struct पार्सिंग और value डिकोडिंग द्वारा प्रभुत्व रखता है; Rust बैकएंड के साथ, पार्सर प्रोफ़ाइल से पूरी तरह गायब हो जाता है और एकमात्र शेष Python लागत लौटाए गए Subkey dataclasses का निर्माण है। पूर्ण प्रोफ़ाइल, प्रति-hive digests और कुछ जानबूझकर किए गए विचलनों (दूषित hives पर exception प्रकार, cycle-guard व्यवहार) का दस्तावेज़ीकरण करने वाला एक अस्वीकरण regipy-rs/BENCHMARKS.md में है; python regipy-rs/benchmark.py पूरी रिपोर्ट को पुनः उत्पन्न करता है।

शुद्ध-Python पार्सर डिफ़ॉल्ट बना हुआ है और जब Rust बैकएंड इंस्टॉल नहीं है तो अप्रभावित रहता है।

CLI

हेडर पार्स करें

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

उदाहरण आउटपुट:

╒════════════════════════╤══════════╕
│ 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
  • किसी hive के हेडर को पार्स करते समय, checksum सत्यापन और transaction सत्यापन भी किए जाते हैं

पूरी hive को डिस्क पर डंप करें (इसमें कुछ समय लग सकता है)

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

regipy-dump उपयोगिता JSON के बजाय timeline भी आउटपुट कर सकती है, -t फ़्लैग जोड़कर

Hive पर प्रासंगिक प्लगइन्स चलाएँ

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

hive प्रकार स्वचालित रूप से पहचाना जाएगा और प्रासंगिक प्लगइन्स निष्पादित किए जाएंगे। अधिक जानकारी के लिए प्लगइन्स अनुभाग देखें

रजिस्ट्री हाइव्स की तुलना करें

एक ही प्रकार की रजिस्ट्री हाइव्स की तुलना करें और CSV में आउटपुट करें (यदि -o निर्दिष्ट नहीं है तो आउटपुट स्क्रीन पर प्रिंट होगा)

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

उदाहरण आउटपुट:

[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

ट्रांज़ैक्शन लॉग का उपयोग करके रजिस्ट्री हाइव रिकवर करें

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

रिकवर करने के बाद, क्या बदला यह देखने के लिए registry-diff के साथ hives की तुलना करें

लाइब्रेरी के रूप में उपयोग करना

रजिस्ट्री hive ऑब्जेक्ट आरंभ करें

from regipy.registry import RegistryHive

reg = RegistryHive("/Users/martinkorman/Documents/TestEvidence/Registry/Vibranium-NTUSER.DAT")

श्रेणियाँ