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 e0e17  e6d: e0e57  e6d; e0e18e57  e0e58e17  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 yZ3V58noPe?a-tBLy3W[<p6m5P&aF!33*w& ARM;L}.c|&A@h\&&#-Dvd 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   



