o
    j                     @   s  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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/m0Z0 d dl1m2Z2 d dl.m3Z3m4Z4 e(dZ5G dd de-Z6G dd deZ7dZ8dZ9dZ:dZ;dZ<dZ=dZ>eZ?eZ@dZAdZBdZCdZDdZEd ZFd!ZGd"ZHd#ZId$ZJd%ZKd&ZLd'ZMd(ZNd)ZOd*ZPd+ZQd,ZRd-ZSd.ZTd/ZUd0ZVd1ZWd2ZXd3ZYd4ZZd5Z[d#Z\d6Z]d7Z^d8Z_d9Z`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~d/Zd/Zd0Zd1Zd2Zd3Zd4Zd5Zd6Zd7Zd8Zd9Zd:ZdZdZdZdZdZd Zd!Zd"Zd#Zd$Ze)d;Ze)d<ZeZdZdZd:Zd=Zd>Zd?Zd@ZdAZdBZdCZdDZdEZdFZdGZdHZdIZdJZdKZdLZdMZdZdZd+Zd ZdZdZdZdZdZdNZG 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` 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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 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+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Z/G d=d> d>eZ0G d?d@ d@eZ1G dAdB dBeZ2G dCdD dDeZ3G dEdF dFeZ4G dGdH dHeZ5G dIdJ dJeZ6G dKdL dLeZ7e*e+fe,e-fe.e/fe2e3fe4e5fe6e7fdMZ8dNdO Z9eeB d)fdPdQZ:dRdS Z;dTdU Z<djdWdXZ=dYdZ Z>d[d\ Z?d]d^ Z@d_d` ZAdadb ZBeCdckrg ZDddZEdeZFdfZGdgZHdhZIeAeDeEZJeKeLeJ eAeDeFZMeKeLeM eAeDeGZNeKeLeN eAeDeHZOeKeLeO eAeDeIZPeKeLeP eBeDeJZQeKeQ eBeDeMZQeKeQ eBeDeNZQeKeQ eBeDeOZQeKeQ eBeDePZQeKeQ diS diS (k      )division)print_function)bytes)hashlib)pack)PY2)logger)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)expand_DES_keyMODE_ECB)ObjectIdentifier)RC4DES)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/aiosmb/dcerpc/v5/drsuapi.pyr)   +   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.   r/   __str__.   s   

zDCERPCSessionError.__str__)NNN)__name__
__module____qualname__r)   r5   r.   r.   r.   r/   r'   *   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.enumItemsr0         r:               	   
                     N)r6   r7   r8   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.   r/   	enumItemsD   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__r6   printr[   fieldsname
ValueError)r*   msgindentr.   r.   r/   dumpV   s   $zEXOP_ERR.dump)Nr   )	r6   r7   r8   alignalign64	structurer    r[   rf   r.   r.   r.   r/   r9   >   s    r9   r0   r=   r>   r:   r?   r@   rA   rB   rJ       @         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    rC   c                   @      e Zd ZdZdS )ENCRYPTED_PAYLOAD))Salt16s)CheckSumr<   )EncryptedData:Nr6   r7   r8   ri   r.   r.   r.   r/   rs         rs   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.   r/   getAlignment     zNT4SID.getAlignmentNr6   r7   r8   ri   r   r.   r.   r.   r/   r|         r|   c                   @   r{   )
DRS_HANDLE))r;   z20s=b""c                 C   r}   r~   r.   r   r.   r.   r/   r     r   zDRS_HANDLE.getAlignmentNr   r.   r.   r.   r/   r     r   r   c                   @      e Zd ZdeffZdS )PDRS_HANDLEr;   N)r6   r7   r8   r   referentr.   r.   r.   r/   r         r   c                   @   rr   )
BYTE_ARRAYcN)r6   r7   r8   itemr.   r.   r.   r/   r   !  rz   r   c                   @   r   )PBYTE_ARRAYr;   N)r6   r7   r8   r   r   r.   r.   r.   r/   r   $  r   r   c                   @      e Zd ZdefdeffZdS )DRS_EXTENSIONScbrgbNr6   r7   r8   r   r   ri   r.   r.   r.   r/   r   )      r   c                   @   r   )PDRS_EXTENSIONSr;   N)r6   r7   r8   r   r   r.   r.   r.   r/   r   /  r   r   c                   @   rr   )DRS_EXTENSIONS_INT))dwFlags<L=0)SiteObjGuid16s=b"")Pidr   )dwReplEpochr   )
dwFlagsExtr   )ConfigObjGUIDr   )	dwExtCapsr   Nry   r.   r.   r.   r/   r   5  rz   r   c                   @   r   )DRS_MSG_DCINFOREQ_V1Domain	InfoLevelN)r6   r7   r8   r   r   ri   r.   r.   r.   r/   r   A  r   r   c                   @   "   e Zd ZdeffZddefiZdS )DRS_MSG_DCINFOREQtagr0   V1N)r6   r7   r8   r   	commonHdrr   unionr.   r.   r.   r/   r   H  
    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)r6   r7   r8   r   r   ri   r.   r.   r.   r/   r   Q      r   c                   @      e Zd ZeZdS )"DS_DOMAIN_CONTROLLER_INFO_1W_ARRAYN)r6   r7   r8   r   r   r.   r.   r.   r/   r   \  rz   r   c                   @   r   )#PDS_DOMAIN_CONTROLLER_INFO_1W_ARRAYr;   N)r6   r7   r8   r   r   r.   r.   r.   r/   r   _  r   r   c                   @   r   )DRS_MSG_DCINFOREPLY_V1cItemsrItemsN)r6   r7   r8   r   r   ri   r.   r.   r.   r/   r   e  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r6   r7   r8   r   r   r   ri   r.   r.   r.   r/   r   l       r   c                   @   r   )"DS_DOMAIN_CONTROLLER_INFO_2W_ARRAYN)r6   r7   r8   r   r   r.   r.   r.   r/   r   ~  rz   r   c                   @   r   )#PDS_DOMAIN_CONTROLLER_INFO_2W_ARRAYr;   N)r6   r7   r8   r   r   r.   r.   r.   r/   r     r   r   c                   @   r   )DRS_MSG_DCINFOREPLY_V2r   r   N)r6   r7   r8   r   r   ri   r.   r.   r.   r/   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.   r/   r     s"    r   c                   @   r   )"DS_DOMAIN_CONTROLLER_INFO_3W_ARRAYN)r6   r7   r8   r   r   r.   r.   r.   r/   r     rz   r   c                   @   r   )#PDS_DOMAIN_CONTROLLER_INFO_3W_ARRAYr;   N)r6   r7   r8   r   r   r.   r.   r.   r/   r     r   r   c                   @   r   )DRS_MSG_DCINFOREPLY_V3r   r   N)r6   r7   r8   r   r   ri   r.   r.   r.   r/   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r6   r7   r8   r   r   ri   r.   r.   r.   r/   r     r   r   c                   @   r   ))DS_DOMAIN_CONTROLLER_INFO_FFFFFFFFW_ARRAYN)r6   r7   r8   r   r   r.   r.   r.   r/   r     rz   r   c                   @   r   )*PDS_DOMAIN_CONTROLLER_INFO_FFFFFFFFW_ARRAYr;   N)r6   r7   r8   r   r   r.   r.   r.   r/   r     r   r   c                   @   r   )DRS_MSG_DCINFOREPLY_VFFFFFFFFr   r   N)r6   r7   r8   r   r   ri   r.   r.   r.   r/   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)r0   r=   r>   rq   N)
