o
    àý°jyª  ã                   @   s>  d dl mZ d dl mZ d dlmZ d dlZd dlmZ d dl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 d d	lmZmZmZmZmZmZmZmZmZmZmZ d d
l
m Z 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, d dl-m.Z. d dl/m0Z0 d dl1m2Z2 z
d dl3m4Z4m5Z5 W n e6y¯   e 7d¡ e 7d¡ Y nw e%dƒZ8G dd„ de*ƒZ9G dd„ deƒZ:dZ;dZ<dZ=dZ>dZ?d Z@d!ZAeZBeZCdZDdZEdZFd"ZGd#ZHd$ZId%ZJd&ZKd'ZLd(ZMd)ZNd*ZOd+ZPd,ZQd-ZRd.ZSd/ZTd0ZUd1ZVd2ZWd3ZXd4ZYd5ZZd6Z[d7Z\d8Z]d9Z^d'Z_d:Z`d;Zad<Zbd=Zcd>ZddZedZfdZgdZhdZidZjdZkd"Zld"Zmd#Znd$Zod%Zpd&Zqd'Zrd'Zsd(Ztd)Zud*Zvd+Zwd+Zxd,Zyd-Zzd-Z{d.Z|d.Z}d/Z~d0Zd1Z€d2Z�d3Z‚d3Zƒd4Z„d5Z…d6Z†d7Z‡d8Zˆd9Z‰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&Z–d'Z—d(Z˜e&d?ƒZ™e&d@ƒZšeZ›dZœd"Z�d>ZždAZŸdBZ dCZ¡dDZ¢dEZ£dFZ¤dGZ¥dHZ¦dIZ§dJZ¨dKZ©dLZªdMZ«dNZ¬dOZ­dPZ®dQZ¯dZ°dZ±d/Z²d Z³dZ´dZµdZ¶dZ·dZ¸dRZ¹G dSdT„ dTe#ƒZºG dUdV„ dVeƒZ»G dWdX„ dXeƒZ¼G dYdZ„ dZeƒZ½G d[d\„ d\eƒZ¾G d]d^„ d^eƒZ¿G d_d`„ d`eƒZÀG dadb„ dbeƒZÁG dcdd„ dde#ƒZÂG dedf„ dfeƒZÃG dgdh„ dheƒZÄG didj„ djeƒZÅG dkdl„ dleƒZÆG dmdn„ dneƒZÇG dodp„ dpeƒZÈG dqdr„ dreƒZÉG dsdt„ dteƒZÊG dudv„ dveƒZËG dwdx„ dxeƒZÌG dydz„ dzeƒZÍG d{d|„ d|eƒZÎG d}d~„ d~eƒZÏG dd€„ d€eƒZÐG d�d‚„ d‚eƒZÑG dƒd„„ d„eƒZÒG d…d†„ d†eƒZÓG d‡dˆ„ dˆeƒZÔG d‰dŠ„ dŠeƒZÕG d‹dŒ„ dŒeƒZÖG d�dŽ„ dŽeƒZ×G d�d�„ d�eƒZØG d‘d’„ d’eƒZÙG d“d”„ d”eƒZÚG d•d–„ d–eƒZÛG d—d˜„ d˜eƒZÜG d™dš„ dšeƒZÝG d›dœ„ dœeƒZÞG d�dž„ džeƒZßG dŸd „ d eƒZàG d¡d¢„ d¢eƒZáG d£d¤„ d¤eƒZâG d¥d¦„ d¦eƒZãG d§d¨„ d¨eƒZäG d©dª„ dªeƒZåG d«d¬„ d¬eƒZæG d­d®„ d®eƒZçG d¯d°„ d°eƒZèG d±d²„ d²eƒZéG d³d´„ d´eƒZêG dµd¶„ d¶eƒZëG d·d¸„ d¸eƒZìG d¹dº„ dºeƒZíG d»d¼„ d¼eƒZîG d½d¾„ d¾eƒZïG d¿dÀ„ dÀeƒZðG dÁdÂ„ dÂeƒZñG dÃdÄ„ dÄeƒZòG dÅdÆ„ dÆeƒZóG dÇdÈ„ dÈeƒZôG dÉdÊ„ dÊeƒZõG dËdÌ„ dÌeƒZöG dÍdÎ„ dÎeƒZ÷G dÏdÐ„ dÐeƒZøG dÑdÒ„ dÒeƒZùG dÓdÔ„ dÔeƒZúG dÕdÖ„ dÖeƒZûG d×dØ„ dØeƒZüG dÙdÚ„ dÚeƒZýG dÛdÜ„ dÜeƒZþG dÝdÞ„ dÞeƒZÿG dßdà„ dàeƒ�Z G dádâ„ dâeƒ�ZG dãdä„ däeƒ�ZG dådæ„ dæeƒ�ZG dçdè„ dèeƒ�ZG dédê„ dêeƒ�ZG dëdì„ dìeƒ�ZG dídî„ dîeƒ�ZG dïdð„ dðeƒ�ZG dñdò„ dòeƒ�Z	G dódô„ dôeƒ�Z
G dõdö„ döeƒ�ZG d÷dø„ døeƒ�ZG dùdú„ dúeƒ�ZG dûdü„ düeƒ�ZG dýdþ„ dþeƒ�ZG dÿ�d „ �d eƒ�ZG �d�d„ �deƒ�ZG �d�d„ �deƒ�ZG �d�d„ �deƒ�ZG �d�d„ �deƒ�ZG �d	�d
„ �d
eƒ�ZG �d�d„ �deƒ�ZG �d�d„ �deƒ�ZG �d�d„ �deƒ�ZG �d�d„ �deƒ�ZG �d�d„ �deƒ�ZG �d�d„ �deƒ�ZG �d�d„ �deƒ�Z�e�ZG �d�d„ �deƒ�ZG �d�d„ �deƒ�ZG �d�d„ �deƒ�Z G �d�d „ �d eƒ�Z!�e!�Z"G �d!�d"„ �d"eƒ�Z#G �d#�d$„ �d$eƒ�Z$G �d%�d&„ �d&eƒ�Z%G �d'�d(„ �d(eƒ�Z&G �d)�d*„ �d*eƒ�Z'G �d+�d,„ �d,eƒ�Z(G �d-�d.„ �d.eƒ�Z)G �d/�d0„ �d0eƒ�Z*G �d1�d2„ �d2eƒ�Z+G �d3�d4„ �d4eƒ�Z,G �d5�d6„ �d6eƒ�Z-G �d7�d8„ �d8eƒ�Z.G �d9�d:„ �d:eƒ�Z/G �d;�d<„ �d<eƒ�Z0G �d=�d>„ �d>eƒ�Z1G �d?�d@„ �d@eƒ�Z2G �dA�dB„ �dBeƒ�Z3G �dC�dD„ �dDeƒ�Z4G �dE�dF„ �dFeƒ�Z5G �dG�dH„ �dHeƒ�Z6G �dI�dJ„ �dJeƒ�Z7G �dK�dL„ �dLeƒ�Z8G �dM�dN„ �dNeƒ�Z9G �dO�dP„ �dPeƒ�Z:�e-�e.f�e/�e0f�e1�e2f�e7�e8f�e9�e:f�dQœ�Z;�dR�dS„ �Z<�dT�dU„ �Z=�dV�dW„ �Z>�dk�dY�dZ„�Z?�d[�d\„ �Z@�d]�d^„ �ZA�d_�d`„ �ZB�da�db„ �ZC�dc�dd„ �ZD�eE�dek�r�g �ZF�df�ZG�dg�ZH�dh�ZI�di�ZJ�dj�ZK�eC�eF�eGƒ�ZL�eM�eN�eLƒƒ �eC�eF�eHƒ�ZO�eM�eN�eOƒƒ �eC�eF�eIƒ�ZP�eM�eN�ePƒƒ �eC�eF�eJƒ�ZQ�eM�eN�eQƒƒ �eC�eF�eKƒ�ZR�eM�eN�eRƒƒ �eD�eF�eLƒ�ZS�eM�eSƒ �eD�eF�eOƒ�ZS�eM�eSƒ �eD�eF�ePƒ�ZS�eM�eSƒ �eD�eF�eQƒ�ZS�eM�eSƒ �eD�eF�eRƒ�ZS�eM�eSƒ dS dS (l  é    )Údivision)Úprint_function)ÚbytesN)Úpack)ÚPY2)ÚLOG)ÚNDRCALLÚ	NDRSTRUCTÚ
NDRPOINTERÚNDRUniConformantArrayÚNDRUNIONÚNDRÚNDRENUM)ÚPUUIDÚDWORDÚNULLÚGUIDÚLPWSTRÚBOOLÚULONGÚUUIDÚLONGLONGÚULARGE_INTEGERÚLARGE_INTEGER)Úhresult_errorsÚsystem_errors)Ú	Structure)Úuuidtup_to_binÚstring_to_bin)ÚEnum)ÚDCERPCException)Úcrypto©Úuniv)Údecoder)ÚtransformKey)ÚARC4ÚDESzDWarning: You don't have any crypto installed. You need pycryptodomexz+See https://pypi.org/project/pycryptodomex/)z$E3514235-4B06-11D1-AB04-00C04FC2DCD2z4.0c                   @   s   e Zd Zddd„Zdd„ ZdS )ÚDCERPCSessionErrorNc                 C   s   t  | |||¡ d S ©N)r    Ú__init__)ÚselfÚerror_stringÚ
error_codeÚpacket© r/   ú�/root/aizidognhua/tmp/workspace/projects/ec89d86c-575f-41c9-af57-ac45cbdbf775/venv/lib/python3.10/site-packages/impacket/dcerpc/v5/drsuapi.pyr*   9   s   zDCERPCSessionError.__init__c                 C   sˆ   | j }|tjv rtj| d }tj| d }d| j ||f S |d@ tjv r?tj|d@  d }tj|d@  d }d| j ||f S d| j  S )Nr   é   z'DRSR SessionError: code: 0x%x - %s - %siÿÿ  z+DRSR SessionError: unknown error code: 0x%x)r-   r   ÚERROR_MESSAGESr   )r+   ÚkeyÚerror_msg_shortÚerror_msg_verboser/   r/   r0   Ú__str__<   s   

