o
    Žõ±jÍk  ã                   @   sÄ  d dl Z d dlZd dlZd dlZd dlmZ d dlmZ d dlm	Z	 d dl
mZ d dlmZ d dl
mZ d dlmZ d d	lmZ d d
lmZmZ d dlmZ d dlmZ d dlmZmZmZmZmZm Z m!Z!m"Z" d dl#m$Z$ e$d+dd„ƒZ%G dd„ de j&ƒZ'e'j(e'j(e'j)e'j)e'j*e'j*e'j+e'j+e'j,e'j,e'j-e'j,dœZ.G dd„ de j/ƒZ0G dd„ de j&ƒZ1dd„ Z2G dd„ dƒZ3G dd„ dƒZ4G d d!„ d!ƒZ5d"d#„ Z6d$d%„ Z7d&d'„ Z8d(d)„ Z9e:d*kràe; <e9ƒ ¡ dS dS ),é    N)ÚSMBDCEFactory©ÚSMBConnection)ÚDCERPC5Connection)Úrrp)Úlogger)Úsystem_errors)ÚFILETIME)ÚSECURITY_DESCRIPTOR)ÚACCESS_ALLOWED_ACEÚAceFlags)ÚSID)ÚSECURITY_INFORMATION)ÚRPC_C_AUTHN_LEVEL_NONEÚRPC_C_AUTHN_LEVEL_CONNECTÚRPC_C_AUTHN_LEVEL_CALLÚRPC_C_AUTHN_LEVEL_PKTÚRPC_C_AUTHN_LEVEL_PKT_INTEGRITYÚRPC_C_AUTHN_LEVEL_PKT_PRIVACYÚDCERPCExceptionÚRPC_C_AUTHN_GSS_NEGOTIATE)ÚasynccontextmanagerTFc                 C  sR   �t j| |||d�I d H \}}|r|‚z|V  W | ¡ I d H  d S | ¡ I d H  w )N©Ú
auth_levelÚopenÚperform_dummy)ÚRRPRPCÚfrom_smbconnectionÚclose)Ú
connectionr   r   r   ÚinstanceÚerr© r"   ú�/root/aizidognhua/tmp/workspace/projects/ec89d86c-575f-41c9-af57-ac45cbdbf775/venv/lib/python3.10/site-packages/aiosmb/dcerpc/v5/interfaces/remoteregistry.pyÚrrprpc_from_smb   s   €"r$   c                   @   s(   e Zd ZdZdZdZdZdZdZdZ	dS )	ÚHKEYr   é   é   é   é   é   é   N)
Ú__name__Ú
__module__Ú__qualname__ÚCLASSES_ROOTÚCURRENT_USERÚLOCAL_MACHINEÚUSERSÚPERFORMANCE_DATAÚCURRENT_CONFIGÚDYN_DATAr"   r"   r"   r#   r%   (   s    r%   )ÚHKEY_LOCAL_MACHINEÚHKLMÚHKEY_CURRENT_USERÚHKCUÚHKEY_CLASSES_ROOTÚHKCRÚ
HKEY_USERSÚHKUÚHKEY_PERFORMANCE_DATAÚHKPDÚHKEY_CURRENT_CONFIGÚHKCCc                   @   s8   e Zd ZdZdZdZdZdZdZdZ	dZ
d	Zd
ZdZdS )ÚREG_ACCESS_MASKl        i   i    i   i   i   i   i   i   i   i   N)r,   r-   r.   ÚGENERIC_READÚGENERIC_WRITEÚGENERIC_EXECUTEÚGENERIC_ALLÚMAXIMUM_ALLOWEDÚACCESS_SYSTEM_SECURITYÚSYNCHRONIZEÚWRITE_OWNERÚ
WRITE_DACLÚREAD_CONTROLÚDELETEr"   r"   r"   r#   rB   @   ó    rB   c                   @   s8   e Zd ZdZdZdZdZdZdZdZ	dZ
dZdZd	Zd
S )ÚREG_VAL_TYPEr(   r)   r*   r'   r+   é   r   é   r&   N)r,   r-   r.   ÚBINARYÚDWORDÚDWORD_LITTLE_ENDIANÚDWORD_BIG_ENDIANÚ	EXPAND_SZÚLINKÚMULTI_SZÚNONEÚQWORDÚQWORD_LITTLE_ENDIANÚSZr"   r"   r"   r#   rO   M   rN   rO   c                 C   sr   | t jkr
| d¡S | t jt jfv rtj|ddd�S | t jkr'tj|ddd�S | t jt j	fv r7tj|ddd�S |S )Nz	utf-16-leÚlittleF)Ú	byteorderÚsignedÚbig)
rO   r\   ÚdecoderS   rT   ÚintÚ
from_bytesrU   rZ   r[   )Ú
value_typeÚ
value_datar"   r"   r#   Úreg_decode_valueZ   s   