r6   r7   r8   r   r   r   r   r   r   r   r.   r.   r.   r/   r     s    
r   c                   @   r   )LPWSTR_ARRAYN)r6   r7   r8   r   r   r.   r.   r.   r/   r     rz   r   c                   @   r   )PLPWSTR_ARRAYr;   N)r6   r7   r8   r   r   r.   r.   r.   r/   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)r6   r7   r8   r   r   r   ri   r.   r.   r.   r/   r     r   r   c                   @   r   )DRS_MSG_CRACKREQr   r0   r   N)r6   r7   r8   r   r   r   r   r.   r.   r.   r/   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   r0   r=   r>   r@   rA   rB   rC   rD   rE   rF   N)r6   r7   r8   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.   r/   r[     s    r[   Nr6   r7   r8   r    r[   r.   r.   r.   r/   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.   r/   r     
    r   c                   @   r   )DS_NAME_RESULT_ITEMW_ARRAYN)r6   r7   r8   r   r   r.   r.   r.   r/   r     rz   r   c                   @   r   )PDS_NAME_RESULT_ITEMW_ARRAYr;   N)r6   r7   r8   r   r   r.   r.   r.   r/   r     r   r   c                   @   r   )DS_NAME_RESULTWr   r   N)r6   r7   r8   r   r   ri   r.   r.   r.   r/   r     r   r   c                   @   r   )PDS_NAME_RESULTWr;   N)r6   r7   r8   r   r   r.   r.   r.   r/   r     r   r   c                   @   r   )DRS_MSG_CRACKREPLY_V1pResultN)r6   r7   r8   r   ri   r.   r.   r.   r/   r      r   r   c                   @   r   )DRS_MSG_CRACKREPLYr   r0   r   N)r6   r7   r8   r   r   r   r   r.   r.   r.   r/   r   &  r   r   c                   @   r   )UPTODATE_CURSOR_V1uuidDsausnHighPropUpdateN)r6   r7   r8   r   USNri   r.   r.   r.   r/   r   /  r   r   c                   @   r   )UPTODATE_CURSOR_V1_ARRAYN)r6   r7   r8   r   r   r.   r.   r.   r/   r  5  rz   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)r6   r7   r8   r   r  ri   r.   r.   r.   r/   r  9      r  c                   @   r   )PUPTODATE_VECTOR_V1_EXTr;   N)r6   r7   r8   r  r   r.   r.   r.   r/   r
  B  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)r6   r7   r8   r   ri   r.   r.   r.   r/   r  H  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      g | ]}t |qS r.   )ord).0r   r.   r.   r/   
