o
    àý°j.  ã                   @   sd  d dl mZ d dl mZ d dlZd dlZd dlmZ d dlmZm	Z	 d dl
mZmZmZmZ d dlmZ d dlmZ d d	lmZ ed
ƒZG dd„ deƒZdZdZdZeZd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(G d+d,„ d,eƒZ)e$e%fe&e'fe(e)fd-œZ*G d.d/„ d/ƒZ+d0d1„ Z,d2d3„ Z-e.d4k�r0d d5l/m0Z0 e+ƒ Z1d6e1_2d7e1_3de1_4e+ƒ Z5d6e5_2d7e5_3d8e5_4e6d9ƒ e0e1 7¡ ƒ e6d:ƒ e0e5 7¡ ƒ e6d;ƒ e0e1 8e5 7¡ ¡ƒ e0e5 8e1 7¡ ¡ƒ dS dS )<é    )Údivision)Úprint_functionN)Ú	nt_errors)ÚDWORDÚULONG)ÚNDRCALLÚ	NDRSTRUCTÚ
NDRPOINTERÚNDRUniConformantArray)ÚDCERPCException)Úuuidtup_to_bin)Ú	Structure)z$17FC11E9-C258-4B8D-8D07-2F4125156244z1.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/mimilib.pyr   )   s   zDCERPCSessionError.__init__c                 C   sF   | j }|tjv rtj| d }tj| d }d| j ||f S d| j  S )Nr   é   z+Mimikatz SessionError: code: 0x%x - %s - %sz/Mimikatz SessionError: unknown error code: 0x%x)r   r   ÚERROR_MESSAGES)r   ÚkeyÚerror_msg_shortÚerror_msg_verboser   r   r   Ú__str__,   s   

zDCERPCSessionError.__str__)NNN)Ú__name__Ú
__module__Ú__qualname__r   r   r   r   r   r   r   (   s    
r   iª  é   é   ih  c                   @   ó   e Zd ZdZddd„ZdS )ÚPUBLICKEYSTRUC))ÚbTypeúB=0)ÚbVersionr$   )Úreservedz<H=0)ÚaiKeyAlgú<L=0Nr   c                 C   s*   t  | ||¡ t| d< t| d< t| d< d S )Nr#   r%   r'   )r   r   ÚTPUBLICKEYBLOBÚCUR_BLOB_VERSIONÚCALG_DH_EPHEM©r   ÚdataÚ	alignmentr   r   r   r   H   s   zPUBLICKEYSTRUC.__init__©Nr   ©r   r   r   Ú	structurer   r   r   r   r   r"   A   s    r"   c                   @   r!   )ÚDHPUBKEY))Úmagicr(   )Úbitlenr(   Nr   c                 C   s"   t  | ||¡ d| d< d| d< d S )Ni DH1r3   é   r4   )r   r   r,   r   r   r   r   S   s   zDHPUBKEY.__init__r/   r0   r   r   r   r   r2   N   s    r2   c                   @   s.   e Zd ZddefddefddfZd
dd	„ZdS )ÚPUBLICKEYBLOBÚpublickeystrucú:Údhpubkey)ÚyLenz_-yÚ128)Úyr8   Nr   c                 C   s.   t  | ||¡ tƒ  ¡ | d< tƒ  ¡ | d< d S )Nr7   r9   )r   r   r"   ÚgetDatar2   r,   r   r   r   r   _   s   zPUBLICKEYBLOB.__init__r/   )r   r   r   r"   r2   r1   r   r   r   r   r   r6   X   s    ür6   c                   @   s   e Zd ZdZdd„ ZdS )ÚMIMI_HANDLE))ÚDataz20s=""c                 C   s   | j du rdS dS )NTé   é   )Ú_isNDR64©r   r   r   r   ÚgetAlignmenth   s   
zMIMI_HANDLE.getAlignmentN)r   r   r   r1   rD   r   r   r   r   r>   d   s    r>   c                   @   s   e Zd ZdZdS )Ú
BYTE_ARRAYÚcN)r   r   r   Úitemr   r   r   r   rE   n   s    rE   c                   @   ó   e Zd ZdeffZdS )ÚPBYTE_ARRAYr?   N)r   r   r   rE   Úreferentr   r   r   r   rI   q   ó    ÿrI   c                   @   ó"   e Zd ZdefdefdeffZdS )ÚMIMI_PUBLICKEYÚsessionTypeÚcbPublicKeyÚpbPublicKeyN)r   r   r   ÚALG_IDr   rI   r1   r   r   r   r   rM   v   ó
    ýrM   c                   @   rH   )ÚPMIMI_PUBLICKEYr?   N)r   r   r   rM   rJ   r   r   r   r   rS   }   rK   rS   c                   @   ó   e Zd ZdZdeffZdS )ÚMimiBindr   ÚclientPublicKeyN)r   r   r   ÚopnumrM   r1   r   r   r   r   rU   …   ó    ÿrU   c                   @   rL   )ÚMimiBindResponseÚserverPublicKeyÚphMimiÚ	ErrorCodeN)r   r   r   rM   r>   r   r1   r   r   r   r   rY   ‹   rR   rY   c                   @   rT   )Ú
