
regipy v6.3.0
Regipy é uma biblioteca python independente de sistema operacional para análise de hives de registro offline.
regipy
⚠️ 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
attrsremovida - As classes de dados agora usam o módulodataclassesnativo do Python- Se o seu código importa classes internas (
Cell,VKRecord,Value,Subkey) e usa funçõesattrscomoattr.asdict(), mude paradataclasses.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:
| Hive | Chaves | Python | Rust | Aceleração |
|---|---|---|---|---|
| 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 |
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