<listcomp>V      z+WCHAR_ARRAY.__setitem__.<locals>.<listcomp>)ra   datar   __setitem__)r*   r2   valuer.   r.   r/   r  S  s   
zWCHAR_ARRAY.__setitem__c                 C   s|   |dkr8zd dd | j| D W S  ty7   td| j|   td d dd | j| D  Y S w t| |S )Nr;   r\   c                 S   r  r.   chrr  ir.   r.   r/   r  [  r  z+WCHAR_ARRAY.__getitem__.<locals>.<listcomp>zValueError exception on %szSwitching to unichr()c                 S   r  r.   r  r  r.   r.   r/   r  `  r  )joinra   rc   LOGdebugr   __getitem__)r*   r2   r.   r.   r/   r   X  s   
zWCHAR_ARRAY.__getitem__N)r6   r7   r8   r   r  r   r.   r.   r.   r/   r  P  s    r  c                   @   sF   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 Zdd
dZ	dS )DSNAME	structLenSidLenGuidSidNameLen
StringNamec                 C   s   | d S )Nr&  r.   )r*   r  r.   r.   r/   
getDataLenn  s   zDSNAME.getDataLenr   c                 C   s   t | |S r(   )r
   getData)r*   soFarr.   r.   r/   r)  p  s   zDSNAME.getDataNr   )
r6   r7   r8   r   r   r|   r  ri   r(  r)  r.   r.   r.   r/   r!  e  s    r!  c                   @   r   )PDSNAMEr;   N)r6   r7   r8   r!  r   r.   r.   r.   r/   r,  s  r   r,  c                   @   r   )PDSNAME_ARRAYN)r6   r7   r8   r,  r   r.   r.   r.   r/   r-  x  rz   r-  c                   @   r   )PPDSNAME_ARRAYr;   N)r6   r7   r8   r-  r   r.   r.   r.   r/   r.  {  r   r.  c                   @   r   )ATTRTYP_ARRAYN)r6   r7   r8   ATTRTYPr   r.   r.   r.   r/   r/    rz   r/  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)r6   r7   r8   r   r/  ri   r.   r.   r.   r/   r2        r2  c                   @   r   )PPARTIAL_ATTR_VECTOR_V1_EXTr;   N)r6   r7   r8   r2  r   r.   r.   r.   r/   r6    r   r6  c                   @   r   )OID_tlengthelementsNr6   r7   r8   r   r   ri   r.   r.   r.   r/   r7    r   r7  c                   @   r   )PrefixTableEntryndxprefixN)r6   r7   r8   r   r7  ri   r.   r.   r.   r/   r;    r   r;  c                   @   r   )PrefixTableEntry_ARRAYN)r6   r7   r8   r;  r   r.   r.   r.   r/   r>    rz   r>  c                   @   r   )PPrefixTableEntry_ARRAYr;   N)r6   r7   r8   r>  r   r.   r.   r.   r/   r?    r   r?  c                   @   r   )SCHEMA_PREFIX_TABLEPrefixCountpPrefixEntryN)r6   r7   r8   r   r?  ri   r.   r.   r.   r/   r@    r   r@  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)r6   r7   r8   r   r,  r  r
  r6  r@  r   ri   r.   r.   r.   r/   rC    s    rC  c                   @   r   )MTX_ADDRmtx_namelenmtx_nameNr:  r.   r.   r.   r/   rO    r   rO  c                   @   r   )	PMTX_ADDRr;   N)r6   r7   r8   rO  r   r.   r.   r.   r/   rR    r   rR  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)r6   r7   r8   r   rR  rC  ri   r.   r.   r.   r/   rT    r   rT  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_V5rD  rE  rF  rG  rH  rK  rL  rM  rN  
liFsmoInfoN)
r6   r7   r8   r   r,  r  r
  r   r   ri   r.   r.   r.   r/   rW    s    rW  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_V7rU  rV  r   pPartialAttrSetpPartialAttrSetEx1rJ  N)	r6   r7   r8   r   rR  rC  r6  r@  ri   r.   r.   r.   r/   rY        rY  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_V8rD  rE  rF  rG  pUpToDateVecDestrK  rL  rM  rN  rX  rZ  r[  rJ  Nr6   r7   r8   r   r,  r  r
  r   r   r6  r@  ri   r.   r.   r.   r/   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_V10rD  rE  rF  rG  r^  rK  rL  rM  rN  rX  rZ  r[  rJ  ulMoreFlagsNr_  r.   r.   r.   r/   r`    r   r`  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?   rA   rB   rD   N)r6   r7   r8   r   r   rT  rW  rY  r]  r`  r   r.   r.   r.   r/   rc        
rc  c                   @   r   )ATTRVALvalLenpValNr:  r.   r.   r.   r/   rj    r   rj  c                   @   r   )ATTRVAL_ARRAYN)r6   r7   r8   rj  r   r.   r.   r.   r/   rm  %  rz   rm  c                   @   r   )PATTRVAL_ARRAYr;   N)r6   r7   r8   rm  r   r.   r.   r.   r/   rn  (  r   rn  c                   @   r   )ATTRVALBLOCKvalCountpAValN)r6   r7   r8   r   rn  ri   r.   r.   r.   r/   ro  .  r   ro  c                   @   r   )ATTRattrTypAttrValN)r6   r7   r8   r0  ro  ri   r.   r.   r.   r/   rr  5  r   rr  c                   @   r   )
ATTR_ARRAYN)r6   r7   r8   rr  r   r.   r.   r.   r/   ru  ;  rz   ru  c                   @   r   )PATTR_ARRAYr;   N)r6   r7   r8   ru  r   r.   r.   r.   r/   rv  >  r   rv  c                   @   r   )	ATTRBLOCK	attrCountpAttrN)r6   r7   r8   r   rv  ri   r.   r.   r.   r/   rw  D  r   rw  c                   @   rS  )ENTINFr   rK  	AttrBlockN)r6   r7   r8   r,  r   rw  ri   r.   r.   r.   r/   rz  K  r   rz  c                   @   r   )ENTINF_ARRAYN)r6   r7   r8   rz  r   r.   r.   r.   r/   r|  R  rz   r|  c                   @   r   )PENTINF_ARRAYr;   N)r6   r7   r8   r|  r   r.   r.   r.   r/   r}  U  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)r6   r7   r8   r   DSTIMEr   r   ri   r.   r.   r.   r/   r~  [  r5  r~  c                   @   r   )PROPERTY_META_DATA_EXT_ARRAYN)r6   r7   r8   r~  r   r.   r.   r.   r/   r  c  rz   r  c                   @   r   )PROPERTY_META_DATA_EXT_VECTOR	cNumProps
rgMetaDataN)r6   r7   r8   r   r  ri   r.   r.   r.   r/   r  g  r   r  c                   @   r   )PPROPERTY_META_DATA_EXT_VECTORr;   N)r6   r7   r8   r  r   r.   r.   r.   r/   r  m  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_isNDR64ra   r
   