rf   c                   @   sF  e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Ze	dBde
dedefdd„ƒZe	dBdededefdd„ƒZdd„ Zejfdd„Zejfdd„Zdd„ Zdd „ Zd!d"„ Zd#d$„ Zd%d&„ Zd'd(„ Zd)ejfd*d+„Zd,d-„ Zd.d/„ Zejfd0d1„Zejfd2d3„Z dCd4d5„Z!d6d7„ Z"d8d9„ Z#d:d;„ Z$d<d=„ Z%ejfd>d?„Z&dDd@dA„Z'dS )Er   c                 C   s$   d| _ tj| _d | _i | _d| _d S )Nz\winregr   )Úservice_pipenamer   ÚMSRPC_UUID_RRPÚservice_uuidÚdceÚhandlesÚ_RRPRPC__current_handle_id©Úselfr"   r"   r#   Ú__init__g   s
   
zRRPRPC.__init__c                 C   s"   | j }|  j d7  _ || j|< |S ©Nr&   )rl   rk   )rn   ÚhkeyÚhidr"   r"   r#   Ú__get_handlen   s   
zRRPRPC.__get_handlec                 Ã   s6   �t |tƒr|  |¡I d H \}}|d ur|‚| j| S ©N)Ú
isinstancer%   ÚConnectRegistryrk   )rn   Úkeyr!   r"   r"   r#   Ú__get_rawhandlet   s   €

zRRPRPC.__get_rawhandlec                 Ã   s   �| S rt   r"   rm   r"   r"   r#   Ú
__aenter__|   s   €zRRPRPC.__aenter__c                 Ã   s   �|   ¡ I d H  dS )N©TN)r   )rn   Úexc_typeÚexcÚ	tracebackr"   r"   r#   Ú	__aexit__   s   €zRRPRPC.__aexit__c              
   Ã   sb   �z| j D ]
}|  |¡I d H  q| j ¡ I d H  W d S  ty0 } z
d|fW  Y d }~S d }~ww ©NF)rk   ÚCloseKeyrj   Ú
disconnectÚ	Exception)rn   rq   Úer"   r"   r#   r   ƒ   s   €
€ÿzRRPRPC.closeNTFr   r   r   c              
   Ã   sª   �z=t ƒ }| |_|j |¡ |d u r|j t¡ |j ¡ I d H \}}|d ur(|‚|j |j¡I d H \}}|d ur:|‚|d fW S  tyT } z
d|fW  Y d }~S d }~ww r   )r   rj   Úset_auth_levelr   ÚconnectÚbindri   r‚   )r   r   r   r   ÚserviceÚ_r!   rƒ   r"   r"   r#   Úfrom_rpcconnectionŒ   s$   €
€ÿzRRPRPC.from_rpcconnectionc              
   Ã   s‚   �z)|du rt }t| tƒ jd�}tj| ¡ |||d�I dH \}}|dur&|‚|dfW S  ty@ } z
d|fW  Y d}~S d}~ww )z–
		Creates the connection to the service using an established SMBConnection.
		This connection will use the given SMBConnection as transport layer.
		N)Úfilenamer   )r   r   r   rg   r‰   Úget_dce_rpcr‚   )r   r   r   r   Úrpctransportr‡   r!   rƒ   r"   r"   r#   r   ¢   s   € 
€ÿzRRPRPC.from_smbconnectionc              
   Ã   s¢   �z|   |¡I d H }t | j|¡I d H \}}|d ur|‚W dS  tyP } z&t|tjƒrBd t| ¡ t	j
