o
    àý°j8p  ã                
   @   s^  d dl Z d dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dl	m
Z
 d dlmZmZmZ d dlmZ d dlmZ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mZmZmZm Z m!Z!m"Z" d dl#T d d	l$m%Z%m&Z&m'Z' d d
l(m)Z)m*Z* d dl+m,Z, d dl-m.Z.m/Z/ d dl0T dZ1G dd„ dƒZ2G dd„ dƒZ3G dd„ dƒZ4G dd„ dƒZ5G dd„ dƒZ6e7dk�r­e8ej9ƒ ej:ddd�Z;e;j<dddd� e;j<d d!d"d� e;j<d#d!d$d� e;j<d%dd&d'd(� e;j<d)e=d*d+d,d-� e;j<d.d/dgd0d1d2d3� e>ej?ƒd4k�re; @¡  e Ad4¡ e; B¡ ZCe DeCjEeCjF¡ eCjGd5k�r9eCjH�s-deC_He Id6¡ neCjHd/k�r8e Id7¡ neCjH�sEd/eC_He Id8¡ z;eCjJdu�rZe6eCjJeCjKe=eCjGƒeCjHƒZLne6eCjKeCjKe=eCjGƒeCjHƒZLe Id9eCjKeCjJ�preCjKeCjGeCjHf ¡ eL M¡  W dS  eN�y¬ ZO ze P¡ jQejRk�ršd dlSZSeS T¡  e UeVeOƒ¡ W Y dZO[OdS dZO[Oww dS ):é    N)Ú
indexbytes)ÚdatetimeÚ	timedeltaÚtimezone)Úversion)ÚnmbÚntlm)Úlogger)ÚSMBÚNewSMBPacketÚ
SMBCommandÚSMBNTLMDialect_ParametersÚSMBNTLMDialect_DataÚSMBExtended_Security_ParametersÚSMBExtended_Security_DataÚUnsupportedFeatureÚ!SMBSessionSetupAndX_Extended_DataÚ'SMBSessionSetupAndX_Extended_ParametersÚ0SMBSessionSetupAndX_Extended_Response_ParametersÚ*SMBSessionSetupAndX_Extended_Response_DataÚ&SMBSessionSetupAndXResponse_ParametersÚSMB_DIALECT)Ú*)ÚSPNEGO_NegTokenInitÚSPNEGO_NegTokenRespÚ	TypesMech)ÚSTATUS_SUCCESSÚSTATUS_MORE_PROCESSING_REQUIRED)Úuuidtup_to_bin)Ú	transportÚepml     }*{Gíc                   @   s.   e Zd Zddd„Zdd„ Zdd„ Zd	d
„ ZdS )ÚRPCÚreturnNc                 C   s   d| _ |  |¡ d S )Nr   )ÚMaxTrasmitionSizeÚ_initializeTransport©ÚselfÚtarget© r(   úŒ/root/aizidognhua/tmp/workspace/projects/ec89d86c-575f-41c9-af57-ac45cbdbf775/venv/lib/python3.10/site-packages/../../../bin/DumpNTLMInfo.pyÚ__init__B   s   zRPC.__init__c                 C   s^   d }|   ¡ }| j | ¡ ¡ | j ¡ }|dkr-t|ƒ}t| ¡ ƒ}|d | _t	 
|d ¡}|S )Nr   Ú	max_rfragÚ	auth_data)Ú_create_bind_requestÚ_rpctransportÚsendÚ
get_packetÚrecvÚMSRPCHeaderÚMSRPCBindAckÚgetDatar#   r   ÚNTLMAuthChallenge)r&   ÚntlmChallengeÚpacketÚbufferÚresponseÚbindRespr(   r(   r)   ÚGetChallangeF   s   