fromStringr*   r  r*  retValr.   r.   r/   r  }  s   zREPLENTINFLIST.fromStringNr+  )
r6   r7   r8   r   rz  r   r   r  ri   r  r.   r.   r.   r/   r  t      r  c                   @   r   )r  r;   N)r6   r7   r8   r  r   r.   r.   r.   r/   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uuidDsaObjSrcrE  rF  rG  usnvecTopUpToDateVecSrcV1PrefixTableSrculExtendedRetcNumObjects	cNumBytespObjects	fMoreDataN)r6   r7   r8   r   r,  r  r
  r@  r9   r   r  r   ri   r.   r.   r.   r/   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.   r/   r    r   r  c                   @   r   )DRS_MSG_GETCHGREPLY_V2CompressedV1N)r6   r7   r8   r  ri   r.   r.   r.   r/   r    r   r  c                   @   rS  )UPTODATE_CURSOR_V2r   r   timeLastSyncSuccessN)r6   r7   r8   r   r   r  ri   r.   r.   r.   r/   r    r   r  c                   @   r   )UPTODATE_CURSOR_V2_ARRAYN)r6   r7   r8   r  r   r.   r.   r.   r/   r    rz   r  c                   @   r  )UPTODATE_VECTOR_V2_EXTr  r  r  r  r  N)r6   r7   r8   r   r  ri   r.   r.   r.   r/   r    r	  r  c                   @   r   )PUPTODATE_VECTOR_V2_EXTr;   N)r6   r7   r8   r  r   r.   r.   r.   r/   r    r   r  c                   @   r   )VALUE_META_DATA_EXT_V1timeCreatedMetaDataN)r6   r7   r8   r  r~  ri   r.   r.   r.   r/   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)r6   r7   r8   r  r~  r   ri   r.   r.   r.   r/   r    r\  r  c                   @   r  )REPLVALINF_V1pObjectrs  Aval
