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d1Zd2Zd3Zd3Zd4Zd5Zd6Zd7Zd8Zd9Zd:Zd;Zd<Zd=Zd>ZdZdZdZd"Zd#Zd$Zd%Zd&Zd'Zd(Ze&d?Ze&d@ZeZdZd"Zd>ZdAZdBZdCZdDZdEZdFZdGZdHZdIZdJZdKZdLZdMZdNZdOZdPZdQZdZdZd/Zd ZdZdZdZdZdZdRZG dSdT dTe#ZG dUdV dVeZG dWdX dXeZG dYdZ dZeZG d[d\ d\eZG d]d^ d^eZG d_d` d`eZG dadb dbeZG dcdd dde#ZG dedf dfeZG dgdh dheZG didj djeZG dkdl dleZG dmdn dneZG dodp dpeZG dqdr dreZG dsdt dteZG dudv dveZG dwdx dxeZG dydz dzeZG d{d| d|eZG d}d~ d~eZG dd deZG dd deZG dd deZG dd deZG dd deZG dd deZG dd deZG dd deZG dd deZG dd deZG dd deZG dd deZG dd deZG dd deZG dd deZG dd deZG dd deZG dd deZG dd deZG dd deZG dd deZG dd deZG dd deZG dd deZG dd deZG dd deZG dd deZG dd deZG dd deZG dd deZG dd deZG dd deZG dd deZG dd deZG ddĄ deZG ddƄ deZG ddȄ deZG ddʄ deZG dd̄ deZG dd΄ deZG ddЄ deZG dd҄ deZG ddԄ deZG ddք deZG dd؄ deZG ddڄ deZG dd܄ deZG ddބ deZG dd deZ G dd deZG dd deZG dd deZG dd deZG dd deZG dd deZG dd deZG dd deZG dd deZ	G dd deZ
G dd deZG dd deZG dd deZG dd deZG dd de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rg 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
$					
					





	

-