अपडेट पर वापस जाएँ
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) इम्पोर्ट करता है और attrs फ़ंक्शन जैसे attr.asdict() का उपयोग करता है, तो dataclasses.asdict() पर स्विच करें

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

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

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

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

इंस्टॉलेशन

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

pip install regipy[full]

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

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

pip install --editable .[full]

रस्ट-त्वरित बैकएंड (अल्फा)

कोर REGF पार्सर का एक वैकल्पिक रस्ट कार्यान्वयन एक ऑप्ट-इन बैकएंड के रूप में उपलब्ध है, जो 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.

यह एक ड्रॉप-इन रिप्लेसमेंट है जिसे पूरे टेस्ट-हाइव कॉर्पस पर शुद्ध-पायथन पार्सर के साथ 1:1 सत्यापित किया गया है — प्रत्येक कुंजी पथ, टाइमस्टैम्प, मान और प्लगइन आउटपुट, SHA-256 ट्रावर्सल डाइजेस्ट से मेल खाने वाले प्रमाणित हैं (regipy_tests/comparison_test.py और regipy-rs/BENCHMARKS.md में Forensic parity evidence अनुभाग देखें)।

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

हाइवकुंजियाँपायथनरस्टगति वृद्धि
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 दिखाता है कि क्यों: पायथन बैकएंड में, ट्रावर्सल का समय प्रति-रिकॉर्ड construct स्ट्रक्ट पार्सिंग और वैल्यू डिकोडिंग पर हावी होता है; रस्ट बैकएंड के साथ, पार्सर प्रोफ़ाइल से पूरी तरह गायब हो जाता है और एकमात्र शेष पायथन लागत लौटाए गए Subkey डेटाक्लासेस का निर्माण है। पूर्ण प्रोफ़ाइल, प्रति-हाइव डाइजेस्ट और कुछ जानबूझकर किए गए विचलनों (दूषित हाइव्स पर अपवाद प्रकार, चक्र-गार्ड व्यवहार) का दस्तावेज़ीकरण regipy-rs/BENCHMARKS.md में है; python regipy-rs/benchmark.py पूरी रिपोर्ट को पुनर्जीवित करता है।

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

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
  • किसी हाइव के हेडर को पार्स करते समय, चेकसम सत्यापन और ट्रांजैक्शन सत्यापन भी किए जाते हैं

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

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

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

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

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

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

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

एक ही प्रकार के रजिस्ट्री हाइव्स की तुलना करें और 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 के साथ हाइव्स की तुलना करें यह देखने के लिए कि क्या बदला

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

रजिस्ट्री हाइव ऑब्जेक्ट प्रारंभ करें

from regipy.registry import RegistryHive
reg = RegistryHive('/Users/martinkorman/Documents/TestEvidence/Registry/Vibranium-NTUSER.DAT')

पूरे हाइव पर पुनरावृत्त रूप से चलें, रूट कुंजी से

for entry in reg.recurse_subkeys(as_json=True):
    print(entry)

एक कुंजी पर पुनरावृत्त करें और सभी सबकीज़ और उनके संशोधन समय प्राप्त करें:

for sk in reg.get_key('Software').iter_subkeys():
    print(sk.name, convert_wintime(sk.header.last_modified).isoformat())

Adobe 2019-02-03T22:05:32.525965
AppDataLow 2019-02-03T22:05:32.526047
McAfee 2019-02-03T22:05:32.526140
Microsoft 2019-02-03T22:05:32.526282
Netscape 2019-02-03T22:05:32.526352
ODBC 2019-02-03T22:05:32.526521
Policies 2019-02-03T22:05:32.526592

एक कुंजी के मान प्राप्त करें:

reg.get_key('Software\Microsoft\Internet Explorer\BrowserEmulation').get_values(as_json=True)
[{'name': 'CVListTTL',
  'value': 0,
  'value_type': 'REG_DWORD',
  'is_corrupted': False},
 {'name': 'UnattendLoaded',
  'value': 0,
  'value_type': 'REG_DWORD',
  'is_corrupted': False},
 {'name': 'TLDUpdates',
  'value': 0,
  'value_type': 'REG_DWORD',
  'is_corrupted': False},
 {'name': 'CVListXMLVersionLow',
  'value': 2097211,
  'value_type': 'REG_DWORD',
  'is_corrupted': False},
 {'name': 'CVListXMLVersionHigh',
  'value': None,
  'value_type': 'REG_DWORD',
  'is_corrupted': False},
 {'name': 'CVListLastUpdateTime',
  'value': None,
  'value_type': 'REG_DWORD',
  'is_corrupted': False},
 {'name': 'IECompatVersionHigh',
  'value': None,
  'value_type': 'REG_DWORD',
  'is_corrupted': False},
 {'name': 'IECompatVersionLow',
  'value': 2097211,
  'value_type': 'REG_DWORD',
  'is_corrupted': False},
 {'name': 'StaleCompatCache',
  'value': 0,
  'value_type': 'REG_DWORD',
  'is_corrupted': False}]