fIsPresentr  r   c                 C      t | ||}|S r(   r
   r  r  r.   r.   r/   r       zREPLVALINF_V1.fromStringNr+  )
r6   r7   r8   r,  r0  rj  r   r  ri   r  r.   r.   r.   r/   r    r  r  c                   @   r   )REPLVALINF_V1_ARRAYN)r6   r7   r8   r  r   r.   r.   r.   r/   r    rz   r  c                   @   r   )PREPLVALINF_V1_ARRAYr;   N)r6   r7   r8   r  r   r.   r.   r.   r/   r    r   r  c                   @   r  )REPLVALINF_V3r  rs  r  r  r  r   c                 C   r  r(   r  r  r.   r.   r/   r    r  zREPLVALINF_V3.fromStringNr+  )
r6   r7   r8   r,  r0  rj  r   r  ri   r  r.   r.   r.   r/   r    r  r  c                   @   r   )REPLVALINF_V3_ARRAYN)r6   r7   r8   r  r   r.   r.   r.   r/   r    rz   r  c                   @   r   )PREPLVALINF_V3_ARRAYr;   N)r6   r7   r8   r  r   r.   r.   r.   r/   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  rE  rF  rG  r  pUpToDateVecSrcr  r  r  r  r  r  cNumNcSizeObjectsccNumNcSizeValues
cNumValuesrgValues
dwDRSErrorNr6   r7   r8   r   r,  r  r  r@  r9   r   r  r   r   ri   r.   r.   r.   r/   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   r0   r=   r>   N)r6   r7   r8   DRS_COMP_ALG_NONEDRS_COMP_ALG_UNUSEDDRS_COMP_ALG_MSZIPDRS_COMP_ALG_WIN2K3r.   r.   r.   r/   r[     s
    r[   Nr   r.   r.   r.   r/   r    r   r  c                   @   rS  )DRS_MSG_GETCHGREPLY_V7dwCompressedVersionCompressionAlgCompressedAnyN)r6   r7   r8   r   r  r  ri   r.   r.   r.   r/   r  &  r   r  c                   @   r  )DRS_MSG_GETCHGREPLY_V9r  rE  rF  rG  r  r  r  r  r  r  r  r  r  r  r  r  r  Nr  r.   r.   r.   r/   r  .  r  r  c                   @   rb  )	DRS_MSG_GETCHGREPLYr   r   r   V6rf  V9)r0   r=   r@   rA   rC   N)r6   r7   r8   r   r   r  r  r  r  r  r   r.   r.   r.   r/   r  J  ri  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)r6   r7   r8   r   r.  rw  r@  ri   r.   r.   r.   r/   r  W  r	  r  c                   @   r   )DRS_MSG_VERIFYREQr   r0   r   N)r6   r7   r8   r   r   r  r   r.   r.   r.   r/   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 )DRS_MSG_VERIFYREPLY_V1errorr   rpEntInfr  N)r6   r7   r8   r   r}  r@  ri   r.   r.   r.   r/   r  j  r5  r  c                   @   r   )DRS_MSG_VERIFYREPLYr   r0   r   N)r6   r7   r8   r   r   r  r   r.   r.   r.   r/   r  s  r   r  c                   @   r1  )DRS_MSG_NT4_CHGLOG_REQ_V1r   PreferredMaximumLength	cbRestartpRestartN)r6   r7   r8   r   r   ri   r.   r.   r.   r/   r  |  r5  r  c                   @   r   )DRS_MSG_NT4_CHGLOG_REQr   r0   r   N)r6   r7   r8   r   r   r  r   r.   r.   r.   r/   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)r6   r7   r8   r   ri   r.   r.   r.   r/   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)r6   r7   r8   r   r  r   ri   r.   r.   r.   r/   r    r\  r  c                   @   r   )DRS_MSG_NT4_CHGLOG_REPLYr   r0   r   N)r6   r7   r8   r   r   r  r   r.   r.   r.   r/   r    r   r  c                   @   s    e Zd ZdZdefdeffZdS )DRSBindr   puuidClientDsa