zRPC.GetChallangec                 C   s>   t  d| ¡| _| j ddddd¡ | j d¡ | j ¡  d S )Nzncacn_ip_tcp:%s[135]Ú é‡   )r   ÚDCERPCTransportFactoryr.   Úset_credentialsÚ	set_dportÚconnectr%   r(   r(   r)   r$   T   s   zRPC._initializeTransportc                 C   sÞ   t ƒ }tƒ }tj|d< tdƒ|d< d|d< d|d< | |¡ tƒ }t|d< | ¡ |d	< d|d
< t	j
ddddd�}tƒ }t|d< t|d< d|d< dt| ¡ ƒd  d }|dkre|d	  d| 7  < ||d< ||d< ||d< |S )NÚAbstractSyntax)z$8a885d04-1ceb-11c9-9fe8-08002b104860z2.0ÚTransferSyntaxr   Ú	ContextIDé   Ú
TransItemsÚtypeÚpduDataÚcall_idr<   T)ÚsigningRequiredÚ
use_ntlmv2Ú	auth_typeÚ
auth_leveli5 Úauth_ctx_idé   ó   ÿÚauth_pad_lenÚsec_trailerr,   )Ú	MSRPCBindÚCtxItemr    ÚMSRPC_UUID_PORTMAPr   Ú
addCtxItemr2   Ú
MSRPC_BINDr4   r   ÚgetNTLMSSPType1ÚSEC_TRAILERÚRPC_C_AUTHN_WINNTÚRPC_C_AUTHN_LEVEL_PKT_INTEGRITYÚlenr0   )r&   ÚbindÚitemr7   ÚauthrR   Úpadr(   r(   r)   r-   Z   s.   

zRPC._create_bind_request©r"   N)Ú__name__Ú
__module__Ú__qualname__r*   r;   r$   r-   r(   r(   r(   r)   r!   A   s
    
r!   c                   @   sd   e Zd Z		ddd„Zdd„ Zdd	„ Zd
d„ Zdd„ Zdd„ Zddd„Z	dd„ Z
dd„ Zdd„ ZdS )ÚSMB1Né½  é<   c                 C   s„   d| _ d | _d| _d | _tjtjB | _tjtj	B tj
B | _|| _|| _|| _d | _|d u r:t |||tj|| j¡| _|  |¡| _d S )Nr   F)Ú_uidÚ_dialects_dataÚ_SignatureRequiredÚ_dialects_parametersr
   ÚFLAGS1_PATHCASELESSÚFLAGS1_CANONICALIZED_PATHSÚ_SMB1__flags1ÚFLAGS2_EXTENDED_SECURITYÚFLAGS2_NT_STATUSÚFLAGS2_LONG_NAMESÚ_SMB1__flags2Ú_SMB1__timeoutÚ_sessionÚ_my_nameÚ_authr   ÚNetBIOSTCPSessionÚTYPE_SERVERÚ_negotiateSessionÚ_negotiateResponse©r&   Úremote_nameÚremote_hostÚmy_nameÚ	sess_portÚtimeoutÚsessionÚnegSessionResponser(   r(   r)   r*   x   s   zSMB1.__init__c                 C   ó   | j S ©N©rz   ©r&   r(   r(   r)   ÚGetNegotiateResponseŠ   ó   zSMB1.GetNegotiateResponsec                 C   sÂ   t ƒ }| jr|d  tjO  < |  ¡ }| |¡ |  |¡ |  ¡ }| tj	¡r_|d | _
t|d d ƒ}t|d ƒ}t|d d�}|d |d< | |d ¡ t|d ƒ| _t | jd	 ¡}|S d S )
NÚFlags2ÚUidÚDatar   Ú
Parameters)ÚflagsÚSecurityBlobLengthÚSecurityBlobÚResponseToken)r   rj   r
   ÚFLAGS2_SMB_SECURITY_SIGNATUREÚ_createSessionSetupRequestÚ
addCommandr/   ÚreceiveÚisValidAnswerÚSMB_COM_SESSION_SETUP_ANDXrh   r   r   r   Ú
fromStringr   Ú
_respTokenr   r5   )r&   r7   ÚsessionSetupÚsessionResponseÚsessionParametersÚsessionDatar6   r(   r(   r)   r;   �   s$   


÷zSMB1.GetChallangec              
   C   sæ   t j| j| jd ddddddd�\}}tƒ }| jr"|d  tjO  < tƒ }| 	¡ |d< |  
¡ }t|ƒ|d d< | 	¡ |d d	< | |¡ |  |¡ |  ¡ }z| tj¡rjt|d d
 ƒ}t|d ƒ}|d | _W dS W dS    Y dS )Nr�   r<   T©rK   r‰   rŒ   rŽ   r‹   r�   r   ÚActionF)r   ÚgetNTLMSSPType3rv   r˜   r   rj   r
   r‘   r   r4   r’   r\   r“   r/   r”   r•   r–   r   r   Ú_action)r&   Útype3Ú_r7   Ú