प्लगइन के रूप में उपयोग:

from regipy.plugins.ntuser.ntuser_persistence import NTUserPersistencePlugin
NTUserPersistencePlugin(reg, as_json=True).run()

{
	'Software\\Microsoft\\Windows\\CurrentVersion\\Run': {
		'timestamp': '2019-02-03T22:10:52.655462',
		'values': [{
			'name': 'Sidebar',
			'value': '%ProgramFiles%\\Windows Sidebar\\Sidebar.exe /autoRun',
			'value_type': 'REG_EXPAND_SZ',
			'is_corrupted': False
		}]
	}
}

किसी विशिष्ट हाइव के लिए सभी प्रासंगिक प्लगइन्स चलाएँ

from regipy.plugins.utils import run_relevant_plugins
reg = RegistryHive('/Users/martinkorman/Documents/TestEvidence/Registry/SYSTEM')
run_relevant_plugins(reg, as_json=True)

{
	'routes': {},
	'computer_name': [{
		'control_set': 'ControlSet001\\Control\\ComputerName\\ComputerName',
		'computer_name': 'DESKTOP-5EG84UG',
		'timestamp': '2019-02-03T22:19:28.853219'
	}]
}

सत्यापन मामले

सत्यापन मामलों की रिपोर्ट

सभी नए प्लगइन्स में एक या अधिक बुनियादी सत्यापन मामले होने चाहिए (जिन्हें भविष्य में विस्तारित किया जा सकता है), उदाहरण के लिए:

from regipy.plugins.system.bam import BAMPlugin
from regipy_tests.validation.validation import ValidationCase


class NTUserUserAssistValidationCase(ValidationCase):
    # define your plugin class
    plugin = BAMPlugin
    # define the test file name, which should be present in `regipy_tests/data`
    test_hive_file_name = "SYSTEM_WIN_10_1709.xz"

    # Use `expected_entries` to test for presence of a few samples from the plugin results
    expected_entries = [
        {
            "sequence_number": 9,
            "version": 1,
            "sid": "S-1-5-90-0-1",
            "executable": "\\Device\\HarddiskVolume2\\Windows\\System32\\dwm.exe",
            "timestamp": "2020-04-19T09:09:35.731816+00:00",
            "key_path": "\\ControlSet001\\Services\\bam\\state\\UserSettings\\S-1-5-90-0-1",
        }
    ]

    # OR use `exact_expected_result` to test for an exact result:
    exact_expected_result = [
        {
            "sequence_number": 9,
            "version": 1,
            "sid": "S-1-5-90-0-1",
            "executable": "\\Device\\HarddiskVolume2\\Windows\\System32\\dwm.exe",
            "timestamp": "2020-04-19T09:09:35.731816+00:00",
            "key_path": "\\ControlSet001\\Services\\bam\\state\\UserSettings\\S-1-5-90-0-1",
        },
        {
            "sequence_number": 8,
            "version": 1,
            "sid": "S-1-5-90-0-1",
            "executable": "\\Device\\HarddiskVolume2\\Windows\\System32\\cmd.exe",
            "timestamp": "2020-04-19T09:09:34.544224+00:00",
            "key_path": "\\ControlSet001\\Services\\bam\\state\\UserSettings\\S-1-5-90-0-1",
        }
    ]

    expected_entries_count = 2

विकास

विकास के लिए सेटअप

# Clone the repository
git clone https://github.com/mkorman90/regipy.git
cd regipy

# Install in development mode with all dependencies
pip install -e ".[full,dev]"

# Install pre-commit hooks
pre-commit install

परीक्षण चलाना

# Run all tests
pytest

# Run specific test files
pytest regipy_tests/tests.py
pytest regipy_tests/cli_tests.py

# Run plugin validation
PYTHONPATH=. python regipy_tests/validation/plugin_validation.py

कोड गुणवत्ता

# Run linter
ruff check .

# Run formatter
ruff format .

# Run type checker
mypy regipy/

GitHub Actions को स्थानीय रूप से परीक्षण करना

पुश करने से पहले CI वर्कफ़्लो परिवर्तनों का स्थानीय रूप से परीक्षण करने के लिए, act का उपयोग करें:

# Install act (Fedora)
sudo dnf install act-cli

# Install act (macOS)
brew install act

# Install act (other)
# See https://nektosact.com/installation/index.html

सुनिश्चित करें कि Docker चल रहा है, फिर:

# List available jobs
act -l

# Run the lint job
act -j lint

# Run all jobs for a push event
act push

# Run the test job with a specific Python version
act -j test

# Test the build job from publish workflow (simulates a release)
act release -j build --eventpath /dev/stdin <<< '{"action": "published"}'

नोट: कुछ कार्यों को सीक्रेट्स की आवश्यकता हो सकती है। आप उन्हें इस प्रकार प्रदान कर सकते हैं:

act -j publish --secret PYPI_API_TOKEN=your_token

लाइसेंस

MIT

श्रेणियाँ