o
    àý°jþ*  ã                   @   sf   d dl Z d dlZd dlmZmZmZ d dlmZmZm	Z	 d dl
mZ d dlmZmZ G dd„ dƒZdS )é    N)Ú	transportÚsrvsÚscmr)ÚsmbÚsmb3ÚLOG)ÚSMBConnection)ÚFILE_WRITE_DATAÚFILE_DIRECTORY_FILEc                   @   sn   e Zd Zddd„Zedd„ ƒZedd„ ƒZd	d
„ Zdd„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ ZdS )ÚServiceInstallÚ Nc                 C   sš   d| _ t|ƒdkr|nd dd„ tdƒD ƒ¡| _|d u r,d dd„ tdƒD ƒ¡d | _n|| _|| _t|tj	ƒs>t|t
jƒrEt|d	�| _n|| _d| _d S )
Nr   r   c                 S   ó   g | ]}t  tj¡‘qS © ©ÚrandomÚchoiceÚstringÚascii_letters©Ú.0Úir   r   ú“/root/aizidognhua/tmp/workspace/projects/ec89d86c-575f-41c9-af57-ac45cbdbf775/venv/lib/python3.10/site-packages/impacket/examples/serviceinstall.pyÚ
<listcomp>!   ó    z+ServiceInstall.__init__.<locals>.<listcomp>é   c                 S   r   r   r   r   r   r   r   r   $   r   é   z.exe)ÚexistingConnection)Ú_rpctransportÚlenÚjoinÚrangeÚ_ServiceInstall__service_nameÚ$_ServiceInstall__binary_service_nameÚ_ServiceInstall__exeFileÚ
isinstancer   ÚSMBr   ÚSMB3r   Ú
connectionÚshare)ÚselfÚ	SMBObjectÚexeFileÚserviceNameÚbinary_service_namer   r   r   Ú__init__   s   * 
zServiceInstall.__init__c                 C   ó   | j S ©N)r!   ©r)   r   r   r   r,   3   ó   zServiceInstall.serviceNamec                 C   r/   r0   )r"   r1   r   r   r   ÚbinaryServiceName7   r2   z ServiceInstall.binaryServiceNamec                 C   r/   r0   )r(   r1   r   r   r   ÚgetShare;   s   zServiceInstall.getSharec                 C   s�   t  d| j ¡  ¡ z/tj| j ¡ | j ¡ d| jd�| _| j ¡ }| ¡  | 	t
j¡ t
 |d¡}|d d d W S    t  d| j ¡  ¡ ‚ )	NzRequesting shares on %s.....z\srvsvc©ÚfilenameÚsmb_connectioné   Ú
InfoStructÚ	ShareInfoÚLevel1z,Error requesting shares on %s, aborting.....)r   Úinfor'   ÚgetRemoteHostr   ÚSMBTransportr   Úget_dce_rpcÚconnectÚbindr   ÚMSRPC_UUID_SRVSÚhNetrShareEnumÚcritical)r)   Údce_srvsÚrespr   r   r   Ú	getShares>   s   
þ
zServiceInstall.getSharesc              
   C   sü   t  d| j| j ¡ f ¡ zt | j|| jd ¡}W n ty8 } zt	|ƒ 
d¡dkr,n|‚W Y d }~nd }~ww t | j|d ¡ t | j|d ¡ d|| jf }ztj| j|| jd | jd |d tjd�}W |d S    t  d| j| j ¡ f ¡ ‚ )	NzCreating service %s on %s.....ú ÚERROR_SERVICE_DOES_NOT_EXISTr   ÚlpServiceHandlez%s\%s)ÚlpBinaryPathNameÚdwStartTypezError creating service %s on %s)r   r<   r!   r'   r=   r   ÚhROpenServiceWÚrpcsvcÚ	ExceptionÚstrÚfindÚhRDeleteServiceÚhRCloseServiceHandler"   ÚhRCreateServiceWÚSERVICE_DEMAND_STARTrD   )r)   Úhandler(   ÚpathrF   ÚeÚcommandr   r   r   ÚcreateServiceP   s*   þ€ý
ÿüzServiceInstall.createServicec                 C   s”   t  d| j ¡  ¡ tj| j ¡ | j ¡ d| jd�| _| j ¡ | _| j 	¡  | j 
tj¡ zt | j¡}W |d S    t  d| j ¡  ¡ tdƒ‚)NzOpening SVCManager on %s.....z\svcctlr5   z#Error opening SVCManager on %s.....zUnable to open SVCManagerÚ
lpScHandle)r   r<   r'   r=   r   r>   r   r?   rN   r@   rA   r   ÚMSRPC_UUID_SCMRÚhROpenSCManagerWrD   rO   )r)   rF   r   r   r   ÚopenSvcManagerl   s   ÿ
üzServiceInstall.openSvcManagerc                 C   sr   t  d| ¡ t|tƒrt|dƒ}n|}|}| dd¡}z| j |||j¡ W n   t  	d| ¡ ‚ | 
¡  d S )NzUploading file %sÚrbú/ú\z&Error uploading file %s, aborting.....)r   r<   r$   rP   ÚopenÚreplacer'   ÚputFileÚreadrD   Úclose)r)   ÚsrcÚtreeÚdstÚfhÚfÚpathnamer   r   r   Ú	copy_file|   s   
zServiceInstall.copy_filec              
   C   sü   d }|d D ]u}|d t jks|d t jkr{|d d d… }d}zNz| j |¡}| jj|dttd� W n   tj	dd	d