zDCERPCSessionError.__str__)NNN)Ú__name__Ú
__module__Ú__qualname__r*   r6   r/   r/   r/   r0   r(   8   s    
r(   c                   @   s2   e Zd ZdZdZdZG dd„ deƒZd	dd„ZdS )
ÚEXOP_ERRé   ))ÚDataú<Lc                   @   sL   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ZdZdZdZdZdS )zEXOP_ERR.enumItemsr1   é   é   r;   é   é   é   é   é	   é
   é   é   é   é   é   é   N)r7   r8   r9   ÚEXOP_ERR_SUCCESSÚEXOP_ERR_UNKNOWN_OPÚEXOP_ERR_FSMO_NOT_OWNERÚEXOP_ERR_UPDATE_ERRÚEXOP_ERR_EXCEPTIONÚEXOP_ERR_UNKNOWN_CALLERÚEXOP_ERR_RID_ALLOCÚEXOP_ERR_FSMO_OWNER_DELETEDÚEXOP_ERR_FSMO_PENDING_OPÚEXOP_ERR_MISMATCHÚEXOP_ERR_COULDNT_CONTACTÚEXOP_ERR_FSMO_REFUSING_ROLESÚEXOP_ERR_DIR_ERRORÚEXOP_ERR_FSMO_MISSING_SETTINGSÚEXOP_ERR_ACCESS_DENIEDÚEXOP_ERR_PARAM_ERRORr/   r/   r/   r0   Ú	enumItemsS   s"    r\   Nr   c                 C   sp   |d u r| j j}|dkrt|dd� ztd|  | jd ¡j dd� W d S  ty7   td| jd  ƒ Y d S w )NÚ ú )Úendz %sr<   z %d)Ú	__class__r7   Úprintr\   ÚfieldsÚnameÚ
ValueError)r+   ÚmsgÚindentr/   r/   r0   Údumpe   s   $ÿzEXOP_ERR.dump)Nr   )	r7   r8   r9   ÚalignÚalign64Ú	structurer   r\   rg   r/   r/   r/   r0   r:   M   s    r:   r1   r>   r?   r;   r@   rA   rB   rC   rK   é    é@   é€   é   i   i   i   i   i    é @  é €  é   i   i   i   i   i    i  @ i  € i   i   i   i   i   i    i   @l        z$e24d201a-4fd6-11d1-a3da-0000f875ae0dz$00000000-0000-0000-0000-000000000000ì   ÿÿ l   þÿ l   ýÿ l   üÿ l   ûÿ l   úÿ l   ùÿ l   øÿ l   ÷ÿ l   öÿ l   õÿ l   ôÿ l   óÿ l   ñÿ l   ðÿ l   ïÿ l   òÿ rD   c                   @   ó   e Zd ZdZdS )ÚENCRYPTED_PAYLOAD))ÚSaltÚ16s)ÚCheckSumr=   )ÚEncryptedDataú:N©r7   r8   r9   rj   r/   r/   r/   r0   rt     ó    rt   c                   @   ó   e Zd ZdZdd„ ZdS )ÚNT4SID))r<   z28s=b""c                 C   ó   dS ©Nr;   r/   ©r+   r/   r/   r0   ÚgetAlignment  ó   zNT4SID.getAlignmentN©r7   r8   r9   rj   r�   r/   r/   r/   r0   r}     ó    r}   c                   @   r|   )Ú
DRS_HANDLE))r<   z20s=b""c                 C   r~   r   r/   r€   r/   r/   r0   r�   '  r‚   zDRS_HANDLE.getAlignmentNrƒ   r/   r/   r/   r0   r…   #  r„   r…   c                   @   ó   e Zd ZdeffZdS )ÚPDRS_HANDLEr<   N)r7   r8   r9   r…   Úreferentr/   r/   r/   r0   r‡   *  ó    ÿr‡   c                   @   rs   )Ú
BYTE_ARRAYÚcN)r7   r8   r9   Úitemr/   r/   r/   r0   rŠ   0  r{   rŠ   c                   @   r†   )ÚPBYTE_ARRAYr<   N)r7   r8   r9   rŠ   rˆ   r/   r/   r/   r0   r�   3  r‰   r�   c                   @   ó   e Zd ZdefdeffZdS )ÚDRS_EXTENSIONSÚcbÚrgbN©r7   r8   r9   r   rŠ   rj   r/   r/   r/   r0   r�   8  ó    þr�   c                   @   r†   )ÚPDRS_EXTENSIONSr<   N)r7   r8   r9   r�   rˆ   r/   r/   r/   r0   r”   >  r‰   r”   c                   @   rs   )ÚDRS_EXTENSIONS_INT))ÚdwFlagsú<L=0)ÚSiteObjGuidú16s=b"")ÚPidr—   )ÚdwReplEpochr—   )Ú
dwFlagsExtr—   )ÚConfigObjGUIDr™   )Ú	dwExtCapsr—   Nrz   r/   r/   r/   r0   r•   D  r{   r•   c                   @   rŽ   )ÚDRS_MSG_DCINFOREQ_V1ÚDomainÚ	InfoLevelN)r7   r8   r9   r   r   rj   r/   r/   r/   r0   rŸ   P  r“   rŸ   c                   @   ó"   e Zd ZdeffZddefiZdS )ÚDRS_MSG_DCINFOREQÚtagr1   ÚV1N)r7   r8   r9   r   Ú	commonHdrrŸ   Úunionr/   r/   r/   r0   r£   W  ó
    ÿÿr£   c                   @   s:   e Zd ZdefdefdefdefdefdefdeffZdS )	ÚDS_DOMAIN_CONTROLLER_INFO_1WÚNetbiosNameÚDnsHostNameÚSiteNameÚComputerObjectNameÚServerObjectNameÚfIsPdcÚ
