o
    j|                      @   s   d dl mZ d dlZd dlZd dlZd dlmZ d dlmZ d dl	m
Z
 d dlmZ d dlmZ d dlmZ d d	lmZ d d
lmZmZmZmZmZmZmZmZ d dlmZ edddZG dd dZdS )    )TupleN)logger)SMBConnection)DCERPC5Connection)tsch)EPM)SMBDCEFactory)NULL)RPC_C_AUTHN_LEVEL_NONERPC_C_AUTHN_LEVEL_CONNECTRPC_C_AUTHN_LEVEL_CALLRPC_C_AUTHN_LEVEL_PKTRPC_C_AUTHN_LEVEL_PKT_INTEGRITYRPC_C_AUTHN_LEVEL_PKT_PRIVACYDCERPCExceptionRPC_C_AUTHN_GSS_NEGOTIATE)asynccontextmanagerTFc                 C  sR   t j| |||dI d H \}}|r|z|V  W | I d H  d S | I d H  w )N
auth_levelopenperform_dummy)TSCHRPCfrom_smbconnectionclose)
connectionr   r   r   instanceerr r   /root/aizidognhua/tmp/workspace/projects/ec89d86c-575f-41c9-af57-ac45cbdbf775/venv/lib/python3.10/site-packages/aiosmb/dcerpc/v5/interfaces/tschmgr.pytschrpc_from_smb   s   "r   c                   @   s   e Zd Zdd Zdd Zdd Zdd Zed-dede	de	fddZ
ed-dede	de	fddZd	ejeejfddZdd Zdd Zdd Zd.ddZdd Zd d! Zd.d"d#Zd/d%d&Zd'd( Zd)d* Zd+d, Zd	S )0r   c                 C   s   d| _ tj| _d | _d S )Nz\atsvc)service_pipenamer   MSRPC_UUID_TSCHSservice_uuiddceselfr   r   r   __init__#   s   
zTSCHRPC.__init__c                    s   | S Nr   r$   r   r   r   
__aenter__(   s   zTSCHRPC.__aenter__c                    s   |   I d H  dS NTN)r   )r%   exc_typeexc	tracebackr   r   r   	__aexit__+   s   zTSCHRPC.__aexit__c              
      sd   z| j rz| j  I d H  W W d S    Y W d S W dS  ty1 } z
d |fW  Y d }~S d }~ww r)   )r#   
disconnect	Exception)r%   er   r   r   r   /   s   zTSCHRPC.closeNTFr   r   r   c              
      s   z=t  }| |_|j| |d u r|jt |j I d H \}}|d ur(||j|jI d H \}}|d ur:||d fW S  tyT } z
d|fW  Y d }~S d }~ww )NF)r   r#   set_auth_levelr   connectbindr"   r0   )r   r   r   r   service_r   r1   r   r   r   from_rpcconnection<   s$   
zTSCHRPC.from_rpcconnectionc              
      s   z)|du rt }t| t jd}tj| |||dI dH \}}|dur&||dfW S  ty@ } z
d|fW  Y d}~S d}~ww )z
		Creates the connection to the service using an established SMBConnection.
		This connection will use the given SMBConnection as transport layer.
		N)filenamer   )r   r   r   r    r7   get_dce_rpcr0   )r   r   r   r   rpctransportr5   r   r1   r   r   r   r   R   s    
zTSCHRPC.from_smbconnectionc                    sx   |d u rt d }|d dkrd| }|d u rt}t| j|||||I d H \}}|d ur4d |fS |d }||fS )N   r   \pActualPath)osurandomhexr	   r   hSchRpcRegisterTaskr#   )r%   template	task_nameflagssddl
logon_typeresr   r   r   r   register_taskd   s    zTSCHRPC.register_taskc              
      s   |d dkrd| }t | j|I d H \}}|d urd |fS |d d |d d |d d |d d |d d |d d	 |d d
 |d d |d d	}||fS )Nr   r<   pLastRuntimewYearwMonth
wDayOfWeekwDaywHourwMinutewSecondwMilliseconds)	YearMonth	DayOfWeekDayHourMinuteSecondMilisecondsLastReturnCode)r   hSchRpcGetLastRunInfor#   )r%   rC   rG   r   tr   r   r   get_task_last_run_infou   s"   







zTSCHRPC.get_task_last_run_infoc                    sF   |d dkrd| }t | j|I dH \}}|durd|fS d|fS )z
		Deletes a task
		r   r<   NFT)r   hSchRpcDeleter#   r%   rC   r6   r   r   r   r   delete_task   s   zTSCHRPC.delete_taskc                    s6   |d dkrd| }t | j|I dH \}}d|fS )z
		Starts a task
		r   r<   NT)r   
hSchRpcRunr#   r_   r   r   r   run_task   s
   zTSCHRPC.run_taskr<   c              
   C     z-t | j|I dH \}}|durd|fV  W dS |d D ]}|d dddfV  qW dS  tyF } zd|fV  W Y d}~dS d}~ww )z5
		Lists all available tasks on the remote machine
		NpNamesData  )r   hSchRpcEnumTasksr#   replacer0   r%   pathrespr   namer1   r   r   r   