� t 
d| ¡ Y nt d| ¡ t|ƒ}W |dkr`| j |¡  |S  |S W |dkrn| j |¡ q|dkrz| j |¡ w w q|S )NÚBufferÚ	shi1_typeÚshi1_netnameéÿÿÿÿr   ra   )ÚcreationOptionrO   T©Úexc_infozshare '%s' is not writable.zFound writable share %s)r   ÚSTYPE_DISKTREEÚSTYPE_SPECIALr'   ÚconnectTreeÚopenFiler	   r
   r   ÚdebugrD   r<   rP   ÚdisconnectTree)r)   ÚsharesÚwriteableSharer   r(   Útidr   r   r   ÚfindWritableShare�   s:   þø€ÿÿñz ServiceInstall.findWritableSharec           	   
   C   sö  | j  ¡ rt d¡ | j  ¡  | ` d S d}d}z~|  ¡ }|  |¡| _| jd u r*W dS |  | j	| j| j
¡ d}|  ¡ }|dkr“| j  ¡ }| j ¡ dkrMd}n|dkrYd|| jf }nd	| j }|  || j|¡}d}|dkr‰t d
| j ¡ z	t | j|¡ W n   Y t | j|¡ t | j|¡ W dS W dS  tyú } zYt d| ¡ tjddd� zt | j|tj¡ W n   Y |du rÏz| j  | j| j
¡ W n   Y |du rèz	t | j|¡ W n   Y W Y d }~dS W Y d }~dS W Y d }~dS d }~ww )Nz Authenticated as Guest. AbortingFTr   zadmin$z%systemroot%r   z\\%s\%sz\\127.0.0.1\zStarting service %s.....z2Error performing the installation, cleaning up: %srO   rs   )r'   ÚisGuestSessionr   rD   ÚlogoffrG   r~   r(   rm   r#   r"   r^   ÚgetServerNameÚlowerrZ   r<   r!   r   ÚhRStartServiceWrN   rS   rO   ry   ÚhRControlServiceÚSERVICE_CONTROL_STOPÚ
deleteFilerR   )	r)   Ú
fileCopiedÚserviceCreatedr{   Ú
svcManagerÚ
serverNamerW   ÚservicerX   r   r   r   Úinstall¤   st   





ì&ï
û
ý€ïzServiceInstall.installc                 C   s~  d}d}z`|   ¡ }|dkrQt | j|| jd ¡}|d }t d| j ¡ zt | j|tj¡ W n   Y t d| j ¡ t 	| j|¡ t 
| j|¡ t 
| j|¡ t d| j ¡ | j | j| j¡ W d S  ty¾   t d¡ zt | j|tj¡ W n   Y |du r¤z| j | j| j¡ W n   z| j | j| j¡ W n   Y Y |du r»zt 	| j|¡ W Y d S    Y Y d S Y d S w )	NTr   rH   rJ   zStopping service %s.....zRemoving service %s.....zRemoving file %s.....z0Error performing the uninstallation, cleaning up)r^   r   rM   rN   r!   r   r<   r„   r…   rR   rS   r"   r'   r†   r(   rO   rD   )r)   r‡   rˆ   r‰   rF   r‹   r   r   r   Ú	uninstallÞ   sP   
üñzServiceInstall.uninstall)r   N)Ú__name__Ú
__module__Ú__qualname__r.   Úpropertyr,   r3   r4   rG   rZ   r^   rm   r~   rŒ   r�   r   r   r   r   r      s    


:r   )r   r   Úimpacket.dcerpc.v5r   r   r   Úimpacketr   r   r   Úimpacket.smbconnectionr   Úimpacket.smb3structsr	   r
   r   r   r   r   r   Ú<module>   s   