fDsEnabledN)r7   r8   r9   r   r   rj   r/   r/   r/   r0   r©   `  ó    ùr©   c                   @   ó   e Zd ZeZdS )Ú"DS_DOMAIN_CONTROLLER_INFO_1W_ARRAYN)r7   r8   r9   r©   rŒ   r/   r/   r/   r0   r³   k  r{   r³   c                   @   r†   )Ú#PDS_DOMAIN_CONTROLLER_INFO_1W_ARRAYr<   N)r7   r8   r9   r³   rˆ   r/   r/   r/   r0   r´   n  r‰   r´   c                   @   rŽ   )ÚDRS_MSG_DCINFOREPLY_V1ÚcItemsÚrItemsN)r7   r8   r9   r   r´   rj   r/   r/   r/   r0   rµ   t  r“   rµ   c                   @   sd   e Zd Zdefdefdefdefdefdefdefdefd	efd
efdefdefdefdeffZdS )ÚDS_DOMAIN_CONTROLLER_INFO_2Wrª   r«   r¬   ÚSiteObjectNamer­   r®   ÚNtdsDsaObjectNamer¯   r°   ÚfIsGcÚSiteObjectGuidÚComputerObjectGuidÚServerObjectGuidÚNtdsDsaObjectGuidN©r7   r8   r9   r   r   r   rj   r/   r/   r/   r0   r¸   {  ó     òr¸   c                   @   r²   )Ú"DS_DOMAIN_CONTROLLER_INFO_2W_ARRAYN)r7   r8   r9   r¸   rŒ   r/   r/   r/   r0   rÂ   �  r{   rÂ   c                   @   r†   )Ú#PDS_DOMAIN_CONTROLLER_INFO_2W_ARRAYr<   N)r7   r8   r9   rÂ   rˆ   r/   r/   r/   r0   rÃ   �  r‰   rÃ   c                   @   rŽ   )ÚDRS_MSG_DCINFOREPLY_V2r¶   r·   N)r7   r8   r9   r   rÃ   rj   r/   r/   r/   r0   rÄ   –  r“   rÄ   c                   @   sj   e Zd Zdefdefdefdefdefdefdefdefd	efd
efdefdefdefdefdeffZdS )ÚDS_DOMAIN_CONTROLLER_INFO_3Wrª   r«   r¬   r¹   r­   r®   rº   r¯   r°   r»   ÚfIsRodcr¼   r½   r¾   r¿   NrÀ   r/   r/   r/   r0   rÅ   �  s"    ñrÅ   c                   @   r²   )Ú"DS_DOMAIN_CONTROLLER_INFO_3W_ARRAYN)r7   r8   r9   rÅ   rŒ   r/   r/   r/   r0   rÇ   °  r{   rÇ   c                   @   r†   )Ú#PDS_DOMAIN_CONTROLLER_INFO_3W_ARRAYr<   N)r7   r8   r9   rÇ   rˆ   r/   r/   r/   r0   rÈ   ³  r‰   rÈ   c                   @   rŽ   )ÚDRS_MSG_DCINFOREPLY_V3r¶   r·   N)r7   r8   r9   r   rÈ   rj   r/   r/   r/   r0   rÉ   ¹  r“   rÉ   c                   @   s:   e Zd ZdefdefdefdefdefdefdeffZdS )	Ú#DS_DOMAIN_CONTROLLER_INFO_FFFFFFFFWÚ	IPAddressÚNotificationCountÚsecTimeConnectedÚFlagsÚTotalRequestsÚ	Reserved1ÚUserNameN©r7   r8   r9   r   r   rj   r/   r/   r/   r0   rÊ   À  r±   rÊ   c                   @   r²   )Ú)DS_DOMAIN_CONTROLLER_INFO_FFFFFFFFW_ARRAYN)r7   r8   r9   rÊ   rŒ   r/   r/   r/   r0   rÓ   Ë  r{   rÓ   c                   @   r†   )Ú*PDS_DOMAIN_CONTROLLER_INFO_FFFFFFFFW_ARRAYr<   N)r7   r8   r9   rÓ   rˆ   r/   r/   r/   r0   rÔ   Î  r‰   rÔ   c                   @   rŽ   )ÚDRS_MSG_DCINFOREPLY_VFFFFFFFFr¶   r·   N)r7   r8   r9   r   rÔ   rj   r/   r/   r/   r0   rÕ   Ô  r“   rÕ   c                   @   s4   e Zd ZdeffZdefdefdefdefdœZ	dS )ÚDRS_MSG_DCINFOREPLYr¤   r¥   ÚV2ÚV3)r1   r>   r?   rr   N)
r7   r8   r9   r   r¦   rµ   rÄ   rÉ   rÕ   r§   r/   r/   r/   r0   rÖ   Û  s    ÿ
ürÖ   c                   @   r²   )ÚLPWSTR_ARRAYN)r7   r8   r9   r   rŒ   r/   r/   r/   r0   rÙ   ç  r{   rÙ   c                   @   r†   )ÚPLPWSTR_ARRAYr<   N)r7   r8   r9   rÙ   rˆ   r/   r/   r/   r0   rÚ   ê  r‰   rÚ   c                   @   s:   e Zd ZdefdefdefdefdefdefdeffZdS )	ÚDRS_MSG_CRACKREQ_V1ÚCodePageÚLocaleIdr–   ÚformatOfferedÚformatDesiredÚcNamesÚrpNamesN)r7   r8   r9   r   r   rÚ   rj   r/   r/   r/   r0   rÛ   ï  r±   rÛ   c                   @   r¢   )ÚDRS_MSG_CRACKREQr¤   r1   r¥   N)r7   r8   r9   r   r¦   rÛ   r§   r/   r/   r/   r0   râ   û  r¨   râ   c                   @   ó   e Zd ZG dd„ deƒZdS )ÚDS_NAME_FORMATc                   @   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 )zDS_NAME_FORMAT.enumItemsr   r1   r>   r?   rA   rB   rC   rD   rE   rF   rG   N)r7   r8   r9   ÚDS_UNKNOWN_NAMEÚDS_FQDN_1779_NAMEÚDS_NT4_ACCOUNT_NAMEÚDS_DISPLAY_NAMEÚDS_UNIQUE_ID_NAMEÚDS_CANONICAL_NAMEÚDS_USER_PRINCIPAL_NAMEÚDS_CANONICAL_NAME_EXÚDS_SERVICE_PRINCIPAL_NAMEÚDS_SID_OR_SID_HISTORY_NAMEÚDS_DNS_DOMAIN_NAMEr/   r/   r/   r0   r\     s    r\   N©r7   r8   r9   r   r\   r/   r/   r/   r0   rä     ó    rä   c                   @   s"   e Zd ZdefdefdeffZdS )ÚDS_NAME_RESULT_ITEMWÚstatusÚpDomainÚpNameNrÒ   r/   r/   r/   r0   rò     ó
    ýrò   c                   @   r²   )ÚDS_NAME_RESULT_ITEMW_ARRAYN)r7   r8   r9   rò   rŒ   r/   r/   r/   r0   r÷     r{   r÷   c                   @   r†   )ÚPDS_NAME_RESULT_ITEMW_ARRAYr<   N)r7   r8   r9   r÷   rˆ   r/   r/   r/   r0   rø     r‰   rø   c                   @   rŽ   )ÚDS_NAME_RESULTWr¶   r·   N)r7   r8   r9   r   rø   rj   r/   r/   r/   r0   rù   #  r“   rù   c                   @   r†   )ÚPDS_NAME_RESULTWr<   N)r7   r8   r9   rù   rˆ   r/   r/   r/   r0   rú   )  r‰   rú   c                   @   r†   )ÚDRS_MSG_CRACKREPLY_V1ÚpResultN)r7   r8   r9   rú   rj   r/   r/   r/   r0   rû   /  r‰   rû   c                   @   r¢   )ÚDRS_MSG_CRACKREPLYr¤   r1   r¥   N)r7   r8   r9   r   r¦   rû   r§   r/   r/   r/   r0   rý   5  r¨   rý   c                   @   rŽ   )ÚUPTODATE_CURSOR_V1ÚuuidDsaÚusnHighPropUpdateN)r7   r8   r9   r   ÚUSNrj   r/   r/   r/   r0   rþ   >  r“   rþ   c                   @   r²   )ÚUPTODATE_CURSOR_V1_ARRAYN)r7   r8   r9   rþ   rŒ   r/   r/   r/   r0   r  D  r{   r  c                   @   ó.   e Zd ZdefdefdefdefdeffZdS )ÚUPTODATE_VECTOR_V1_EXTÚ	dwVersionÚdwReserved1ÚcNumCursorsÚdwReserved2Ú	rgCursorsN)r7   r8   r9   r   r  rj   r/   r/   r/   r0   r  H  ó    ûr  c                   @   r†   )ÚPUPTODATE_VECTOR_V1_EXTr<   N)r7   r8   r9   r  rˆ   r/   r/   r/   r0   r  Q  r‰   r  c                   @   s"   e Zd ZdefdefdeffZdS )Ú
USN_VECTORÚusnHighObjUpdateÚusnReservedr   N)r7   r8   r9   r  rj   r/   r/   r/   r0   r  W  rö   r  c                   @   s    e Zd ZdZdd„ Zdd„ ZdS )ÚWCHAR_ARRAYÚHc                 C   s(   d | j d< d | _t | |dd„ |D ƒ¡S )NÚMaximumCountc                 S   s   g | ]}t |ƒ‘qS r/   )Úord)Ú.0r‹   r/   r/   r0   Ú
<listcomp>e  s    z+WCHAR_ARRAY.__setitem__.<locals>.<listcomp>)rb   Údatar   Ú__setitem__)r+   r3   Úvaluer/   r/   r0   r  b  s   
zWCHAR_ARRAY.__setitem__c              
   C   st   |dkr4zd  dd„ | j| D ƒ¡W S  ty3 } ztjddd� t t|ƒ¡ W Y d }~d S d }~ww t | |¡S )Nr<   r]   c                 S   s   g | ]}t  |¡‘qS r/   )ÚsixÚunichr)r  Úir/   r/   r0   r  j  s    z+WCHAR_ARRAY.__getitem__.<locals>.<listcomp>zValueError ExceptionT)Úexc_info)	Újoinrb   rd   r   ÚdebugÚerrorÚstrr   Ú__getitem__)r+   r3   Úer/   r/   r0   r   g  s   €þzWCHAR_ARRAY.__getitem__N)r7   r8   r9   rŒ   r  r   r/   r/   r/   r0   r  _  s    r  c                   @   sH   e Zd ZdefdefdefdefdefdeffZddd	„Zdd
d„Z	dS )ÚDSNAMEÚ	structLenÚSidLenÚGuidÚSidÚNameLenÚ
StringNamer   c                 C   s   | d S )Nr'  r/   )r+   r  Úoffsetr/   r/   r0   Ú
getDataLenz  s   zDSNAME.getDataLenc                 C   s   t  | |¡S r)   )r	   ÚgetData)r+   ÚsoFarr/   r/   r0   r+  |  s   zDSNAME.getDataN©r   )
r7   r8   r9   r   r   r}   r  rj   r*  r+  r/   r/   r/   r0   r"  q  s    ú
r"  c                   @   r†   )ÚPDSNAMEr<   N)r7   r8   r9   r"  rˆ   r/   r/   r/   r0   r.    r‰   r.  c                   @   r²   )ÚPDSNAME_ARRAYN)r7   r8   r9   r.  rŒ   r/   r/   r/   r0   r/  „  r{   r/  c                   @   r†   )ÚPPDSNAME_ARRAYr<   N)r7   r8   r9   r/  rˆ   r/   r/   r/   r0   r0  ‡  r‰   r0  c                   @   r²   )ÚATTRTYP_ARRAYN)r7   r8   r9   ÚATTRTYPrŒ   r/   r/   r/   r0   r1  Œ  r{   r1  c                   @   ó(   e Zd ZdefdefdefdeffZdS )ÚPARTIAL_ATTR_VECTOR_V1_EXTr  r  ÚcAttrsÚrgPartialAttrN)r7   r8   r9   r   r1  rj   r/   r/   r/   r0   r4  �  ó    ür4  c                   @   r†   )ÚPPARTIAL_ATTR_VECTOR_V1_EXTr<   N)r7   r8   r9   r4  rˆ   r/   r/   r/   r0   r8  ˜  r‰   r8  c                   @   rŽ   )ÚOID_tÚlengthÚelementsN©r7   r8   r9   r   r�   rj   r/   r/   r/   r0   r9  ž  r“   r9  c                   @   rŽ   )ÚPrefixTableEntryÚndxÚprefixN)r7   r8   r9   r   r9  rj   r/   r/   r/   r0   r=  ¥  r“   r=  c                   @   r²   )ÚPrefixTableEntry_ARRAYN)r7   r8   r9   r=  rŒ   r/   r/   r/   r0   r@  «  r{   r@  c                   @   r†   )ÚPPrefixTableEntry_ARRAYr<   N)r7   r8   r9   r@  rˆ   r/   r/   r/   r0   rA  ®  r‰   rA  c                   @   rŽ   )ÚSCHEMA_PREFIX_TABLEÚPrefixCountÚpPrefixEntryN)r7   r8   r9   r   rA  rj   r/   r/   r/   r0   rB  ´  r“   rB  c                   @   sR   e Zd Zdefdefdefdefdefdefdefde	fd	e	fd
e	fde	ffZ
dS )ÚDRS_MSG_GETCHGREQ_V3ÚuuidDsaObjDestÚuuidInvocIdSrcÚpNCÚ
usnvecFromÚpUpToDateVecDestV1ÚpPartialAttrVecDestV1ÚPrefixTableDestÚulFlagsÚcMaxObjectsÚ	cMaxBytesÚulExtendedOpN)r7   r8   r9   r   r.  r  r  r8  rB  r   rj   r/   r/   r/   r0   rE  »  s    õrE  c                   @   rŽ   )ÚMTX_ADDRÚmtx_namelenÚmtx_nameNr<  r/   r/   r/   r0   rQ  Ë  r“   rQ  c                   @   r†   )Ú	PMTX_ADDRr<   N)r7   r8   r9   rQ  rˆ   r/   r/   r/   r0   rT  Ñ  r‰   rT  c                   @   ó"   e Zd ZdefdefdeffZdS )ÚDRS_MSG_GETCHGREQ_V4ÚuuidTransportObjÚpmtxReturnAddressrØ   N)r7   r8   r9   r   rT  rE  rj   r/   r/   r/   r0   rV  ×  rö   rV  c                   @   sL   e Zd Zdefdefdefdefdefdefdefdefd	efd
eff
Z	dS )ÚDRS_MSG_GETCHGREQ_V5rF  rG  rH  rI  rJ  rM  rN  rO  rP  Ú
liFsmoInfoN)
r7   r8   r9   r   r.  r  r  r   r   rj   r/   r/   r/   r0   rY  ß  s    örY  c                   @   s4   e Zd ZdefdefdefdefdefdeffZdS )ÚDRS_MSG_GETCHGREQ_V7rW  rX  rØ   ÚpPartialAttrSetÚpPartialAttrSetEx1rL  N)	r7   r8   r9   r   rT  rE  r8  rB  rj   r/   r/   r/   r0   r[  î  ó    úr[  c                   @   s^   e Zd Zdefdefdefdefdefdefdefdefd	efd
efde	fde	fde
ffZdS )ÚDRS_MSG_GETCHGREQ_V8rF  rG  rH  rI  ÚpUpToDateVecDestrM  rN  rO  rP  rZ  r\  r]  rL  N©r7   r8   r9   r   r.  r  r  r   r   r8  rB  rj   r/   r/   r/   r0   r_  ù  s    ór_  c                   @   sd   e Zd Zdefdefdefdefdefdefdefdefd	efd
efde	fde	fde
fdeffZdS )ÚDRS_MSG_GETCHGREQ_V10rF  rG  rH  rI  r`  rM  rN  rO  rP  rZ  r\  r]  rL  ÚulMoreFlagsNra  r/   r/   r/   r0   rb    rÁ   rb  c                   @   ó:   e Zd ZdeffZdefdefdefdefde	fdœZ
dS )	ÚDRS_MSG_GETCHGREQr¤   ÚV4ÚV5ÚV7ÚV8ÚV10)r;   r@   rB   rC   rE   N)r7   r8   r9   r   r¦   rV  rY  r[  r_  rb  r§   r/   r/   r/   r0   re    ó    ÿ
ûre  c                   @   rŽ   )ÚATTRVALÚvalLenÚpValNr<  r/   r/   r/   r0   rl  +  r“   rl  c                   @   r²   )ÚATTRVAL_ARRAYN)r7   r8   r9   rl  rŒ   r/   r/   r/   r0   ro  1  r{   ro  c                   @   r†   )ÚPATTRVAL_ARRAYr<   N)r7   r8   r9   ro  rˆ   r/   r/   r/   r0   rp  4  r‰   rp  c                   @   rŽ   )ÚATTRVALBLOCKÚvalCountÚpAValN)r7   r8   r9   r   rp  rj   r/   r/   r/   r0   rq  :  r“   rq  c                   @   rŽ   )ÚATTRÚattrTypÚAttrValN)r7   r8   r9   r2  rq  rj   r/   r/   r/   r0   rt  A  r“   rt  c                   @   r²   )Ú
ATTR_ARRAYN)r7   r8   r9   rt  rŒ   r/   r/   r/   r0   rw  G  r{   rw  c                   @   r†   )ÚPATTR_ARRAYr<   N)r7   r8   r9   rw  rˆ   r/   r/   r/   r0   rx  J  r‰   rx  c                   @   rŽ   )Ú	ATTRBLOCKÚ	attrCountÚpAttrN)r7   r8   r9   r   rx  rj   r/   r/   r/   r0   ry  P  r“   ry  c                   @   rU  )ÚENTINFrõ   rM  Ú	AttrBlockN)r7   r8   r9   r.  r   ry  rj   r/   r/   r/   r0   r|  W  rö   r|  c                   @   r²   )ÚENTINF_ARRAYN)r7   r8   r9   r|  rŒ   r/   r/   r/   r0   r~  ^  r{   r~  c                   @   r†   )ÚPENTINF_ARRAYr<   N)r7   r8   r9   r~  rˆ   r/   r/   r/   r0   r  a  r‰   r  c                   @   s(   e Zd ZdefdefdefdeffZdS )ÚPROPERTY_META_DATA_EXTr  ÚtimeChangedÚuuidDsaOriginatingÚusnOriginatingN)r7   r8   r9   r   ÚDSTIMEr   r  rj   r/   r/   r/   r0   r€  g  r7  r€  c                   @   r²   )ÚPROPERTY_META_DATA_EXT_ARRAYN)r7   r8   r9   r€  rŒ   r/   r/   r/   r0   r…  o  r{   r…  c                   @   rŽ   )ÚPROPERTY_META_DATA_EXT_VECTORÚ	cNumPropsÚ
rgMetaDataN)r7   r8   r9   r   r…  rj   r/   r/   r/   r0   r†  s  r“   r†  c                   @   r†   )ÚPPROPERTY_META_DATA_EXT_VECTORr<   N)r7   r8   r9   r†  rˆ   r/   r/   r/   r0   r‰  y  r‰   r‰  c                   @   ó8   e Zd ZdefdefdefdefdeffZd
dd„Z	d	S )ÚREPLENTINFLISTÚpNextEntInfÚEntinfÚfIsNCPrefixÚpParentGuidmÚpMetaDataExtr   c                 C   s$   t | jd�| jd< t | ||¡}|S )N)ÚisNDR64rŒ  )ÚPREPLENTINFLISTÚ_isNDR64rb   r	   Ú
fromString©r+   r  r,  ÚretValr/   r/   r0   r”  ‰  s   zREPLENTINFLIST.fromStringNr-  )
r7   r8   r9   r
   r|  r   r   r‰  rj   r”  r/   r/   r/   r0   r‹  €  ó    ûr‹  c                   @   r†   )r’  r<   N)r7   r8   r9   r‹  rˆ   r/   r/   r/   r0   r’  �  r‰   r’  c                   @   sX   e Zd Zdefdefdefdefdefdefdefdefd	e	fd