respToken2r™   rš   r›   r(   r(   r)   ÚAuthenticate    s.   &


üþzSMB1.Authenticatec                 C   sR   | j |d< t ¡ d@ |d< |d  | jO  < |d  | jO  < | j | ¡ ¡ d S )NrŠ   éÿÿ  ÚPidÚFlags1r‰   )rh   ÚosÚgetpidrn   rr   rt   Úsend_packetr4   )r&   Ú
negoPacketr(   r(   r)   r/   »   s
   
z	SMB1.sendc                 C   s   | j  | j¡}t| ¡ d�S )N©Údata)rt   Úrecv_packetrs   r   Úget_trailer)r&   Úrr(   r(   r)   r”   Â   s   zSMB1.receivec                    sl   ‡ fdd„}|d u r/t ƒ }ttjƒ}ˆ jtjB ˆ _d|d< | |¡ ˆ  |¡ ˆ  ¡ }||ƒS |t |d�ƒS )Nc                    sØ   | d t j@ rˆ  jt jO  _|  t j¡rjt| d d ƒ}t|d ƒˆ _tƒ ˆ _	ˆ jd ˆ j	d< ˆ j	 
|d ¡ ˆ jd t j@ rZt|d ƒˆ _t|d ƒˆ _	ˆ jd t j@ rYdˆ _nˆ jd	 d
kretdƒ‚ˆ  |¡S d S )Nr‰   r‹   r   rŒ   ÚChallengeLengthÚCapabilitiesÚSecurityModeTÚDialectIndexr¥   z&Remote server does not know NT LM 0.12)r
   ÚFLAGS2_UNICODErr   r•   ÚSMB_COM_NEGOTIATEr   r   rk   r   ri   r—   ÚCAP_EXTENDED_SECURITYr   r   ÚSECURITY_SIGNATURES_REQUIREDrj   r   Ú_wrapper)r«   rš   r†   r(   r)   ÚparsePacketÇ   s$   €
ñz+SMB1._negotiateSession.<locals>.parsePackets   NT LM 0.12 r‹   r¬   )	r   r   r
   r¶   rr   ro   r“   r/   r”   )r&   Ú	negPacketrº   r«   Ú
negSessionr(   r†   r)   ry   Æ   s   