| ¡  d ƒfW  Y d }~S d |fW  Y d }~S d }~ww ©Nrz   r&   )Ú_RRPRPC__get_rawhandler   ÚhBaseRegCloseKeyrj   r‚   ru   ÚDCERPCSessionErrorÚOSErrorÚget_error_coder   ÚERROR_MESSAGES©rn   rw   rˆ   r!   rƒ   r"   r"   r#   r€   ¶   s   €,€ýzRRPRPC.CloseKeyc              
   Ã   s”  �z–d }d }|t jkrtj| j|jd�I d H \}}nk|t jkr.tj| j|jd�I d H \}}nW|t jkrBtj	| j|jd�I d H \}}nC|t j
krVtj| j|jd�I d H \}}n/|t jkrjtj| j|jd�I d H \}}n|t jkr~tj| j|jd�I d H \}}ntd|j ƒ‚|d urŽd |fW S |  |d ¡d fW S  tyÉ } z&t|tjƒr»d t| ¡ tj| ¡  d ƒfW  Y d }~S d |fW  Y d }~S d }~ww )N©Ú
samDesiredz'Not supported registry hive to open: %sÚphKeyr&   )r%   r/   r   ÚhOpenClassesRootrj   Úvaluer0   ÚhOpenCurrentUserr1   ÚhOpenLocalMachiner2   Ú
hOpenUsersr3   ÚhOpenPerformanceDatar4   ÚhOpenCurrentConfigr‚   ÚnameÚ_RRPRPC__get_handleru   r�   r‘   r’   r   r“   )rn   rw   ÚaccessÚresr!   rƒ   r"   r"   r#   rv   Â   s4   €






,€ýzRRPRPC.ConnectRegistryc              
   Ã   s¸   �z(|   |¡I d H }tj| j|||jd�I d H \}}|d ur |‚|  |d ¡d fW S  ty[ } z&t|tjƒrMd t	| 
¡ tj| 
¡  d ƒfW  Y d }~S d |fW  Y d }~S d }~ww )Nr•   Ú	phkResultr&   )rŽ   r   ÚhBaseRegCreateKeyrj   r™   r    r‚   ru   r�   r‘   r’   r   r“   )rn   rw   Úsub_keyr¡   r¢   r!   rƒ   r"   r"   r#   Ú	CreateKeyæ   s   € ,€ýzRRPRPC.CreateKeyc              
   Ã   ó¤   �z|   |¡I d H }t | j||¡I d H \}}|d ur|‚W dS  tyQ } z&t|tjƒrCd t| ¡ t	j
| ¡  d ƒfW  Y d }~S d |fW  Y d }~S d }~ww r�   )rŽ   r   ÚhBaseRegDeleteKeyrj   r‚   ru   r�   r‘   r’   r   r“   )rn   rw   r¥   r¢   r!   rƒ   r"   r"   r#   Ú	DeleteKeyó   s   €,€ýzRRPRPC.DeleteKeyc              
   Ã   r§   r�   )rŽ   r   ÚhBaseRegDeleteValuerj   r‚   ru   r�   r‘   r’   r   r“   )rn   rw   r™   rˆ   r!   rƒ   r"   r"   r#   ÚDeleteValue  s   €,€ýzRRPRPC.DeleteValuec              
   Ã   s¬   �z"|   |¡I d H }t | j||¡I d H \}}|d ur|‚|d d fW S  tyU } z&t|tjƒrGd t| ¡ t	j
| ¡  d ƒfW  Y d }~S d |fW  Y d }~S d }~ww )NÚ	lpNameOutr&   )rŽ   r   ÚhBaseRegEnumKeyrj   r‚   ru   r�   r‘   r’   r   r“   )rn   rw   Úindexr¢   r!   rƒ   r"   r"   r#   ÚEnumKey  s   €,€ýzRRPRPC.EnumKeyc           	      Ã   sÜ   �z6|   |¡I d H }t | j||¡I d H \}}|d ur|‚|d }t|d ƒ}t|d |d ¡ƒ}|||d fW S  tym } z*t|tj	ƒr]d d d t
| ¡ tj| ¡  d ƒfW  Y d }~S d d d |fW  Y d }~S d }~ww )NÚlpValueNameOutÚlpTypeó    ÚlpDatar&   )rŽ   r   ÚhBaseRegEnumValuerj   rO   rf   Újoinr‚   ru   r�   r‘   r’   r   r“   )	rn   rw   r®   r¢   r!   Ú
value_namerd   re   rƒ   r"   r"   r#   Ú	EnumValue  s    €0€ýzRRPRPC.EnumValuec              
   Ã   sš   �z|   |¡I d H }t | j|¡I d H \}}d|fW S  tyL } z&t|tjƒr>d t| ¡ t	j