e	fde
fdeffZdS )ÚDRS_MSG_GETCHGREPLY_V1ÚuuidDsaObjSrcrG  rH  rI  ÚusnvecToÚpUpToDateVecSrcV1ÚPrefixTableSrcÚulExtendedRetÚcNumObjectsÚ	cNumBytesÚpObjectsÚ	fMoreDataN)r7   r8   r9   r   r.  r  r  rB  r:   r   r’  r   rj   r/   r/   r/   r0   r˜  •  s    ôr˜  c                   @   s"   e Zd ZdefdefdeffZdS )ÚDRS_COMPRESSED_BLOBÚcbUncompressedSizeÚcbCompressedSizeÚpbCompressedDataNr’   r/   r/   r/   r0   r¢  ¦  rö   r¢  c                   @   r†   )ÚDRS_MSG_GETCHGREPLY_V2ÚCompressedV1N)r7   r8   r9   r¢  rj   r/   r/   r/   r0   r¦  ®  r‰   r¦  c                   @   rU  )ÚUPTODATE_CURSOR_V2rÿ   r   ÚtimeLastSyncSuccessN)r7   r8   r9   r   r  r„  rj   r/   r/   r/   r0   r¨  ´  rö   r¨  c                   @   r²   )ÚUPTODATE_CURSOR_V2_ARRAYN)r7   r8   r9   r¨  rŒ   r/   r/   r/   r0   rª  »  r{   rª  c                   @   r  )ÚUPTODATE_VECTOR_V2_EXTr  r  r  r  r	  N)r7   r8   r9   r   rª  rj   r/   r/   r/   r0   r«  ¿  r
  r«  c                   @   r†   )ÚPUPTODATE_VECTOR_V2_EXTr<   N)r7   r8   r9   r«  rˆ   r/   r/   r/   r0   r¬  È  r‰   r¬  c                   @   rŽ   )ÚVALUE_META_DATA_EXT_V1ÚtimeCreatedÚMetaDataN)r7   r8   r9   r„  r€  rj   r/   r/   r/   r0   r­  Î  r“   r­  c                   @   s4   e Zd ZdefdefdefdefdefdeffZdS )ÚVALUE_META_DATA_EXT_V3r®  r¯  Úunused1ÚtimeExpiredN)r7   r8   r9   r„  r€  r   rj   r/   r/   r/   r0   r°  Õ  r^  r°  c                   @   rŠ  )ÚREPLVALINF_V1ÚpObjectru  ÚAvalÚ
