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r¾t d(|j ƒ t||j|jƒ n7|j ¡ d)krÌt||jƒ n)|j ¡ d*krÚt||jƒ n|j ¡ d+krèt||jƒ n|j ¡ d,krõt||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
ÿ