| ¡  d ƒfW  Y d }~S d |fW  Y d }~S d }~ww )NTr&   )rŽ   r   ÚhBaseRegFlushKeyrj   r‚   ru   r�   r‘   r’   r   r“   r”   r"   r"   r#   ÚFlushKey-  s   €
,€ýzRRPRPC.FlushKeyc              
   Ã   s¦   �z|   |¡I d H }t | j|||¡I d H \}}|d ur|‚W dS  tyR } z&t|tjƒrDd t| ¡ t	j
| ¡  d ƒfW  Y d }~S d |fW  Y d }~S d }~ww r�   )rŽ   r   ÚhBaseRegLoadKeyrj   r‚   ru   r�   r‘   r’   r   r“   )rn   rw   r¥   Ú	file_namerˆ   r!   rƒ   r"   r"   r#   ÚLoadKey7  s   €,€ýzRRPRPC.LoadKeyr   c              
   Ã   s¶   �z'|   |¡I d H }t | j|||j¡I d H \}}|d ur|‚|  |d ¡d fW S  tyZ } z&t|tjƒrLd t	| 
¡ tj| 
¡  d ƒfW  Y d }~S d |fW  Y d }~S d }~ww )Nr£   r&   )rŽ   r   ÚhBaseRegOpenKeyrj   r™   r    r‚   ru   r�   r‘   r’   r   r“   )rn   rw   r¥   Úreservedr¡   r¢   r!   rƒ   r"   r"   r#   ÚOpenKeyD  s   €,€ýzRRPRPC.OpenKeyc                 Ã   sÒ   �z1|   |¡I d H }t | j|¡I d H \}}|d ur|‚|d }|d }t |d ¡j}|||d fW S  tyh } z*t|tj	ƒrXd d d t
| ¡ tj| ¡  d ƒfW  Y d }~S d d d |fW  Y d }~S d }~ww )NÚ
lpcSubKeysÚ	lpcValuesÚlpftLastWriteTimer&   )rŽ   r   ÚhBaseRegQueryInfoKeyrj   r	   Ú	from_dictÚdatetimer‚   ru   r�   r‘   r’   r   r“   )rn   rw   r¢   r!   Ú
subkey_cntÚ
values_cntÚlastwrite_timerƒ   r"   r"   r#   ÚQueryInfoKeyQ  s    €0€ýzRRPRPC.QueryInfoKeyc              
   Ã   s¦   �z|   |¡I d H }t | j|¡I d H \}}|d ur|‚|d fW S  tyR } z&t|tjƒrDd t| ¡ t	j
| ¡  d ƒfW  Y d }~S d |fW  Y d }~S d }~ww rp   )rŽ   r   rÃ   rj   r‚   ru   r�   r‘   r’   r   r“   )rn   rw   r¢   r!   rƒ   r"   r"   r#   ÚQueryInfoKeySpecialc  s   €
,€ýzRRPRPC.QueryInfoKeySpecialc              
   Ã   s°   �z$|   |¡I d H }tj| j||d�I d H \}}|d ur|‚t |¡d fW S  tyW } z&t|tjƒrId t	| 
¡ tj| 
¡  d ƒfW  Y d }~S d |fW  Y d }~S d }~ww )N©ÚsecurityInformationr&   )rŽ   r   ÚhBaseRegGetKeySecurityrj   r
   rc   r‚   ru   r�   r‘   r’   r   r“   )rn   rw   rÌ   r¢   r!   rƒ   r"   r"   r#   ÚGetKeySecurityt  s   €,€ýzRRPRPC.GetKeySecurityc              
   Ã   s¬   �z"|   |¡I d H }tj| j|| ¡ |d�I d H \}}|d ur!|‚W dS  tyU } z&t|tjƒrGd t| 	¡ t
