o
    j'                     @   s   d dl Z d dlmZ d dlT 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 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 	 G dd dZdd Zedkrjd dlZee  dS dS )    N)List)*)DCERPC5Connection)DCERPCTarget)
DCERPCAuth)RPC_C_AUTHN_LEVEL_NONERPC_C_AUTHN_LEVEL_CONNECTRPC_C_AUTHN_LEVEL_CALLRPC_C_AUTHN_LEVEL_PKTRPC_C_AUTHN_LEVEL_PKT_INTEGRITYRPC_C_AUTHN_LEVEL_PKT_PRIVACY)UniProxyTarget)	UniTarget)SPNEGOCredential)NTLMCredential)KerberosCredentialc                	   @   s  e Zd Zd,dedefddZdd Zdd	 Zed-de	de
dee fddZed.de	de
fddZed/dede
de	fddZededefddZed0dee de
de
fddZdd Zd1d d!Zefd"d#Zd$d Zd%d& Zd'd( Zeeeee d)fd*d+ZdS )2EPMN
connectiondata_representationc                 C   s&   || _ || _|d u rtd| _d S d S )N)z$8a885d04-1ceb-11c9-9fe8-08002b104860z2.0)dcer   uuidtup_to_bin)selfr   r    r   /root/aizidognhua/tmp/workspace/projects/ec89d86c-575f-41c9-af57-ac45cbdbf775/venv/lib/python3.10/site-packages/aiosmb/dcerpc/v5/interfaces/endpointmgr.py__init__   s
   zEPM.__init__c                    s   | S Nr   r   r   r   r   
__aenter__!   s   zEPM.__aenter__c                    s   |   I d H  d S r   )
disconnect)r   exc_typeexc	tracebackr   r   r   	__aexit__$   s   zEPM.__aexit__   ncacn_ip_tcpportprotocolproxiesc           	      C   s>   d|| |f }t j||d}d}t||}|t t||S )zF
		Sets up the EPM object from IP/hostname port protocol parameters
			%s:%s[%s]r'   N)r   from_connection_stringr   set_auth_typer   r   )	ipr%   r&   r   r'   dcerpc_target_strtargetauthr   r   r   r   from_address'   s   


zEPM.from_addressc                 C   sd   d|| j  |f }tj|| j j| j j| j j| j  d}t	| j
}t||}|t t||S )z@
		Sets up the EPM connection from an existing SMB connection
		r(   r'   dc_ipdomainhostname)r.   get_ip_or_hostnamer   r*   r'   r2   r3   get_hostname_or_ipr   from_smb_gssapigssapir   r+   r   r   )smb_connectionr%   r&   r   r-   r.   r/   r   r   r   r   from_smbconnection6   s   


zEPM.from_smbconnectionr.   c                 C   sl   d||   |f }tj|| j| j| j|  d} d }|d ur#t|}t	|| }|d u r1|
t t||S )Nr(   r1   )r5   r   r*   r'   r2   r3   r6   r   r7   r   r+   r   r   )r.   r&   r%   r   credentialsr-   r/   r   r   r   r   from_unitargetH   s   



zEPM.from_unitarget
credentialc           
   
      s   d }znzJt | }| I d H \}}|d ur|||I d H \}}|d ur)|tj|| j| j| jd}t	
|}t||d fW W |d urN| I d H  S S  tyq }	 zd|	fW  Y d }	~	W |d url| I d H  S S d }	~	ww |d ur~| I d H  w w )Nr'   r2   r3   F)r   r<   connectmapr   r*   r'   r2   r3   r   r7   r   r   	Exception)
r.   r=   remoteIfepm_errres	dcetargetdcecreder   r   r   create_connectionZ   s4   

zEPM.create_connectionr2   r3   c           
   
      s   d }zcz?t j| |d}| I d H \}}|d ur|||I d H \}}|d ur+|tj||||dd fW W |d urC| I d H  S S  tyf }	 zd|	fW  Y d }	~	W |d ura| I d H  S S d }	~	ww |d urs| I d H  w w )Nr)   r>   F)r   r0   r?   r@   r   r*   r   rA   )
r,   rB   r'   r2   r3   rC   rD   rE   rF   rI   r   r   r   create_targetq   s0   zEPM.create_targetc                    s$   | j d ur| j  I d H  d S d S r   r   r   r   r   r   r   r      s   
zEPM.disconnectTc              
      sj   z| j  I d H \}}|d ur||sW dS |  I d H W S  ty4 } z
d|fW  Y d }~S d }~ww N)TNF)r   r?   bindrA   )r   autobindrD   rE   rI   r   r   r   r?      s   zEPM.connectc              
      sX   z| j |I d H \}}|d ur|W dS  ty+ } z