list_tasks      

zTSCHRPC.list_tasksc                    J   |d dkrd| }t | j|I dH \}}|durd|fS |d dfS )z
		Returns the task XML
		r   r<   NpXml)r   hSchRpcRetrieveTaskr#   r%   rC   rl   r   r   r   r   get_task      zTSCHRPC.get_taskc                    rp   )z5
		Returns the selected task's security descriptor
		r   r<   NrE   )r   hSchRpcGetSecurityr#   rs   r   r   r   get_task_sd   ru   zTSCHRPC.get_task_sdc              
   C  rc   )z7
		Lists all available folders on the remote machine
		Nrd   re   rf   rg   )r   hSchRpcEnumFoldersr#   ri   r0   rj   r   r   r   list_folders   ro   zTSCHRPC.list_folders
   c                    s   |  |}| |I dH \}}|durd|fS | |I dH \}}|dur*d|fS 	 |dk r5dtdfS | |I dH \}}|durGd|fS |d dkrNn|d8 }tdI dH  q+| |I dH \}}|durmd|fS dS )zy
		Executes a list of shell commands by scheduling a new task and starts it.
		At the end the new task will be deleted
		NTr   zmaxwait timeout!rR      r*   )gen_xmlrH   rb   r0   r]   asynciosleepr`   )r%   commandsmaxwaitrB   rC   r   r6   rG   r   r   r   run_commands   s.   
zTSCHRPC.run_commandsc                 C   s   d | |S )Na  <?xml version="1.0" encoding="UTF-16"?>
<Task version="1.2" xmlns="http://schemas.microsoft.com/windows/2004/02/mit/task">
  <Triggers>
	<CalendarTrigger>
	  <StartBoundary>2015-07-15T20:35:13.2757294</StartBoundary>
	  <Enabled>true</Enabled>
	  <ScheduleByDay>
		<DaysInterval>1</DaysInterval>
	  </ScheduleByDay>
	</CalendarTrigger>
  </Triggers>
  <Principals>
	<Principal id="LocalSystem">
	  <UserId>S-1-5-18</UserId>
	  <RunLevel>HighestAvailable</RunLevel>
	</Principal>
  </Principals>
  <Settings>
	<MultipleInstancesPolicy>IgnoreNew</MultipleInstancesPolicy>
	<DisallowStartIfOnBatteries>false</DisallowStartIfOnBatteries>
	<StopIfGoingOnBatteries>false</StopIfGoingOnBatteries>
	<AllowHardTerminate>true</AllowHardTerminate>
	<RunOnlyIfNetworkAvailable>false</RunOnlyIfNetworkAvailable>
	<IdleSettings>
	  <StopOnIdleEnd>true</StopOnIdleEnd>
	  <RestartOnIdle>false</RestartOnIdle>
	</IdleSettings>
	<AllowStartOnDemand>true</AllowStartOnDemand>
	<Enabled>true</Enabled>
	<Hidden>true</Hidden>
	<RunOnlyIfIdle>false</RunOnlyIfIdle>
	<WakeToRun>false</WakeToRun>
	<ExecutionTimeLimit>P3D</ExecutionTimeLimit>
	<Priority>7</Priority>
  </Settings>
  <Actions Context="LocalSystem">
	{}
  </Actions>
</Task>
)formatgen_commands)r%   r   r   r   r   r|     s   'zTSCHRPC.gen_xmlc                 C   s&   d}|D ]}|d | |7 }q|S )Nrg   zQ
	 <Exec>
	  <Command>cmd.exe</Command>
	  <Arguments>/C {}</Arguments>
	 </Exec>)r   
xml_escape)r%   r   retcommandr   r   r   r   .  s   zTSCHRPC.gen_commandsc                    s(   dddddd d  fdd	|D S )
Nz&amp;z&quot;z&apos;z&gt;z&lt;)&"'><rg   c                 3   s    | ]	}  ||V  qd S r'   )get).0creplace_tabler   r   	<genexpr>A  s    z%TSCHRPC.xml_escape.<locals>.<genexpr>)join)r%   datar   r   r   r   9  s   zTSCHRPC.xml_escapeNTF)r<   )rz   )__name__
__module____qualname__r&   r(   r.   r   staticmethodr   boolr7   r   r   r   TASK_CREATEr	   TASK_LOGON_NONErH   r]   r`   rb   rn   rt   rw   ry   r   r|   r   r   r   r   r   r   r   "   s*    



%+r   r   ) typingr   r>   r}   r-   aiosmbr   aiosmb.connectionr   aiosmb.dcerpc.v5.connectionr   aiosmb.dcerpc.v5r   'aiosmb.dcerpc.v5.interfaces.endpointmgrr   0aiosmb.dcerpc.v5.common.connection.smbdcefactoryr   aiosmb.dcerpc.v5.dtypesr	   aiosmb.dcerpc.v5.rpcrtr
   r   r   r   r   r   r   r   
contextlibr   r   r   r   r   r   r   <module>   s     (