j| 	¡  d ƒfW  Y d }~S d |fW  Y d }~S d }~ww )NrË   rz   r&   )rŽ   r   ÚhBaseRegSetKeySecurityrj   Úto_bytesr‚   ru   r�   r‘   r’   r   r“   )rn   rw   Úsecurity_descriptorrÌ   rˆ   r!   rƒ   r"   r"   r#   ÚSetKeySecurity�  s   €",€ýzRRPRPC.SetKeySecurityc              
   Ã   s´   �z$|   |¡I d H }tj| j|||d�I d H \}}}|d ur |‚|||fW S  tyY } z(t|tjƒrJd d t| ¡ t	j
| ¡  d ƒfW  Y d }~S d d |fW  Y d }~S d }~ww )N©Úunpack_valsr&   )rŽ   r   ÚhBaseRegQueryValuerj   r‚   ru   r�   r‘   r’   r   r“   )rn   rw   r¶   rÔ   Úval_typer™   r!   rƒ   r"   r"   r#   Ú
QueryValueŽ  s   € .€ýzRRPRPC.QueryValuec              
   Ã   s¨   �z |   |¡I d H }t | j||¡I d H \}}|d ur|‚|d fW S  tyS } z&t|tjƒrEd t| ¡ t	j
| ¡  d ƒfW  Y d }~S d |fW  Y d }~S d }~ww rp   )rŽ   r   ÚhBaseRegSaveKeyrj   r‚   ru   r�   r‘   r’   r   r“   )rn   rw   r»   r¢   r!   rƒ   r"   r"   r#   ÚSaveKeyš  s   €
,€ýzRRPRPC.SaveKeyc              
   Ã   s®   �z!|   |¡I d H }t | j|||j|¡I d H \}}|d ur |‚W dS  tyV } z(t|tjƒrGd d t| 	¡ t
j| 	¡  d ƒfW  Y d }~S d d |fW  Y d }~S d }~ww r�   )rŽ   r   ÚhBaseRegSetValuerj   r™   r‚   ru   r�   r‘   r’   r   r“   )rn   rw   r¥   rÖ   Úval_datar¢   r!   rƒ   r"   r"   r#   ÚSetValue§  s   € .€ýzRRPRPC.SetValuec              
   Ã   óœ   �zt  | j¡I d H \}}|d ur|‚|d d fW S  tyM } z(t|t jƒr>d d t| ¡ tj	| ¡  d ƒfW  Y d }~S d d |fW  Y d }~S d }~ww ©Nr—   r&   )
r   ÚhOpenPerformanceTextrj   r‚   ru   r�   r‘   r’   r   r“   ©rn   r¢   r!   rƒ   r"   r"   r#   ÚOpenPerformanceTextµ  ó   €.€ýzRRPRPC.OpenPerformanceTextc              
   Ã   rÝ   rÞ   )
r   ÚhOpenPerformanceNlsTextrj   r‚   ru   r�   r‘   r’   r   r“   rà   r"   r"   r#   ÚOpenPerformanceNlsTextÀ  râ   zRRPRPC.OpenPerformanceNlsTextc           	   
   Ã   sÄ   �z-|  dd¡\}}t| }| j||d�I d H \}}|d ur#d |fW S | j|||d�I d H W S  tya } z't|tjƒrSd d t| 	¡ t
j| 	¡  d ƒfW  Y d }~S d |fW  Y d }~S d }~ww )Nú\r&   ©r¡   )ÚsplitÚhkey_abbrevrv   r¿   r‚   ru   r   r�   r‘   r’   r   r“   )	rn   Úfullpathr¡   Úreg_rootÚkey_pathÚroot_keyrw   r!   rƒ   r"   r"   r#   ÚOpenRegPathË  s   €
.€ýzRRPRPC.OpenRegPathc              
   Ã   sÆ   �zK|d u r|   tj¡I d H \}}|d ur|‚g }tdƒD ]*}|  ||¡I d H \}}|d ur7|jdkr5 n|‚| d¡du rG| |d d… ¡ q|d fW S  tyb } z