pextClientN)r6   r7   r8   opnumr   r   ri   r.   r.   r.   r/   r    s
    r  c                   @   rS  )DRSBindResponseppextServerphDrs	ErrorCodeN)r6   r7   r8   r   r   r   ri   r.   r.   r.   r/   r    r   r  c                   @   s   e Zd ZdZdeffZdS )	DRSUnbindr0   r  N)r6   r7   r8   r  r   ri   r.   r.   r.   r/   r    s    r  c                   @   r   )DRSUnbindResponser  r  N)r6   r7   r8   r   r   ri   r.   r.   r.   r/   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)r6   r7   r8   r  r   r   rc  ri   r.   r.   r.   r/   r        r  c                   @   "   e Zd ZdefdefdeffZdS )DRSGetNCChangesResponsepdwOutVersionpmsgOutr  N)r6   r7   r8   r   r  ri   r.   r.   r.   r/   r    r   r  c                   @   r  )DRSVerifyNamesrB   r  r  r  N)r6   r7   r8   r  r   r   r  ri   r.   r.   r.   r/   r    r  r  c                   @   r  )DRSVerifyNamesResponser   r  r  N)r6   r7   r8   r   r  ri   r.   r.   r.   r/   r    r   r  c                   @   r  )DRSGetNT4ChangeLogrE   r  r  r  N)r6   r7   r8   r  r   r   r  ri   r.   r.   r.   r/   r    r  r  c                   @   r  )DRSGetNT4ChangeLogResponser   r  r  N)r6   r7   r8   r   r  ri   r.   r.   r.   r/   r    r   r  c                   @   r  )DRSCrackNamesrF   r  r  r  N)r6   r7   r8   r  r   r   r   ri   r.   r.   r.   r/   r    r  r  c                   @   r  )DRSCrackNamesResponser   r  r  N)r6   r7   r8   r   r   ri   r.   r.   r.   r/   r    r   r  c                   @   r  )DRSDomainControllerInforJ   r  r  r  N)r6   r7   r8   r  r   r   r   ri   r.   r.   r.   r/   r    r  r  c                   @   r  )DRSDomainControllerInfoResponser   r  r  N)r6   r7   r8   r   r   ri   r.   r.   r.   r/   r	    r   r	  )r   r0   r>   rE   rF   rJ   c                 C   s(   | t kr| S | dd  dkr| d S | S )N )r   )stringr.   r.   r/   checkNullString)  s
   r  c                    st   t  }||d< d|d< d|d d< ||d d d< ||d d d< d	|d d d