d|fW  Y d }~S d }~ww rM   )r   rN   rA   )r   uuidrD   rE   rI   r   r   r   rN      s   zEPM.bindc                    s   | j  I d H  d S r   rL   r   r   r   r   r      s   c              
      sD   z
| j |I d H W S  ty! } z
d |fW  Y d }~S d }~ww r   )r   requestrA   )r   rQ   rI   r   r   r   rQ      s   zEPM.requestc              
      sV  zt  }t }|d d |d< td|dd  d d d |d< td|dd  d |d< t }| jd d |d	< td| jdd  d d d |d< td| jdd  d |d< t }t|d
< | jjj	dkrt
 }d|d< t }td| jjj |d< | |  }nG| jjj	dkrt }	d|	d< t }
d|
d< |	 |
  }n)| jjj	dkrt }	t|	d< d|	d< t }
d|
d< |	 |
  }ntd| j d|d< | |  |  | |d< t }d|d< t||d d< | |d d< d|jd jd < d|jd jd < | j|I d H \}}|d ur|t d!|d" d d# d }d }| jjj	dkrRt
|d d$  }d%| jj |d d&d d' f }n=| jjj	dkrqt|d d$  }	d(| jj |	d f }n| jjj	dkrt|d d$  }	d)| jj |	d f }|d fW S  ty } z
d |fW  Y d }~S d }~ww )*N   InterfaceUUIDz<H   r   MajorVersion   MinorVersionDataRepUuidProtIdentifierncacn_np    PipeNamez%s HostNamer$   IpPorts       Ip4addr
ncacn_httpPortIdentifierzUnsupported protocol! %s   NumberOfFloorsFloors   
max_towers	map_towertower_lengthtower_octet_stringobj
ReferentID    ITowersData   zncacn_np:%s[%s]zutf-8zncacn_ip_tcp:%s[%s]zncacn_http:%s[%s])EPMTowerEPMRPCInterfaceunpackEPMRPCDataRepresentationr   EPMProtocolIdentifierFLOOR_RPCV5_IDENTIFIERr   r.   rpcprotocolEPMPipeNameEPMHostNamebr,   getDataEPMPortAddrEPMHostAddrFLOOR_HTTP_IDENTIFIERrA   r&   ept_maplenfieldsrQ   joinr5   decode)r   rB   tower	interfacedataRepprotIdpipeNamehostNametransportDataportAddrhostAddrrQ   resprE   resultrI   r   r   r   r@      sx   "$ 
(
zEPM.mapi  c              
      sH  zt  }||d< ||d< |tkr4|d d |d d< |dd  d d |d d< |dd  |d d	< n||d< ||d
< ||d< ||d< | j|I d H \}}	|	d urU|	g }
t|d D ]+}i }|d | }|d |d< d|d |d< td|d d |d< |
| q]|
d fW S  ty } z
d |fW  Y d }~S d }~ww )Ninquiry_typeobjectrR   IfidUuidrT   	VersMajorrV   	VersMinorvers_optionentry_handlemax_entsnum_entsentriesrl   
annotationr   ri   )	
ept_lookupNULLr   rQ   ranger   rq   appendrA   )r   r   
objectUUIDifIdr   r   r   rQ   r   rE   r   itmpEntryentryrI   r   r   r   lookup   s:   
z
EPM.lookupr   )r#   r$   NN)r#   r$   N)r$   r#   NN)NNN)T)__name__
__module____qualname__r   bytesr   r   r"   staticmethodintstrr   r   r0   r:   r   r<   r   rJ   rK   r   r?   MSRPC_UUID_PORTMAPrN   rQ   r@   RPC_C_EP_ALL_ELTSr   RPC_C_VERS_ALLept_lookup_handle_tr   r   r   r   r   r      s*    
	Sr   c               
      s   zHddl m}  td}| I d H \}}|d ur|| I d H \}}|d ur+|t| t  || jI d H \}}|d urC|t| W d S  t	y` } zt
  W Y d }~d S d }~ww )Nr   )nrpcz
10.10.10.2)aiosmb.dcerpc.v5r   r   r0   r?   r   printr@   MSRPC_UUID_NRPCrA   r!   	print_exc)r   rC   rD   rE   rF   rI   r   r   r   amain  s(   
r   __main__) r!   typingr   aiosmb.dcerpc.v5.epmaiosmb.dcerpc.v5.connectionr   )aiosmb.dcerpc.v5.common.connection.targetr   1aiosmb.dcerpc.v5.common.connection.authenticationr   aiosmb.dcerpc.v5.rpcrtr   r   r	   r
   r   r   asysocks.unicomm.common.proxyr   asysocks.unicomm.common.targetr   !asyauth.common.credentials.spnegor   asyauth.common.credentials.ntlmr   #asyauth.common.credentials.kerberosr   r   r   r   asynciorunr   r   r   r   <module>   s*       