o
    �õ±jí  ã                   @   sz   d dl mZ d dlmZ d dlmZ d dl	m	Z	 ddd„Z
dd„ Zd	d
„ Zddd„Zdd„ Zdd„ Zedkr;eƒ  dS dS )é    )ÚRC4)Úhmac)Úmd5)Útqdmc                 C   s
  t dƒ |D ]|}z.d }| d¡}|d }|d  d¡\}}|d }	t |¡}t |	¡}	d}
|
jddd	d
�}
W n tyN } zt d| ƒ W Y d }~qd }~ww | D ]%\}}t ||t¡ 	¡ }t
|ƒ |	¡}t ||t¡ 	¡ }||krv|} nqQqt d|| ¡ f ƒ qd S )NzCracking ASREP ticketsú$é   é   ú:é   é   ÚlittleF©Ú	byteorderÚsignedúError parsing ticket: %sú%s: %s)ÚprintÚsplitÚbytesÚfromhexÚto_bytesÚ	ExceptionÚHMACÚnewÚMD5ÚdigestÚARC4ÚdecryptÚhex)ÚhashlistÚticketsÚtotalÚasrepÚresultÚtestÚetypeÚuserÚchecksumÚedataÚkeyusageÚeÚpwhashÚkiÚkeÚbasic_plaintextÚ	exp_cksum© r0   úš/root/aizidognhua/tmp/workspace/projects/ec89d86c-575f-41c9-af57-ac45cbdbf775/venv/lib/python3.10/site-packages/minikerberos/examples/kerb23hashdecrypt.pyÚcrack_asrep   s8   


€þþßr2   c                 C   óh   t dƒ g }d}|jdddd�}| D ]}| ¡ }t |¡}t ||t¡ ¡ }| 	||f¡ qt dƒ |S )Nz,Preprocessing hashlist for ASREP cracking...r   r
   r   Fr   úPreprocessing done!©
r   r   Ústripr   r   r   r   r   r   Úappend©r   Úresr)   r+   r,   r0   r0   r1   Úpreprocess_hashlist_asrep+   ó   
r:   c                 C   r3   )Nz*Preprocessing hashlist for TGS cracking...r   r
   r   Fr   r4   r5   r8   r0   r0   r1   Úpreprocess_hashlist_tgs8   r;   r<   c                 C   s(  |D ]�}z1d }|  d¡}|d }|d }|d }|d }	|d }
t |	¡}	t |
¡}
d}|jdddd	�}W n tyM } ztd
| ƒ W Y d }~qd }~ww td||f ƒ | D ]%\}}t ||	t¡ 	¡ }t
|ƒ |
¡}t ||t¡ 	¡ }|	|kr}|} n
qXtd||f ƒ qtd|| ¡ f ƒ qd S )Nr   r   r   r
   é   é   r   Fr   r   zCracking TGS for %s\%szNo password found for %s\%sr   )r   r   r   r   r   r   r   r   r   r   r   r   r   )r   r    r!   Útgsr#   r$   r%   r&   Úrealmr'   r(   r)   r*   r+   r,   r-   r.   r/   r0   r0   r1   Ú	crack_tgsE   s>   


€þþÚrA   c                 C   s  g }g }|  ¡  d¡dkrV|  ¡  d¡dkrVt|dƒ�2}|D ]'}| ¡ }|dkr)q|  ¡  d¡dkr7| |¡ |  ¡  d¡dkrE| |¡ qW d   ƒ n1 sPw   Y  n|  ¡  d¡dkrd| |¡ |  ¡  d¡dkrr| |¡ t|ƒt|ƒ }|dkr„tdƒ d S td| ƒ d}t| dƒ�}|D ]}| ¡ }|dkrŸq”|d	7 }q”W d   ƒ n1 s®w   Y  t|ƒdkrÅt|ƒdkrÅtdƒ d S t| dƒ�8}t|ƒdkrÜt|ƒ} t| ||d
� t|ƒdkrú| 	d¡ t
|ƒ} t| ||d
� W d   ƒ d S W d   ƒ d S 1 �sw   Y  d S )Nz$krb5tgs$23$éÿÿÿÿz$krb5asrep$23$ÚrÚ r   zNo tickets loaded! Exiting!zLoaded %s ticketsé   )r!   )ÚlowerÚfindÚopenr6   r7   Úlenr   r<   rA   Úseekr:   r2   )r   r    Ú
spnticketsÚasrepticketsÚfÚlineÚttr!   r0   r0   r1   Úcrackn   s`   $

€øÿ€


üÿ
ù$ürP   c                  C   sJ   dd l } | jdd�}|jddd� |jddd� | ¡ }t|j|jƒ d S )	Nr   z[Tries to decrypt RC4 TGS or ASREP ($krb5tgs$23$ / $krb5asrep$23$) using a list of NT hashes)Údescriptionr   zFile containing NT hashes)Úhelpr    zKKerberoasted ticket in hashcat format. $krb5tgs$23$... or $krb5asrep$23$...)ÚargparseÚArgumentParserÚadd_argumentÚ
parse_argsrP   r   r    )rS   ÚparserÚargsr0   r0   r1   Úmainž   s   rY   Ú__main__N)r   )Úunicrypto.symmetricr   r   Ú	unicryptor   r   Úunicrypto.hashlibr   r   r   r2   r:   r<   rA   rP   rY   Ú__name__r0   r0   r0   r1   Ú<module>   s    
%
)0
ÿ