d |fW  Y d }~S d }~ww )Néÿ   é  zS-1-5-Téÿÿÿÿ)	rv   r%   r2   Úranger¯   ÚerrnoÚ
startswithÚappendr‚   )rn   Úusers_handler!   ÚusersÚir¢   rƒ   r"   r"   r#   Ú	ListUsersÛ  s*   €
€
€ÿzRRPRPC.ListUsers©NTF©Trt   )(r,   r-   r.   ro   r    rŽ   ry   r~   r   Ústaticmethodr   Úboolr‰   r   r   r€   rB   rG   rv   r¦   r©   r«   r¯   r·   r¹   r¼   r¿   rÉ   rÊ   r   ÚOWNERrÎ   rÒ   r×   rÙ   rÜ   rá   rä   rí   rø   r"   r"   r"   r#   r   f   s@    	$

r   c                   @   s”   e Zd ZdZd#dededefdd	„Zd
d„ Zdd„ Zdd„ Z	dd„ Z
d$dd„Zd$dd„Zdd„ Zd%dd„Zd$dd„Zdd„ Zd&dd „Zd'd!d"„ZdS )(ÚSMBWinRegHivez$
	Async version of the hive parser
	úS-1-5-32-544TNÚrrprpcÚ	hive_pathÚ
target_sidc                 C   sR   || _ || _|| _d | _|| _|| _d | _i | _i | _i | _	i | _
i | _i | _d S rt   )Úprint_cbr   r  Úhive_handler  Úcache_enabledÚoriginal_sdÚ_SMBWinRegHive__original_sdÚ_SMBWinRegHive__key_lookupÚ_SMBWinRegHive__names_lookupÚ_SMBWinRegHive__classes_lookupÚ_SMBWinRegHive__values_lookupÚ_SMBWinRegHive__values_lookup_2)rn   r   r  r  r  r  r"   r"   r#   ro   õ  s   
zSMBWinRegHive.__init__c                 Ã   s¤   �| j D ]<}z| jj|| j | tjd�I d H \}}|d ur|‚W q ty@ } z| jd ur6|  d||f ¡ W Y d }~qd }~ww | jD ]}| j |¡I d H  qDd S )NrË   z:[!] Failed to restore security descriptor for %s Reason %s)	r  r   rÒ   r   ÚDACLr‚   r  r  r€   r”   r"   r"   r#   r     s    €
$ÿ
€ý
zSMBWinRegHive.closec                 Ã   sz   �|   |¡I d H }t |¡}tƒ }t | j¡|_d|_t	j
|_	|jj |¡ | jj||tjd�I d H \}}|d ur;|‚|S )Nl   	    rË   )Úget_sdÚcopyÚdeepcopyr   r   Úfrom_stringr  ÚSidÚMaskr   ÚCONTAINER_INHERIT_ACEÚDaclÚacesrô   r   rÒ   r   r  )rn   Ú
key_handleÚoriginal_key_sdÚsecdataÚacerˆ   r!   r"   r"   r#   Ú
add_access  s   €
zSMBWinRegHive.add_accessc                 Ã   s2   �| j j| jtjd�I d H \| _}|d ur|‚d S )Nræ   )r   rí   r  rB   rC   r  )rn   r!   r"   r"   r#   Úsetup)  s
   € ÿzSMBWinRegHive.setupc                 Ã   ó   �t ƒ ‚rt   ©ÚNotImplementedError)rn   ÚparentÚkey_namer"   r"   r#   Úfind_subkey.  s   €zSMBWinRegHive.find_subkeyc           	      Ã   sÒ   �|| j v r| j | S | d¡}| j}|D ]}| jj||tjd�I dH \}}|dur,|‚q|  |¡I dH }| j |¡I dH \}}| j}|D ]}| jj||tjd�I dH \}}|dur\|‚qE|| j |< || j	|< |S )z&Find and return a key by its full pathrå   ræ   N)
r  rç   r  r   r¿   rB   rC   r  r€   r  )	rn   rë   ÚthrowÚkeynamesr  Úkeynamer!   r  rˆ   r"   r"   r#   Úfind_key2  s*   €