zSMB1._negotiateSessionc                 C   sö   t tjƒ}tƒ |d< tƒ |d< d|d d< d|d d< d|d d< d	|d d
< tjtjB tjB tjB tj	B |d d< t
ƒ }td g|d< tj| jd| jdd�| _| j ¡ |d< t|ƒ|d d< |d  ¡  | ¡ |d d< d|d d< d|d d< |S )Nr‹   rŒ   i ð  ÚMaxBufferSizeé   ÚMaxMpxCountrE   ÚVcNumberr   Ú
SessionKeyr²   ú2NTLMSSP - Microsoft NTLM Security Support ProviderÚ	MechTypesr<   Tr�   Ú	MechTokenrŽ   r�   z
U n i x   ÚNativeOSzS a m b a  ÚNativeLanMan)r   r
   r–   r   r   r·   ÚCAP_USE_NT_ERRORSÚCAP_UNICODEÚCAP_LARGE_READXÚCAP_LARGE_WRITEXr   r   r   rX   ru   rj   rv   r4   r\   )r&   r™   Úblobr(   r(   r)   r’   ê   s$   


&zSMB1._createSessionSetupRequestc                 C   s‚   d|d< t |d< | jd tj@ rt|d< | jr|d  tO  < | jd |d< | jd |d< |  | jd | jd ¡|d	< d|d
< |S )Nr   r³   ÚDialectRevisionr½   ÚMaxReadSizeÚMaxWriteSizeÚLowDateTimeÚHighDateTimeÚ
SystemTimeÚServerStartTime)r   rk   r
   ÚSECURITY_SIGNATURES_ENABLEDÚSMB2_NEGOTIATE_SIGNING_ENABLEDrj   ÚSMB2_NEGOTIATE_SIGNING_REQUIREDÚ_to_long_filetime)r&   rš   r(   r(   r)   r¹     s   zSMB1._wrapperc                 C   s   |}|dK }||O }|S )Né    r(   )r&   ÚdwLowDateTimeÚdwHighDateTimeÚ	temp_timer(   r(   r)   rÖ     s   zSMB1._to_long_filetime©Nrf   rg   NNr„   )rb   rc   rd   r*   r‡   r;   r¤   r/   r”   ry   r’   r¹   rÖ   r(   r(   r(   r)   re   w   s    
ÿ
$re   c                   @   sT   e Zd Z		ddd„Zdd„ Zdd	„ Zd
d„ Zdd„ Zdd„ Zddd„Z	dd„ Z
dS )ÚSMB3Nrf   rg   c                 C   s^   || _ d| _d| _|| _d | _|d u r t |||tj||¡| _ n|  jd7  _|  |¡| _	d S )Nr   rE   )
Ú_NetBIOSSessionÚ_sequenceWindowÚ
_sessionIdÚ_timeoutrv   r   rw   rx   ry   rz   r{   r(   r(   r)   r*     s   zSMB3.__init__c                 C   rƒ   r„   r…   r†   r(   r(   r)   r‡   %  rˆ   zSMB3.GetNegotiateResponsec                 C   sT   |   | jd ¡}|  |¡ |  ¡ | _t| jd ƒ}t|d ƒ| _t 	| jd ¡}|S )NrÌ   r‹   ÚBufferr�   )
r’   rz   r/   r”   Ú_answerÚSMB2SessionSetup_Responser   r˜   r   r5   )r&   r7   ÚsessionSetupResponser6   r(   r(   r)   r;   (  s   

zSMB3.GetChallangec              	   C   sÎ   t ƒ }|  ¡ d tkrtƒ }t|d< | j t¡re| jd | _t	 
| j| jd ddddd¡\}}tƒ }| ¡ |d< tƒ }t|d< t|ƒ|d< | ¡ |d< ||d	< |  |¡ |  ¡ }z| t¡W S    Y d
S d S )NrÌ   ÚCommandÚ	SessionIDr�   r<   r³   ÚSecurityBufferLengthrá   r‹   F)Ú
SMB2Packetr‡   ÚSMB2_DIALECT_30Ú
SMB3PacketÚSMB2_SESSION_SETUPrâ   r•   r   rß   r   rŸ   rv   r˜   r   r4   ÚSMB2SessionSetuprÔ   r\   r/   r”   r   )r&   r7   r¡   r¢   r£   r™   r(   r(   r)   r¤   4  s*   "
ízSMB3.Authenticatec                 C   sJ   | j |d< |  j d7  _ | j|d< d|d< |d }| ¡ }| j |¡ |S )NÚ	MessageIDrE   ræ   ÚCreditCharge)rÞ   rß   r4   rÝ   rª   )r&   r7   Ú	messageIdr­   r(   r(   r)   r/   O  s   

z	SMB3.sendc                 C   s   | j  | j¡}t| ¡ ƒ}|S r„   )rÝ   r®   rà   rè   r¯   )r&   r­   r7   r(   r(   r)   r”   [  s   zSMB3.receivec                 C   sº   t }|d urt|d ƒ}|d }|t kr[tƒ }t|d< tƒ }t|d< t|d< d dd„ td	ƒD ƒ¡|d
< t	t
tg|d< t|d ƒ|d< ||d< |  |¡ |  ¡ }| t¡r[t|d ƒ}|S )Nr‹   rÌ   rå   r³   r²   r<   c                 S   s   g | ]}t  tj¡‘qS r(   )ÚrandomÚchoiceÚstringÚascii_letters)Ú.0r¢   r(   r(   r)   Ú
<listcomp>l  s    z*SMB3._negotiateSession.<locals>.<listcomp>é   Ú
ClientGuidÚDialectsÚDialectCount)ÚSMB2_DIALECT_WILDCARDÚSMB2Negotiate_Responserè   ÚSMB2_NEGOTIATEÚSMB2NegotiaterÔ   ÚSMB2_GLOBAL_CAP_ENCRYPTIONÚjoinÚrangeÚSMB2_DIALECT_002ÚSMB2_DIALECT_21ré   r\   r/   r”   r•   r   )r&   r‚   ÚcurrentDialectÚnegotiateResponser7   r¼   Úanswerr(   r(   r)   ry   `  s&   

zSMB3._negotiateSessionc                 C   s€   t ƒ }d|d< tƒ }td g|d< t ddd¡| _| j ¡ |d< t|ƒ|d< | ¡ |d	< tƒ }|t	kr6t
ƒ }t|d
< ||d< |S )Nr   ÚFlagsrÂ   rÃ   r<   FrÄ   rç   rá   rå   r‹   )rì   r   r   r   rX   rv   r4   r\   rè   ré   rê   rë   )r&   Údialectr™   rË   r7   r(   r(   r)   r’   x  s   zSMB3._createSessionSetupRequestrÛ   r„   )rb   rc   rd   r*   r‡   r;   r¤   r/   r”   ry   r’   r(   r(   r(   r)   rÜ     s    
ÿ
rÜ   c                   @   sH   e Zd Zddd„Zdd„ Zdd„ Zd	d
„ Zdd„ Zddd„Zdd„ Z	dS )ÚSmbConnectionr"   Nc                 C   s6   || _ || _t|ƒ| _d| _|  ¡ | _d | _d | _d S ©Nrg   )	r'   ÚhostnameÚintÚ
_sess_portrà   Ú_get_my_nameÚ_myNameÚ_nmbSessionÚ_SMBConnection)r&   Úipr
  Úportr(   r(   r)   r*   �  s   


zSmbConnection.__init__c              
   C   sŠ   t jt jB }t jt jB t jB }d}d}z| jd|||d� W n" ty@ } zdt|ƒv r5d}W Y d }~|S W Y d }~|S d }~ww d}|S )NzNT LM 0.12 FT©Úflags1Úflags2r­   ú
No answer!)	r
   rl   rm   ro   rp   rq   Ú_negotiateSessionWildcardÚ	ExceptionÚstr)r&   r  r  Úsmbv1NegoDataÚsmb1_enabledÚer(   r(   r)   ÚIsSmb1Enabled˜  s    
ü€ûzSmbConnection.IsSmb1Enabledc              	   C   s¬   t jt jB }t jt jB t jB }d}| jtjkrd}| j	d|||d�}|dd… dkr?t
| j| j| j| j| j| jt|ƒd�| _nt| j| j| j| j| j| j|d�| _| j ¡ S )	Nz"NT LM 0.12 SMB 2.002 SMB 2.??? zNT LM 0.12 SMB 2.002 Tr  r   rE   ó   þ)r�   r‚   )r
   rl   rm   ro   rp   rq   r  r   ÚNETBIOS_SESSION_PORTr  rÜ   r
  r'   r  rà   r  rè   r  re   r‡   )r&   r  r  ÚnegoDatar7   r(   r(   r)   ÚNegotiateSession¦  s   
ÿ
ÿ
zSmbConnection.NegotiateSessionc                 C   ó
   | j  ¡ S r„   )r  r;   r†   r(   r(   r)   r;   ¸  ó   
zSmbConnection.GetChallangec                 C   r"  r„   )r  r¤   r†   r(   r(   r)   r¤   »  r#  zSmbConnection.AuthenticateTr   c           	      C   s
  d}t ƒ }||d< |tjB |d< d }|dk ryt | j| j| jtj| j	| j
¡| _ttjƒ}|du r9|d  tjO  < ||d< | |¡ | j | ¡ ¡ z	| j | j
¡}W n% tjyp   |d  tjtjB tjB O  < g |d< Y nw |d7 }|dk s|d u r�tdƒ‚| ¡ S )	Nr   r§   r‰   r¾   Tr‹   rE   r  )r   r
   rµ   r   rw   r  r
  r'   rx   r  rà   r  r   r¶   ro   r“   rª   r4   r®   ÚNetBIOSErrorrp   rq   r  r¯   )	r&   Úextended_securityr  r  r­   ÚtriesÚsmbpr9   r¼   r(   r(   r)   r  ¾  s2   "

þðz'SmbConnection._negotiateSessionWildcardc                 C   s*   t  ¡ }| d¡}|dkr|d |… }|S )NÚ.éÿÿÿÿ)ÚsocketÚgethostnameÚfind)r&   ÚmyNameÚir(   r(   r)   r  Û  s
   
zSmbConnection._get_my_namera   )Tr   r   N)
rb   rc   rd   r*   r  r!  r;   r¤   r  r  r(   r(   r(   r)   r  Ž  s    
	
r  c                   @   sn   e Zd Zd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d„ Zdd„ Zdd„ ZdS )ÚDumpNtlmr"   Nc                 C   s&   || _ || _t|ƒ| _|| _d| _d S r	  )r'   r
  r  r  Ú	_protocolrà   )r&   r  r
  r  Úprotocolr(   r(   r)   r*   ä  s
   

zDumpNtlm.__init__c                 C   s0   | j dkr|  ¡  d S | j dkr|  ¡  d S d S )Nr
   r!   )r0  ÚDisplaySmbInfoÚDisplayRpcInfor†   r(   r(   r)   ÚDisplayInfoë  s
   

ÿzDumpNtlm.DisplayInfoc                 C   s4   t | jƒ}| ¡ }|  |¡ |  |j|jdœ¡ d S )N)rÍ   rÎ   )r!   r'   r;   ÚDisplayChallangeInfoÚ	DisplayIor#   )r&   Úrpcr6   r(   r(   r)   r3  ñ  s   

zDumpNtlm.DisplayRpcInfoc                 C   s„   t | j| j| jƒ}| ¡ }|d }|d }| ¡ }|  ||¡ |  |¡ |  |¡ |  	|¡ | 
¡ }|  |¡ | ¡ }|  |¡ d S )NrÌ   r³   )r  r'   r
  r  r!  r  ÚDisplayDialectÚDisplaySigningr6  ÚDisplayTimer;   r5  r¤   ÚDisplayNullSession)r&   Ú
connectionÚnegotiationr  ÚsecModer  r6   ÚnullSessionr(   r(   r)   r2  ù  s   



zDumpNtlm.DisplaySmbInfoc                 C   sD   d}|t @ t kr
d}|t@ tkr|d7 }n|d7 }td |¡ƒ d S )Nr<   ÚSIGNING_ENABLEDz | SIGNING_REQUIREDz (not required)z[+] Server Security : {})rÔ   rÕ   ÚprintÚformat)r&   r>  Úmoder(   r(   r)   r9    s   
zDumpNtlm.DisplaySigningc                 C   s¶   t d |¡ƒ |tkrt dƒ d S |tkrt dƒ d S |tkr%t dƒ d S |tkr/t dƒ d S |tkr9t dƒ d S |tkrCt dƒ d S t|ƒtu rRt d |¡ƒ d S t d |¡ƒ d S )	Nz[+] SMBv1 Enabled   : {0}z[+] Prefered Dialect: SMB 002z[+] Prefered Dialect: SMB 2.1z[+] Prefered Dialect: SMB 3.0z[+] Prefered Dialect: SMB 3.0.2z[+] Prefered Dialect: SMB 3.1.1z[+] Prefered Dialect: {}z[+] Prefered Dialect: 0x{:x})	rA  rB  r  r  ré   ÚSMB2_DIALECT_302ÚSMB2_DIALECT_311rG   r  )r&   r  r  r(   r(   r)   r8    s    zDumpNtlm.DisplayDialectc                 C   s@   t d |  |d ¡|d ¡ƒ t d |  |d ¡|d ¡ƒ d S )Nz#[+] Max Read Size   : {} ({} bytes)rÍ   z#[+] Max Write Size  : {} ({} bytes)rÎ   )rA  rB  Ú_DumpNtlm__convert_size)r&   r  r(   r(   r)   r6  -  s   "zDumpNtlm.DisplayIoc                 C   sŠ   |d dkrdn
|   |d ¡ tj¡}|d dkrdn
|   |d ¡ tj¡}td |¡ƒ |dkrCtd |¡ƒ td || ¡ƒ d S d S )NrÑ   r   rÒ   z[+] Current Time    : {}z[+] Boot Time       : {}z[+] Server Up Time  : {})Ú_DumpNtlm__filetime_to_dtÚ
astimezoner   ÚutcrA  rB  )r&   r  ÚcurrentTimeÚbootTimer(   r(   r)   r:  2  s   &&þzDumpNtlm.DisplayTimec                 C   s®  |d dkrÑt  |d d |d … ¡}|t j d ur0ztd |t j d  d¡¡ƒ W n   Y |t j d urMztd |t j d  d¡¡ƒ W n   Y |t j d urjztd |t j d  d¡¡ƒ W n   Y |t j d ur‡ztd	 |t j d  d¡¡ƒ W n   Y |t j	 d ur¤ztd
 |t j	 d  d¡¡ƒ W n   Y d|j
v rÓ|d }t|ƒdkrÕtd dt|dƒt|dƒt d|dd… ¡d f ¡ƒ d S d S d S d S )NÚTargetInfoFields_lenr   ÚTargetInfoFieldsz[+] Name            : {}rE   zutf-16lez[+] Domain          : {}z[+] DNS Tree Name   : {}z[+] DNS Domain Name : {}z[+] DNS Host Name   : {}ÚVersionrO   z[+] OS              : {}zWindows NT %d.%d Build %dz<Hr¾   )r   ÚAV_PAIRSÚNTLMSSP_AV_HOSTNAMErA  rB  ÚdecodeÚNTLMSSP_AV_DOMAINNAMEÚNTLMSSP_AV_DNS_TREENAMEÚNTLMSSP_AV_DNS_DOMAINNAMEÚNTLMSSP_AV_DNS_HOSTNAMEÚfieldsr\   r   ÚstructÚunpack)r&   Ú	challangeÚav_pairsr   r(   r(   r)   r5  ;  sD   """""
<Ü!zDumpNtlm.DisplayChallangeInfoc                 C   s   t d |¡ƒ d S )Nz[+] Null Session    : {})rA  rB  )r&   r?  r(   r(   r)   r;  c  s   zDumpNtlm.DisplayNullSessionc                 C   s"   |t  d }tdddƒt|d� S )Né
   i²  rE   )Úmicroseconds)ÚEPOCH_AS_FILETIMEr   r   )r&   ÚfiletimeÚusr(   r(   r)   Ú__filetime_to_dtg  s   zDumpNtlm.__filetime_to_dtc                 C   sP   |dkrdS d}t t t |d¡¡ƒ}t d|¡}t|| dƒ}d||| f S )Nr   Ú0B)	ÚBÚKBÚMBÚGBÚTBÚPBÚEBÚZBÚYBi   r¾   z%s %s)r  ÚmathÚfloorÚlogÚpowÚround)r&   Ú
size_bytesÚ	size_namer.  ÚpÚsr(   r(   r)   Ú__convert_sizem  s   zDumpNtlm.__convert_sizera   )rb   rc   rd   r*   r4  r3  r2  r9  r8  r6  r:  r5  r;  rG  rF  r(   r(   r(   r)   r/  ã  s    
	(r/  Ú__main__Tz-Do ntlm authentication and parse information.)Úadd_helpÚdescriptionr'   Ústorez<targetName or address>)ÚactionÚhelpz-debugÚ
store_truezTurn DEBUG output ONz-tsz&Adds timestamp to every logging outputz
-target-ipz
ip addressz£IP Address of the target machine. If omitted it will use whatever was specified as target. This is useful when target is the NetBIOS name and you cannot resolve it)ry  Úmetavarrz  z-portrf   zdestination portz-Destination port to connect to SMB/RPC Server)rG   Údefaultr|  rz  z	-protocolr
   ú?r1  zIProtocol to use (SMB or RPC). Default is SMB, port 135 uses RPC normally.)ÚchoicesÚnargsr|  rz  rE   r=   z]Port 135 specified; using RPC protocol by default. Use `-protocol SMB` to force SMB protocol.zRPort 135 specified with SMB protocol. Are you sure you don't want `-protocol RPC`?zDefaulting to SMB protocol.z0Using target: %s, IP: %s, Port: %d, Protocol: %s)Wr¨   ÚsysÚargparseÚloggingrW  r*  rk  rò   rð   Úsixr   r   r   r   Úimpacketr   r   r   Úimpacket.examplesr	   Úimpacket.smbr
   r   r   r   r   r   r   r   r   r   r   r   r   r   Úimpacket.smb3structsÚimpacket.spnegor   r   r   Úimpacket.nt_errorsr   r   Úimpacket.uuidr   Úimpacket.dcerpc.v5r   r    Úimpacket.dcerpc.v5.rpcrtr]  r!   re   rÜ   r  r/  rb   rA  ÚBANNERÚArgumentParserÚparserÚadd_argumentr  r\   ÚargvÚ
print_helpÚexitÚ
parse_argsÚoptionsÚinitÚtsÚdebugr  r1  ÚinfoÚ	target_ipr'   Údumperr4  r  r  Ú	getLoggerÚlevelÚDEBUGÚ	tracebackÚ	print_excÚerrorr  r(   r(   r(   r)   Ú<module>   sŽ   $@6 yU 


ÿÿÿ

€
&€üØ