fIsPresentr¯  r   c                 C   ó   t  | ||¡}|S r)   ©r	   r”  r•  r/   r/   r0   r”  é  ó   zREPLVALINF_V1.fromStringNr-  )
r7   r8   r9   r.  r2  rl  r   r­  rj   r”  r/   r/   r/   r0   r³  à  r—  r³  c                   @   r²   )ÚREPLVALINF_V1_ARRAYN)r7   r8   r9   r³  rŒ   r/   r/   r/   r0   rº  î  r{   rº  c                   @   r†   )ÚPREPLVALINF_V1_ARRAYr<   N)r7   r8   r9   rº  rˆ   r/   r/   r/   r0   r»  ñ  r‰   r»  c                   @   rŠ  )ÚREPLVALINF_V3r´  ru  rµ  r¶  r¯  r   c                 C   r·  r)   r¸  r•  r/   r/   r0   r”     r¹  zREPLVALINF_V3.fromStringNr-  )
r7   r8   r9   r.  r2  rl  r   r°  rj   r”  r/   r/   r/   r0   r¼  ÷  r—  r¼  c                   @   r²   )ÚREPLVALINF_V3_ARRAYN)r7   r8   r9   r¼  rŒ   r/   r/   r/   r0   r½    r{   r½  c                   @   r†   )ÚPREPLVALINF_V3_ARRAYr<   N)r7   r8   r9   r½  rˆ   r/   r/   r/   r0   r¾    r‰   r¾  c                   @   óv   e Zd Zdefdefdefdefdefdefdefdefd	e	fd
e	fde
fdefde	fde	fdefdefdeffZdS )ÚDRS_MSG_GETCHGREPLY_V6r™  rG  rH  rI  rš  ÚpUpToDateVecSrcrœ  r�  rž  rŸ  r   r¡  ÚcNumNcSizeObjectscÚcNumNcSizeValuesÚ
cNumValuesÚrgValuesÚ
dwDRSErrorN©r7   r8   r9   r   r.  r  r¬  rB  r:   r   r’  r   r   rj   r/   r/   r/   r0   rÀ    ó&    ìrÀ  c                   @   rã   )ÚDRS_COMP_ALG_TYPEc                   @   s   e Zd ZdZdZdZdZdS )zDRS_COMP_ALG_TYPE.enumItemsr   r1   r>   r?   N)r7   r8   r9   ÚDRS_COMP_ALG_NONEÚDRS_COMP_ALG_UNUSEDÚDRS_COMP_ALG_MSZIPÚDRS_COMP_ALG_WIN2K3r/   r/   r/   r0   r\   +  s
    r\   Nrð   r/   r/   r/   r0   rÉ  *  rñ   rÉ  c                   @   rU  )ÚDRS_MSG_GETCHGREPLY_V7ÚdwCompressedVersionÚCompressionAlgÚCompressedAnyN)r7   r8   r9   r   rÉ  r¢  rj   r/   r/   r/   r0   rÎ  2  rö   rÎ  c                   @   r¿  )ÚDRS_MSG_GETCHGREPLY_V9r™  rG  rH  rI  rš  rÁ  rœ  r�  rž  rŸ  r   r¡  rÂ  rÃ  rÄ  rÅ  rÆ  NrÇ  r/   r/   r/   r0   rÒ  :  rÈ  rÒ  c                   @   rd  )	ÚDRS_MSG_GETCHGREPLYr¤   r¥   r×   ÚV6rh  ÚV9)r1   r>   rA   rB   rD   N)r7   r8   r9   r   r¦   r˜  r¦  rÀ  rÎ  rÒ  r§   r/   r/   r/   r0   rÓ  V  rk  rÓ  c                   @   s.   e Zd ZdefdefdefdefdeffZdS )ÚDRS_MSG_VERIFYREQ_V1r–   rà   rá   ÚRequiredAttrsÚPrefixTableN)r7   r8   r9   r   r0  ry  rB  rj   r/   r/   r/   r0   rÖ  c  r
  rÖ  c                   @   r¢   )ÚDRS_MSG_VERIFYREQr¤   r1   r¥   N)r7   r8   r9   r   r¦   rÖ  r§   r/   r/   r/   r0   rÙ  m  r¨   rÙ  c                   @   s(   e Zd ZdefdefdefdeffZdS )ÚDRS_MSG_VERIFYREPLY_V1r  rà   ÚrpEntInfrØ  N)r7   r8   r9   r   r  rB  rj   r/   r/   r/   r0   rÚ  v  r7  rÚ  c                   @   r¢   )ÚDRS_MSG_VERIFYREPLYr¤   r1   r¥   N)r7   r8   r9   r   r¦   rÚ  r§   r/   r/   r/   r0   rÜ    r¨   rÜ  c                   @   r3  )ÚDRS_MSG_NT4_CHGLOG_REQ_V1r–   ÚPreferredMaximumLengthÚ	cbRestartÚpRestartN)r7   r8   r9   r   r�   rj   r/   r/   r/   r0   rÝ  ˆ  r7  rÝ  c                   @   r¢   )ÚDRS_MSG_NT4_CHGLOG_REQr¤   r1   r¥   N)r7   r8   r9   r   r¦   rÝ  r§   r/   r/   r/   r0   rá  ‘  r¨   rá  c                   @   s4   e Zd ZdefdefdefdefdefdeffZdS )ÚNT4_REPLICATION_STATEÚSamSerialNumberÚSamCreationTimeÚBuiltinSerialNumberÚBuiltinCreationTimeÚLsaSerialNumberÚLsaCreationTimeN)r7   r8   r9   r   rj   r/   r/   r/   r0   râ  š  r^  râ  c                   @   s4   e Zd ZdefdefdefdefdefdeffZdS )ÚDRS_MSG_NT4_CHGLOG_REPLY_V1rß  ÚcbLogÚReplicationStateÚActualNtStatusrà  ÚpLogN)r7   r8   r9   r   râ  r�   rj   r/   r/   r/   r0   ré  ¥  r^  ré  c                   @   r¢   )ÚDRS_MSG_NT4_CHGLOG_REPLYr¤   r1   r¥   N)r7   r8   r9   r   r¦   ré  r§   r/   r/   r/   r0   rî  °  r¨   rî  c                   @   s    e Zd ZdZdefdeffZdS )ÚDRSBindr   ÚpuuidClientDsaÚ