ÿÿ

zSMBWinRegHive.find_keyc                 Ã   sÀ   �|| j v r| j | S |  ||¡I dH }|du rdS i }tdƒD ]+}| j ||¡I dH \}}|durC|jdkr9 n|du r?|‚g   S d|| dd¡< q | jdu rZt| 	¡ ƒ| j |< t| 	¡ ƒS )zReturn a list of subkey namesNrî   rï   Tú Ú )
r	  r&  rñ   r   r¯   rò   Úreplacer  ÚlistÚkeys)rn   rë   r#  r  Únamesr÷   r¢   r!   r"   r"   r#   Úenum_keyQ  s&   €



zSMBWinRegHive.enum_keyc                 Ã   s®   �|| j v r| j | S g }tdƒD ]9}| j ||¡I dH \}}}}|dur?t|tƒr1|jdkr1 nt|tƒr=|jdkr= n|‚| 	| 
dd¡ ¡ ¡ q| jdu rU|| j |< |S )zReturn a list of value namesrî   Nrï   r'  r(  T)r  rñ   r   r·   ru   r‘   rò   r   Ú
error_coderô   r)  Úencoder  )rn   rw   Úvaluesr÷   r¶   rd   re   r!   r"   r"   r#   Úlist_valuesl  s    €



zSMBWinRegHive.list_valuesc                 Ã   sÌ   �|| j v r| j | S | d¡}|d }|dkr$d}d |dd… ¡}n	d |dd… ¡}|  ||¡I dH }| jj||dd�I dH \}}	}
|
durT|du rO|
‚dd|
fS | jdu ra||	df| j |< ||	dfS )zReturn a value by its full pathrå   rð   Údefaultr(  NTrÓ   )r  rç   rµ   r&  r   r×   r  )rn   Ú
value_pathr#  rw   r$  r¶   rë   r  rÖ   rÛ   r!   r"   r"   r#   Ú	get_value‚  s$   €





zSMBWinRegHive.get_valuec                 Ã   s”   �|| j v r| j | S |  ||¡I dH }|du rd| j |< dS | j |¡I dH \}}|dur6|du r4|‚dS |d  dd¡}| jdu rH|| j |< |S )zReturn the class value of a keyNTÚ
lpClassOutr'  r(  )r
  r&  r   rÊ   r)  r  )rn   rë   r#  rw   Údatar!   Úresultr"   r"   r#   Ú	get_class�  s    €




zSMBWinRegHive.get_classc                 Ã   s:   �| j j|tjtjB tjB d�I dH \}}|dur|‚|S )z'Return the security descriptor of a keyrË   N)r   rÎ   r   r  rý   ÚGROUP)rn   r  Úsdr!   r"   r"   r#   r  ´  s
   €(zSMBWinRegHive.get_sdrð   c                 Ã   r  )zWalk the registry treer  )rn   ÚpathÚdepthr"   r"   r#   Úwalk»  ó   €zSMBWinRegHive.walkc                 Ã   r  )z&Search the registry tree for a patternr  )rn   ÚpatternÚin_keysÚin_valuenamesÚ	in_valuesr"   r"   r#   Úsearch¿  r>  zSMBWinRegHive.search)rÿ   TNrú   rz   )rð   )TTT)r,   r-   r.   Ú__doc__r   Ústrro   r   r  r  r"  r&  r-  r1  r4  r8  r  r=  rC  r"   r"   r"   r#   rþ   ñ  s    