MimiUnbindr   r[   N)r   r   r   rW   r>   r1   r   r   r   r   r]   ’   rX   r]   c                   @   s   e Zd ZdefdeffZdS )ÚMimiUnbindResponser[   r\   N)r   r   r   r>   r   r1   r   r   r   r   r^   ˜   s    þr^   c                   @   s&   e Zd ZdZdefdefdeffZdS )ÚMimiCommandr    r[   ÚszEncCommandÚ
encCommandN)r   r   r   rW   r>   r   rI   r1   r   r   r   r   r_   ž   s    ýr_   c                   @   rL   )ÚMimiCommandResponseÚszEncResultÚ	encResultr\   N)r   r   r   r   rI   r   r1   r   r   r   r   rb   ¦   rR   rb   )r   r   r    c                   @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )Ú
MimiDiffeHc                 C   s   d| _ d| _t d¡| _d S )Nr    lE   ÿÿÿÿ8Ê{3If?ñE yéZô3¢Vý58nÛoP·eõ?a-ûÓtBLèûy3W[�<‘p¨6m5ÂÝPøß&aÌF!Í33*¾w& ãAR‘M;L}. c|&A“@”h\Š&&#-D¨v‡dÿÿÿÿ r5   )ÚGÚPÚrandomÚgetrandbitsÚ
privateKeyrC   r   r   r   r   ¼   s   zMimiDiffeH.__init__c                 C   sJ   t | j| j| jƒ| _t| jƒdd …  d¡}t|ƒd@ r d| }t 	|¡S )Nr    ÚLr   Ú0)
Úpowrf   rj   rg   Ú	publicKeyÚhexÚrstripÚlenÚbinasciiÚ	unhexlify)r   Útmpr   r   r   ÚgenPublicKeyÂ   s
   
zMimiDiffeH.genPublicKeyc                 C   sZ   t t |¡dd�}t|| j| jƒ| _t| jƒdd …  d¡}t	|ƒd@ r(d| }t 
|¡S )Né   )Úbaser    rk   r   rl   )Úintrr   Úhexlifyrm   rj   rg   ÚsharedSecretro   rp   rq   rs   )r   rZ   ÚpubKeyrt   r   r   r   ÚgetSharedSecretÉ   s   
zMimiDiffeH.getSharedSecretN)r   r   r   r   ru   r|   r   r   r   r   re   »   s    re   c                 C   s   t ƒ }||d< |  |¡S )NrV   )rU   Úrequest)ÚdcerV   r}   r   r   r   Ú	hMimiBindÒ   s   
r   c                 C   s0   t ƒ }||d< t|ƒ|d< t|ƒ|d< |  |¡S )Nr[   r`   ra   )r_   rq   Úlistr}   )r~   r[   ra   r}   r   r   r   ÚhMimiCommand×   s
   
r�   Ú__main__)Úhexdumpé   é   é   zAlice pubKeyz
Bob pubKeyÚSecret)9Ú
__future__r   r   rr   rh   Úimpacketr   Úimpacket.dcerpc.v5.dtypesr   r   Úimpacket.dcerpc.v5.ndrr   r   r	   r
   Úimpacket.dcerpc.v5.rpcrtr   Úimpacket.uuidr   Úimpacket.structurer   ÚMSRPC_UUID_MIMIKATZr   r+   r)   r*   rQ   ÚCALG_RC4r"   r2   r6   r>   rE   rI   rM   rS   rU   rY   r]   r^   r_   rb   ÚOPNUMSre   r   r�   r   Úimpacket.winregistryrƒ   Úalicerf   rg   rj   ÚbobÚprintru   r|   r   r   r   r   Ú<module>   sp   

ý

í