Skip to content
KitploitKITPLOIT
工具漏洞利用博客
Log in
提交
工具漏洞利用博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

··订阅源·联系·隐私·© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
regipy — Regipy 是一个独立于操作系统的 Python 库,用于解析离线注册表配置单元。 | Kitploit
工具/GitHubGitHub/mkorman90/regipy
取证分析数字取证威胁情报事件响应
GitHubmkorman90/regipy

regipy

Regipy 是一个独立于操作系统的 Python 库,用于解析离线注册表配置单元。

查看仓库
27759192天前Kitploit 审核通过

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

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 加速后端(alpha)

核心 REGF 解析器的可选 Rust 实现作为选择性启用的后端提供,单独发布到 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.

它是一个可直接替换的替代品,在整个测试配置单元语料库上与纯 Python 解析器进行了 1:1 验证——每个键路径、时间戳、值和插件输出,均通过匹配的 SHA-256 遍历摘要进行公证(参见 regipy_tests/comparison_test.py 以及 regipy-rs/BENCHMARKS.md 的 Forensic parity evidence 部分)。

带值的完整遍历(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 后端中,遍历时间主要由每条记录的 construct 结构解析和值解码占据;使用 Rust 后端时,解析器完全从性能分析中消失,仅剩的 Python 开销是构造返回的 Subkey 数据类。 完整的性能分析、每个配置单元的摘要以及记录少数有意差异(损坏配置单元上的异常类型、循环保护行为)的免责声明均在 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
  • 解析配置单元头部时,还会进行校验和验证和事务验证

将整个配置单元转储到磁盘(这可能需要一些时间)

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

regipy-dump 工具还可以通过添加 -t 标志来输出时间线而不是 JSON

在配置单元上运行相关插件

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()
下载工具