rþ   c                   @   s   e Zd Zdd„ ZdS )ÚPERF_OBJECT_TYPEc                 C   sj   d | _ d | _d | _d | _d | _d | _d | _d | _d | _d | _	d | _
d | _d | _d | _d | _ d | _ d | _ d S rt   )ÚTotalByteLengthÚDefinitionLengthÚHeaderLengthÚObjectNameTitleIndexÚObjectNameTitleÚObjectHelpTitleIndexÚObjectHelpTitleÚDetailLevelÚNumCountersÚDefaultCounterÚNumInstancesÚCodePageÚPerfTimeÚPerfFreqrm   r"   r"   r#   ro   Å  s"   
zPERF_OBJECT_TYPE.__init__N)r,   r-   r.   ro   r"   r"   r"   r#   rF  Ä  s    rF  c                 Ã   sˆ   �|   tj¡I d H \}}|d urtd| ƒ d S | j|ddd�I d H \}}}|d ur:tt |j¡ƒ td| ƒ d S t|d d… ƒ d S )Núusers error! %szCounter 009FrÓ   éd   )rv   r%   r3   Úprintr×   r}   Ú	format_tbÚ__traceback__)ÚrsÚpref_handler!   rÖ   rÛ   r"   r"   r#   ÚpreftestØ  s   €r\  c                 Ã   sš   �|   d¡I d H \}}t|ƒ |  |¡I d H \}}t| ¡ ƒ tdƒD ]'}|  ||¡I d H \}}}}|d urF|jdkr> d S tt |j	¡ƒ t|ƒ q#d S )Nz?HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersionéÈ   rï   )
rí   rW  rÉ   Údumprñ   r·   rò   r}   rX  rY  )rZ  Úhkr!   r¢   r÷   r¶   rd   re   r"   r"   r#   ÚOpenRegPathTestè  s   €
ý
r`  c           	      Ã   s4  �dd l }|  tj¡I d H \}}|d urtd| ƒ d S td| ƒ tdƒD ](}|  ||¡I d H \}}|d urJ|jdkr> nt|ƒ t| |j	¡ƒ t|ƒ q&|  
|d¡I d H \}}|d urdtd| ƒ t|ƒ tdƒD ]+}|  ||¡I d H \}}}}|d ur“|jdkr‡ d S t|ƒ t| |j	¡ƒ t|ƒ qld S )Nr   rU  zuser handle: %sé
   rï   z-S-1-5-21-3448413973-1765323015-1500960949-500zopenkey failed! %s)r}   rv   r%   r2   rW  rñ   r¯   rò   rX  rY  r¿   r·   )	rZ  r}   rõ   r!   r÷   r¢   r¶   rd   re   r"   r"   r#   ÚConnectRegistryTestù  s8   €



ùrb  c                  Ã   s6  �ddl m}  ddlm} dd l}d}|  |¡}| ¡ }| ¡ I d H \}}|d ur/t|ƒ d S tdƒ t	|ƒ}| 
¡ I d H \}}|d urJt|ƒ d S tdƒ | tj¡I d H \}	}|d uretd| ƒ d S td|	 ƒ td	ƒD ])}
| |	|
¡I d H \}}|d ur”|jd
krˆ d S t|ƒ t| |j¡ƒ t|ƒ qod S )Nr   )ÚSMBConnectionFactoryr   z=smb2+ntlm-password://TEST\Administrator:Passw0rd!1@10.10.10.2zSMB Connected!zRRP Connected!rU  zusers_handle %sra  rï   )Ú!aiosmb.commons.connection.factoryrc  Úaiosmb.connectionr   r}   Úfrom_urlÚget_connectionÚloginrW  ÚRRPr…   rv   r%   r2   rñ   r¯   rò   rX  rY  )rc  r   r}   ÚurlÚsuÚconnrˆ   r!   rZ  rõ   r÷   r¢   r"   r"   r#   Úamain  sB   €

ü
rm  Ú__main__rù   )=ÚenumÚntpathÚ	functoolsr  Ú0aiosmb.dcerpc.v5.common.connection.smbdcefactoryr   re  r   Úaiosmb.dcerpc.v5.connectionr   Úaiosmb.dcerpc.v5r   Úaiosmbr   r   Ú(aiosmb.wintypes.dtyp.structures.filetimer	   Úwinacl.dtyp.security_descriptorr
   Úwinacl.dtyp.acer   r   Úwinacl.dtyp.sidr   Ú>aiosmb.wintypes.dtyp.constrcuted_security.security_informationr   Úaiosmb.dcerpc.v5.rpcrtr   r   r   r   r   r   r   r   Ú
contextlibr   r$   ÚEnumr%   r1   r0   r/   r2   r3   r4   rè   ÚIntFlagrB   rO   rf   r   rþ   rF  r\  r`  rb  rm  r,   ÚasyncioÚrunr"   r"   r"   r#   Ú<module>   sd   (

ô    TXÿ