< t|d d d< | |I d H S )Nr  r0   r  r  r   r   r   r  r   r  r  )r  r   request)dcer  flagsr  r  r.   r.   r/   hDRSGetNT4ChangeLog2  s   r  c                    s    t  }||d< | |I d H S )Nr  )r  r  )r  r  r  r.   r.   r/   
hDRSUnbind?  s   r  c                    sX   t  }||d< d|d< d|d d< t||d d d< ||d d d< | |I d H S )	Nr  r0   r  r  r   r   r   r   )r  r  r  )r  r  domain	infoLevelr  r.   r.   r/   hDRSDomainControllerInfoD  s   r  r.   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 | qF| |I d H S )Nr  r0   r  r  r   r   r   r   r   r   r   r   r   r;   r   )r  lenr   r  appendr  )	r  r  r  r   r   r   r  rb   recordr.   r.   r/   hDRSCrackNamesN  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   r0   r=   r>       )r   r   r"   r  r   )baseKeyr2   key1key2r.   r.   r/   	deriveKeya  s   
..r  c                 C   sH   t |\}}t|t}t|t}|| d d || dd   }|S )NrB   )r  r&   r#   decrypt)cryptedHashridKey1Key2Crypt1Crypt2decryptedHashr.   r.   r/   removeDESLayerp  s
   

$r'  c                 C   sX   t |}td}||  ||d  | }t|}||dd  }|dd  S )Nmd5rt   rJ   r:   )rs   r   newupdatedigestr%   r  )
sessionKey	attributeencryptedPayloadr(  finalMD5cipher	plainTextr.   r.   r/   DecryptAttributeValuez  s   

r2  c                 C   s   t |dd }t| dd  }|dk r t|d d }nt|d d }d}t| }t| D ]\}}|d d |krDd	}|} nq2|du rct }	||	d
< t||	d d< ||	d d< | |	 |d }
|dkro|
d7 }
|}t	 }|d> |
 |d< |S )N.r
  r=   rl   Tr=  r9  Fr<  r8  rn   ro   rJ   r;   )
intsplitr$   rf   listr  	enumerater;  r  r0  )prefixTableoid	lastValue	binaryOID	oidPrefixfToAddposjr   entry	lowerWord	upperWordrs  r.   r.   r/   	MakeAttid  s4   
rD  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d	tdt| d
| S )Nrp   r<  r=  r9  r8  rl   Bro      r  )r8  r  r   strr$   loadr  r  )r9  attrrC  rB  r<  r@  r   r.   r.   r/   OidFromAttid  s"   &rJ  __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.53N)r.   (R  
__future__r   r   builtinsr   	unicryptor   structr   sixr   aiosmbr   r  aiosmb.dcerpc.v5.ndrr	   r
   r   r   r   r   r   aiosmb.dcerpc.v5.dtypesr   r   r   r   r   r   r   r   r   r   r   aiosmb.dcerpc.v5r   r   aiosmb.dcerpc.v5.structurer   aiosmb.dcerpc.v5.uuidr   r   aiosmb.dcerpc.v5.enumr    aiosmb.dcerpc.v5.rpcrtr!   unicrypto.symmetricr"   r#   asn1crypto.corer$   r%   r&   MSRPC_UUID_DRSUAPIr'   r9   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_SECRETSr0  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_NUMBERrs   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-  r.  r/  r2  r6  r7  r;  r>  r?  r@  rC  rO  rR  rT  rW  rY  r]  r`  rc  rj  rm  rn  ro  rr  ru  rv  rw  rz  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  r'  r2  rD  rJ  r6   r9  oid0oid1oid2oid3oid4o0r`   hexo1o2o3o4jjr.   r.   r.   r/   <module>   s  $4$					
					






	

,