o
    j                     @   s   d dl mZ d dl mZ d dlZd dlZd dlZd dlmZmZ d dl	m
Z
 d dlmZ d dlmZ dd	 Zd
d Zdd Zdd ZdddZdd Zdd ZedkrXe  dS dS )    )division)print_functionN)	unhexlifyhexlify)logger)version)winregistryc                 C   s|   d}g d}d}|D ]}|t | || dd d  }q
g d}d}tt|D ]
}||||  7 }q+tt| d S )NzControlSet001\Control\Lsa\)JDSkew1GBGData zutf-16le   )r               	         r               
         )r   getClassdecoderangelenprintr   )reg	baseClasskeystmpKeykey
transformssyskeyi r*   /root/aizidognhua/tmp/workspace/projects/ec89d86c-575f-41c9-af57-ac45cbdbf775/venv/lib/python3.10/site-packages/../../../bin/registry-read.pybootKey"   s   &r,   c                 C   sV   t |}t |}| |}|d u rd S td|  td| dd t|d d S )N[%s]zValue for Class %s: 
 endz   )ntpathdirnamebasenamer   r!   r   hexdump)r"   	classNameregKeyregClassvaluer*   r*   r+   r   2   s   


r   c                 C   s^   t |}t |}| |}td|  |d u rd S td| dd | |d |d  d S )N[%s]
zValue for %s:
    r.   r/   r   r   )r1   r2   r3   getValuer!   
printValue)r"   keyValuer6   regValuer8   r*   r*   r+   r:   A   s   


r:   c                 C   s   |  |}|d u rd S td|  | |}t| |D ]7}td| dd | ||d}|d tjkrItd | |d |d  td q| |d |d  qd S )	Nr9   z	  %-30s: r.   r/   zutf-8r   r   r   )findKeyr!   
enumValuesr:   r   r   
REG_BINARYr;   )r"   	searchKeyr&   valuesr8   datar*   r*   r+   r?   O   s   


r?     c                 C   s   |  |}|d u rd S | |}|D ]+}td||f  |du r=|dkr0t| d| ||d  qt| d||f ||d  qd S )Nz%s%sT\z\%srD   z%s\%s)r>   enumKeyr!   )r"   rA   isRecursiveindent	parentKeyr$   r&   r*   r*   r+   rF   e   s   

rF   c                 C   s
   |  |S )N)walk)r"   keyNamer*   r*   r+   rJ   u   s   
rJ   c            	      C   s  t tj tjddd} | jdddd | jddd	d | jd
ddd | jddd}|jddd}|jddddd |jdddddd |jddd}|jddddd |jddd}|jddddd |jd d!d}|jdddd"d |jd#d$d}|jdddd%d tt	j
d&kr|   t	d& |  }t|j|j t|j}|j d'krt d(|j  t||j|j n7|j d)krt||j n)|j d*krt||j n|j d+krt||j n|j d,krt||j |  d S )-NTzReads data from registry hives.)add_helpdescriptionz-debug
store_truezTurn DEBUG output ON)actionhelpz-tsz&Adds timestamp to every logging outputhivestorezregistry hive to openactionsrO   )rP   destenum_keyz9enumerates the subkeys of the specified open registry key)rP   z-namezregistry key)rO   requiredrP   z
-recursive	recursiveFz recursive search (default False))rT   rO   rV   rP   enum_valuesz9enumerates the values for the specified open registry key	get_valuez3retrieves the data for the specified registry valuezregistry value	get_classz3retrieves the data for the specified registry classzregistry class namerJ   z*walks the registry from the name node downz.registry class name to start walking down fromr   ENUM_KEYr-   ENUM_VALUES	GET_VALUE	GET_CLASSWALK)r!   r   BANNERargparseArgumentParseradd_argumentadd_subparsers
add_parserr    sysargv
print_helpexit
parse_argsr   inittsdebugr   get_registry_parserrQ   rO   uppernamerF   rW   r?   r:   r   rJ   close)	parser
subparsersenumkey_parserenumvalues_parsergetvalue_parsergetclass_parserwalk_parseroptionsr"   r*   r*   r+   mainy   sF   

rz   __main__)rD   )
__future__r   r   rf   ra   r1   binasciir   r   impacket.examplesr   impacketr   r   r,   r   r:   r?   rF   rJ   rz   __name__r*   r*   r*   r+   <module>   s&   
6