pextClientN)r7   r8   r9   Úopnumr   r”   rj   r/   r/   r/   r0   rï  ¼  s
    þrï  c                   @   rU  )ÚDRSBindResponseÚppextServerÚphDrsÚ	ErrorCodeN)r7   r8   r9   r”   r…   r   rj   r/   r/   r/   r0   ró  Ã  rö   ró  c                   @   s   e Zd ZdZdeffZdS )Ú	DRSUnbindr1   rõ  N)r7   r8   r9   rò  r…   rj   r/   r/   r/   r0   r÷  Ë  s    ÿr÷  c                   @   rŽ   )ÚDRSUnbindResponserõ  rö  N)r7   r8   r9   r…   r   rj   r/   r/   r/   r0   rø  Ñ  r“   rø  c                   @   ó&   e Zd ZdZdefdefdeffZdS )ÚDRSGetNCChangesr?   ÚhDrsÚdwInVersionÚpmsgInN)r7   r8   r9   rò  r…   r   re  rj   r/   r/   r/   r0   rú  Ø  ó    ýrú  c                   @   ó"   e Zd ZdefdefdeffZdS )ÚDRSGetNCChangesResponseÚpdwOutVersionÚpmsgOutrö  N)r7   r8   r9   r   rÓ  rj   r/   r/   r/   r0   r   à  rö   r   c                   @   rù  )ÚDRSVerifyNamesrC   rû  rü  rý  N)r7   r8   r9   rò  r…   r   rÙ  rj   r/   r/   r/   r0   r  è  rþ  r  c                   @   rÿ  )ÚDRSVerifyNamesResponser  r  rö  N)r7   r8   r9   r   rÜ  rj   r/   r/   r/   r0   r  ð  rö   r  c                   @   rù  )ÚDRSGetNT4ChangeLogrF   rû  rü  rý  N)r7   r8   r9   rò  r…   r   rá  rj   r/   r/   r/   r0   r  ÷  rþ  r  c                   @   rÿ  )ÚDRSGetNT4ChangeLogResponser  r  rö  N)r7   r8   r9   r   rî  rj   r/   r/   r/   r0   r  ÿ  rö   r  c                   @   rù  )ÚDRSCrackNamesrG   rû  rü  rý  N)r7   r8   r9   rò  r…   r   râ   rj   r/   r/   r/   r0   r    rþ  r  c                   @   rÿ  )ÚDRSCrackNamesResponser  r  rö  N)r7   r8   r9   r   rý   rj   r/   r/   r/   r0   r    rö   r  c                   @   rù  )ÚDRSDomainControllerInforK   rû  rü  rý  N)r7   r8   r9   rò  r…   r   r£   rj   r/   r/   r/   r0   r	    rþ  r	  c                   @   rÿ  )ÚDRSDomainControllerInfoResponser  r  rö  N)r7   r8   r9   r   rÖ   rj   r/   r/   r/   r0   r
    rö   r
  )r   r1   r?   rG   rK   c                 C   s(   | t kr| S | dd … dkr| d S | S )Néÿÿÿÿú )r   )Ústringr/   r/   r0   ÚcheckNullString4  s
   r  c                 C   s   t ƒ }||d< |  |¡S )Nrõ  )r÷  Úrequest)Údcerû  r  r/   r/   r0   Ú
