Voltar às atualizações
New releaseAug 20, 2026

regipy v6.3.0

Regipy é uma biblioteca python independente de sistema operacional para análise de hives de registro offline.

Compartilhar

regipy

OpenSSF Scorecard

⚠️ Alterações significativas na v6.0.0

A versão 6.0.0 inclui alterações significativas de modernização:

  • Requer Python 3.9+ - Suporte removido para Python 3.6, 3.7 e 3.8
  • Biblioteca attrs removida - As classes de dados agora usam o módulo dataclasses nativo do Python
  • Se o seu código importa classes internas (Cell, VKRecord, Value, Subkey) e usa funções attrs como attr.asdict(), mude para dataclasses.asdict()

Consulte o CHANGELOG para todos os detalhes.

Regipy é uma biblioteca Python para analisar hives de registro offline (arquivos Hive com cabeçalho REGF). O regipy tem muitas capacidades:

  • Usar como biblioteca:
    • Percorrer recursivamente o hive de registro, a partir da raiz ou de um caminho fornecido, e obter todas as subchaves e valores
    • Ler subchaves e valores específicos
    • Aplicar logs de transação num hive de registro
  • Ferramentas de Linha de Comandos
    • Exportar um hive de registro completo para json
    • Aplicar logs de transação num hive de registro
    • Comparar hives de registro
    • Executar plugins de um sistema de plugins robusto (ex.: amcache, shimcache, extrair nome do computador...)

Requer Python 3.9 ou superior.

Instalação

A versão mais recente do Regipy pode ser instalada a partir do pypi:

pip install regipy[full]

NOTA: regipy[full] instala dependências que requerem ferramentas de compilação e podem demorar algum tempo. É possível instalar uma versão com dependências relaxadas, omitindo o [full].

Além disso, é possível instalar a partir do código-fonte clonando o repositório e executando:

pip install --editable .[full]

Backend acelerado em Rust (alpha)

Uma implementação opcional em Rust do parser REGF principal está disponível como backend opcional, publicada separadamente no PyPI como regipy-rs:

pip install regipy[rust]
from regipy.registry_rs import RegistryHive  # em vez de regipy.registry

reg = RegistryHive("/tmp/NTUSER.dat")
# Mesma API: get_key, iter_values, recurse_subkeys, plugins — tudo
# funciona sem alterações, incluindo todos os plugins do regipy.

É um substituto direto validado 1:1 contra o parser puro em Python sobre todo o corpus de hives de teste — cada caminho de chave, timestamp, valor e saída de plugin, notarizado por digests de travessia SHA-256 correspondentes (ver regipy_tests/comparison_test.py e a secção Forensic parity evidence de regipy-rs/BENCHMARKS.md).

Travessia completa com valores (recurse_subkeys), melhor de 3 execuções:

HiveChavesPythonRustAceleração
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

O cProfile mostra porquê: no backend Python, o tempo de travessia é dominado pela análise de estruturas construct por registo e pela descodificação de valores; com o backend Rust, o parser desaparece completamente do perfil e o único custo Python restante é a construção das dataclasses Subkey retornadas. Os perfis completos, digests por hive e um aviso documentando as poucas divergências intencionais (tipos de exceção em hives corrompidos, comportamento de proteção contra ciclos) estão em regipy-rs/BENCHMARKS.md; python regipy-rs/benchmark.py regenera o relatório completo.

O parser puro em Python continua a ser o padrão e não é afetado quando o backend Rust não está instalado.

CLI

Analisar o cabeçalho

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

Exemplo de saída:

╒════════════════════════╤══════════╕
│ 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
  • Ao analisar o cabeçalho de um hive, também são feitas a validação de checksum e as validações de transação

Exportar o hive completo para disco (isto pode demorar algum tempo)

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

O utilitário regipy-dump também pode gerar uma linha temporal em vez de um JSON, adicionando a flag -t

Executar plugins relevantes no Hive

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

O tipo de hive será detetado automaticamente e os plugins relevantes serão executados. Consulte a secção de plugins para mais informações

Comparar hives de registro

Comparar hives de registro do mesmo tipo e exportar para CSV (se -o não for especificado, a saída será impressa no ecrã)

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

Exemplo de saída:

[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

Recuperar um hive de registro, usando logs de transação

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

Após a recuperação, compare os hives com registry-diff para ver o que mudou

Usar como biblioteca

Categorias