hDRSUnbind=  s   
r  c                 C   sP   t ƒ }||d< d|d< d|d d< t|ƒ|d d d< ||d d d< |  |¡S )	Nrû  r1   rü  rý  r¤   r¥   r    r¡   )r	  r  r  )r  rû  ÚdomainÚ	infoLevelr  r/   r/   r0   ÚhDRSDomainControllerInfoB  s   
r  r/   c           	      C   sÂ   t ƒ }||d< d|d< d|d d< d|d d d< d|d d d	< ||d d d
< ||d d d< ||d d d< t|ƒ|d d d< |D ]}tƒ }t|ƒ|d< |d d d  |¡ qE|  |¡S )Nrû  r1   rü  rý  r¤   r   r¥   rÜ   rÝ   r–   rÞ   rß   rà   r<   rá   )r  Úlenr   r  Úappendr  )	r  rû  ÚflagsrÞ   rß   rá   r  rc   Úrecordr/   r/   r0   ÚhDRSCrackNamesL  s   
r  c                 C   sž   t d| ƒ}|d |d |d |d |d |d |d g}|d |d |d |d |d |d |d g}trCtd |¡ƒtd |¡ƒfS tt|ƒƒtt|ƒƒfS )Nr=   r   r1   r>   r?   ó    )r   r   r%   r  r   )ÚbaseKeyr3   Úkey1Úkey2r/   r/   r0   Ú	deriveKey_  s   
..r  c                 C   sP   t |ƒ\}}t |tj¡}t |tj¡}| | d d… ¡| | dd … ¡ }|S )NrC   )r  r'   ÚnewÚMODE_ECBÚdecrypt)ÚcryptedHashÚridÚKey1ÚKey2ÚCrypt1ÚCrypt2ÚdecryptedHashr/   r/   r0   ÚremoveDESLayern  s
   $r)  c                 C   st   |   ¡ }t|tjƒr|j}t|ƒ}t d¡}| |¡ | |d ¡ | 	¡ }t
 |¡}| |dd … ¡}|dd … S )NÚmd5ru   rK   r;   )Úget_session_keyÚ
isinstancer!   ÚKeyÚcontentsrt   Úhashlibr  ÚupdateÚdigestr&   r!  )r  Ú	attributeÚ
sessionKeyÚencryptedPayloadr*  ÚfinalMD5ÚcipherÚ	plainTextr/   r/   r0   ÚDecryptAttributeValuex  s   


r8  c                 C   s  t | d¡d ƒ}ddlm} ddlm} | | |¡¡dd … }|dk r.t|d d… ƒ}nt|d d… ƒ}d	}t	| ƒ}t
| ƒD ]\}	}
|
d
 d |krRd}|	} nq@|d	u rqtƒ }||d< t	|ƒ|d
 d< ||d
 d< |  |¡ |d }|dkr}|d7 }|}tƒ }|d> | |d< |S )NÚ.r  r   r"   )Úencoderr>   rm   éþÿÿÿTr?  r;  Fr>  r:  ro   rp   rK   r<   )ÚintÚsplitÚpyasn1.typer#   Úpyasn1.codec.berr:  ÚencodeÚObjectIdentifierÚlistr  Ú	enumerater=  r  r2  )ÚprefixTableÚoidÚ	lastValuer#   r:  Ú	binaryOIDÚ	oidPrefixÚfToAddÚposÚjrŒ   ÚentryÚ	lowerWordÚ	upperWordru  r/   r/   r0   Ú	MakeAttid‘  s8   ý
rO  c                 C   sê   |d }|d }d }t | ƒD ]G\}}|d |krU|d d d |d d … }|dk r3| td|ƒ¡ n |dkr;|d8 }| td|d d d ƒ¡ | td|d ƒ¡  nq|d u r\d S ttjd	tdt|ƒƒ d
 |¡ t 	¡ d�d ƒS )Nrq   r>  r?  r;  r:  rm   ÚBrp   ó   r  )Úasn1Specr   )
rC  r  r   r  r$   Údecoder  r  r#   rA  )rD  ÚattrrN  rM  rG  rK  rŒ   r/   r/   r0   ÚOidFromAttid¾  s"   ÷2rU  Ú__main__z1.2.840.113556.1.4.94z2.5.6.2z1.2.840.113556.1.2.1z1.2.840.113556.1.3.223z1.2.840.113556.1.5.7000.53)r/   (T  Ú
__future__r   r   Úbuiltinsr   r/  Ústructr   r  r   Úimpacketr   Úimpacket.dcerpc.v5.ndrr   r	   r
   r   r   r   r   Úimpacket.dcerpc.v5.dtypesr   r   r   r   r   r   r   r   r   r   r   r   r   Úimpacket.structurer   Úimpacket.uuidr   r   Úimpacket.dcerpc.v5.enumr   Úimpacket.dcerpc.v5.rpcrtr    Úimpacket.krb5r!   r>  r#   r?  r$   Úimpacket.cryptor%   ÚCryptodome.Cipherr&   r'   Ú	ExceptionÚcriticalÚMSRPC_UUID_DRSUAPIr(   r:   ÚEXOP_FSMO_REQ_ROLEÚEXOP_FSMO_REQ_RID_ALLOCÚEXOP_FSMO_RID_REQ_ROLEÚEXOP_FSMO_REQ_PDCÚEXOP_FSMO_ABANDON_ROLEÚEXOP_REPL_OBJÚEXOP_REPL_SECRETSr2  r„  ÚDRS_EXT_BASEÚDRS_EXT_ASYNCREPLÚDRS_EXT_REMOVEAPIÚDRS_EXT_MOVEREQ_V2ÚDRS_EXT_GETCHG_DEFLATEÚDRS_EXT_DCINFO_V1Ú DRS_EXT_RESTORE_USN_OPTIMIZATIONÚDRS_EXT_ADDENTRYÚDRS_EXT_KCC_EXECUTEÚDRS_EXT_ADDENTRY_V2Ú DRS_EXT_LINKED_VALUE_REPLICATIONÚDRS_EXT_DCINFO_V2Ú$DRS_EXT_INSTANCE_TYPE_NOT_REQ_ON_MODÚDRS_EXT_CRYPTO_BINDÚDRS_EXT_GET_REPL_INFOÚDRS_EXT_STRONG_ENCRYPTIONÚDRS_EXT_DCINFO_VFFFFFFFFÚDRS_EXT_TRANSITIVE_MEMBERSHIPÚDRS_EXT_ADD_SID_HISTORYÚDRS_EXT_POST_BETA3ÚDRS_EXT_GETCHGREQ_V5ÚDRS_EXT_GETMEMBERSHIPS2ÚDRS_EXT_GETCHGREQ_V6ÚDRS_EXT_NONDOMAIN_NCSÚDRS_EXT_GETCHGREQ_V8ÚDRS_EXT_GETCHGREPLY_V5ÚDRS_EXT_GETCHGREPLY_V6ÚDRS_EXT_GETCHGREPLY_V9ÚDRS_EXT_WHISTLER_BETA3ÚDRS_EXT_W2K3_DEFLATEÚDRS_EXT_GETCHGREQ_V10Ú*DRS_EXT_RESERVED_FOR_WIN2K_OR_DOTNET_PART2Ú*DRS_EXT_RESERVED_FOR_WIN2K_OR_DOTNET_PART3ÚDRS_EXT_ADAMÚDRS_EXT_LH_BETA2ÚDRS_EXT_RECYCLE_BINÚDRS_ASYNC_OPÚDRS_GETCHG_CHECKÚDRS_UPDATE_NOTIFICATIONÚDRS_ADD_REFÚDRS_SYNC_ALLÚDRS_DEL_REFÚDRS_WRIT_REPÚDRS_INIT_SYNCÚDRS_PER_SYNCÚDRS_MAIL_REPÚDRS_ASYNC_REPÚDRS_IGNORE_ERRORÚDRS_TWOWAY_SYNCÚDRS_CRITICAL_ONLYÚDRS_GET_ANCÚDRS_GET_NC_SIZEÚDRS_LOCAL_ONLYÚDRS_NONGC_RO_REPÚDRS_SYNC_BYNAMEÚ
DRS_REF_OKÚDRS_FULL_SYNC_NOWÚDRS_NO_SOURCEÚDRS_FULL_SYNC_IN_PROGRESSÚDRS_FULL_SYNC_PACKETÚDRS_SYNC_REQUEUEÚDRS_SYNC_URGENTÚDRS_REF_GCSPNÚDRS_NO_DISCARDÚDRS_NEVER_SYNCEDÚDRS_SPECIAL_SECRET_PROCESSINGÚDRS_INIT_SYNC_NOWÚDRS_PREEMPTEDÚDRS_SYNC_FORCEDÚDRS_DISABLE_AUTO_SYNCÚDRS_DISABLE_PERIODIC_SYNCÚDRS_USE_COMPRESSIONÚDRS_NEVER_NOTIFYÚDRS_SYNC_PASÚDRS_GET_ALL_GROUP_MEMBERSHIPÚBNDÚSSLÚUDPÚGCÚGSSÚNGOÚSPLÚMD5ÚSGNÚSLÚNTDSAPI_CLIENT_GUIDÚNULLGUIDr  ÚDS_NAME_FLAG_GCVERIFYÚDS_NAME_FLAG_TRUST_REFERRALÚ!DS_NAME_FLAG_PRIVATE_RESOLVE_FPOSÚDS_LIST_SITESÚDS_LIST_SERVERS_IN_SITEÚDS_LIST_DOMAINS_IN_SITEÚ"DS_LIST_SERVERS_FOR_DOMAIN_IN_SITEÚDS_LIST_INFO_FOR_SERVERÚDS_LIST_ROLESÚDS_NT4_ACCOUNT_NAME_SANS_DOMAINÚDS_MAP_SCHEMA_GUIDÚDS_LIST_DOMAINSÚDS_LIST_NCSÚDS_ALT_SECURITY_IDENTITIES_NAMEÚDS_STRING_SID_NAMEÚ DS_LIST_SERVERS_WITH_DCS_IN_SITEÚDS_LIST_GLOBAL_CATALOG_SERVERSÚ"DS_NT4_ACCOUNT_NAME_SANS_DOMAIN_EXÚ#DS_USER_PRINCIPAL_NAME_AND_ALTSECIDÚ DS_USER_PRINCIPAL_NAME_FOR_LOGONÚENTINF_FROM_MASTERÚENTINF_DYNAMIC_OBJECTÚENTINF_REMOTE_MODIFYÚDRS_VERIFY_DSNAMESÚDRS_VERIFY_SIDSÚDRS_VERIFY_SAM_ACCOUNT_NAMESÚDRS_VERIFY_FPOSÚDRS_NT4_CHGLOG_GET_CHANGE_LOGÚ!DRS_NT4_CHGLOG_GET_SERIAL_NUMBERSÚ)DRS_MSG_GETCHGREPLY_NATIVE_VERSION_NUMBERrt   r}   r…   r‡   rŠ   r�   r�   r”   r•   rŸ   r£   r©   r³   r´   rµ   r¸   rÂ   rÃ   rÄ   rÅ   rÇ   rÈ   rÉ   rÊ   rÓ   rÔ   rÕ   rÖ   rÙ   rÚ   rÛ   râ   rä   rò   r÷   rø   rù   rú   rû   rý   rþ   r  r  r  r  r  r"  r.  r/  r0  r1  r4  r8  r9  r=  r@  rA  rB  rE  rQ  rT  rV  rY  r[  r_  rb  re  rl  ro  rp  rq  rt  rw  rx  ry  r|  r~  r  r€  r…  r†  r‰  r‹  r’  r˜  r¢  r¦  r¨  rª  r«  r¬  r­  r°  r³  rº  r»  r¼  r½  r¾  ÚREPLVALINF_NATIVErÀ  rÉ  rÎ  rÒ  ÚDRS_MSG_GETCHGREPLY_NATIVErÓ  rÖ  rÙ  rÚ  rÜ  rÝ  rá  râ  ré  rî  rï  ró  r÷  rø  rú  r   r  r  r  r  r  r  r	  r
  ÚOPNUMSr  r  r  r  r  r)  r8  rO  rU  r7   rD  Úoid0Úoid1Úoid2Úoid3Úoid4Úo0ra   ÚhexÚo1Úo2Úo3Úo4Újjr/   r/   r/   r0   Ú<module>   sŽ  $4
þ$					
					





û	

-å