o
    Žõ±jû4  ã                	   @   sŒ   d dl mZ d dlmZ d dlmZ G dd„ deƒZg d¢g d¢g d¢g d	¢g d
¢g d¢g d¢g d¢gZdd„ Zdd„ Z	dd„ Z
dd„ ZdS )é    )ÚRC4)ÚPackageDecryptor)ÚLONGc                       sp   e Zd Z‡ f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dd„Z‡  ZS )ÚLsaDecryptor_NT5c                    s<   t ƒ  dd ||¡ || _d | _d | _d | _d | _|  ¡  d S )NÚLsaDecryptor)ÚsuperÚ__init__Údecryptor_templateÚfeedbackÚfeedback_offsetÚdes_keyÚ
random_keyÚacquire_crypto_material)ÚselfÚreaderr	   Úsysinfo©Ú	__class__© úš/root/aizidognhua/tmp/workspace/projects/ec89d86c-575f-41c9-af57-ac45cbdbf775/venv/lib/python3.10/site-packages/pypykatz/lsadecryptor/lsa_decryptor_nt5.pyr      s   zLsaDecryptor_NT5.__init__c                 C   s„   |   d¡ |  ¡ }| j |¡ | jj| jjfD ](}|| _z|  |¡| _	|  
|¡| _|  |¡| _W  d S    dd l}| ¡  Y qd S )NzAcquireing crypto stuff...r   )ÚlogÚfind_signaturer   Úmover	   Úfeedback_ptr_offsetÚold_feedback_offsetr   Úget_feedbackr
   Úget_keyr   Ú
get_randomr   Ú	tracebackÚ	print_exc)r   ÚsigposÚxr   r   r   r   r      s   
ûõz(LsaDecryptor_NT5.acquire_crypto_materialc                 C   s~   | j jdkr| j || j ¡}| j |¡ | j d¡S | j || j ¡ t| jƒj}|| j d | }| j |¡ | j d¡S )NÚx86é   é   )	r	   Úarchr   Úget_ptr_with_offsetr   r   Úreadr   Úvalue)r   r    Únew_ptrÚoffsetÚnewposr   r   r   r   -   s   zLsaDecryptor_NT5.get_feedbackc                 C   s¨   | j jdkr%| j || j j ¡}| j |¡ | j  | j¡}| | j¡}|S | j || j j ¡ t| jƒj	}|| j j d | }| j |¡ | j  | j¡}| | j¡}|S )Nr"   r$   )
r	   r%   r   r&   Údesx_key_ptr_offsetr   Úkey_struct_ptrr'   r   r(   )r   r    r)   Údes_key_ptrr   r*   r+   r   r   r   r   9   s   	ùzLsaDecryptor_NT5.get_keyc                 C   s†   | j jdkr| j || j j ¡}| j |¡}| j |¡ n | j || j j ¡ t| jƒj}|| j j d | }| j |¡ | j 	d¡S )Nr"   r$   é   )
r	   r%   r   r&   Úrandomkey_ptr_offsetr   r   r(   r,   r'   )r   r    Úrandom_key_ptrr*   r+   r   r   r   r   I   s   zLsaDecryptor_NT5.get_randomc                 C   s€   |   d¡ | j d| jj¡}t|ƒdkr$| j  d| jj ¡  ¡ tdƒ‚|   dd 	dd	„ |D ƒ¡ ¡ |   d
|d  ¡ |d S )Nz.Looking for main struct signature in memory...z
lsasrv.dllr   zsignature not found! %szLSA signature not found!z/Found candidates on the following positions: %sú c                 s   s   � | ]}t |ƒV  qd S ©N)Úhex)Ú.0r!   r   r   r   Ú	<genexpr>]   s   € z2LsaDecryptor_NT5.find_signature.<locals>.<genexpr>zSelecting first one @ 0x%08x)
r   r   Úfind_in_moduler	   Ú	signatureÚlenÚloggerr4   Ú	ExceptionÚjoin)r   Úflr   r   r   r   V   s   
zLsaDecryptor_NT5.find_signatureé€   c                 C   sB   d}t |ƒ}|r|d dkrt| jƒ}| |¡}|S |  |¡}|S )Nó    r#   r   )r9   r   r   ÚdecryptÚ_LsaDecryptor_NT5__desx_decrypt)r   Ú	encryptedÚsegment_sizeÚ	cleartextÚsizeÚctxr   r   r   r@   a   s   


ýzLsaDecryptor_NT5.decryptc                 C   sŽ   |   d¡ |   d t| jƒ| j ¡ ¡¡ |   d t| jƒ| j ¡ ¡¡ |   d t| jjƒ| jj ¡ ¡¡ |   d t| jjƒ| jj ¡ ¡¡ d S )NzRecovered LSA encryption keys
zFeedback ({}): {}zRandom Key ({}): {}z DESX inputwhitening Key ({}): {}z!DESX outputwhitening Key ({}): {})	r   Úformatr9   r
   r4   r   r   ÚinputWhiteningÚoutputWhitening)r   r   r   r   Údumpp   s
   
"&zLsaDecryptor_NT5.dumpc                 C   s.   t || jjƒ}| j|dd�}t || jjƒ}|S )NF)Úencrypt)Úxorr   rI   Ú&_LsaDecryptor_NT5__desx_internal_blockrH   )r   Úchunkr   r   r   Ú__desx_decrypt_internal_blockx   s   z.LsaDecryptor_NT5.__desx_decrypt_internal_blockc                 C   sf   d}d}| j }|t|ƒkr1|  |||d … ¡}|t||ƒ7 }|||d … }|d7 }|t|ƒks|S )Nr?   r   r#   )r
   r9   Ú._LsaDecryptor_NT5__desx_decrypt_internal_blockrL   )r   ÚdataÚresÚiÚIVrN   r   r   r   Ú__desx_decrypt~   s   üzLsaDecryptor_NT5.__desx_decryptFc                 C   sz  t j|dd … ddd�}t j|d d… ddd�}t|dƒ}||A d@ }||A }||A }t|dƒ}||A d@ }||A }||A }t|dƒ}||A d	@ }||A }||A }t|d
ƒ}||A d@ }||A }||A }t|dƒ}||A d@ }||A }||A }t|dƒ}|r¤tdddƒD ]}t||| jjj| ƒ\}}t||| jjj|d  ƒ\}}q„n%tdddƒD ]}t||| jjj|d  ƒ\}}t||| jjj| ƒ\}}qªt|dƒ}||A d@ }||A }||A }t|dƒ}||A d@ }||N }||N }t|d
ƒ}||A d	@ }||N }||N }t|dƒ}||A d@ }||N }||N }t|dƒ}||A d@ }||N }||N }t|dƒ}|j	dddd�|j	dddd� S )Nr$   ÚlittleF)Úsignedl   ðpáa é   l    à é   i3333é   iüüé	   l   ª*UU é   r   é   éþÿÿÿ)
ÚintÚ
from_bytesÚrol32ÚrangeÚFr   ÚdesKeyÚroundKeyÚror32Úto_bytes)r   rQ   rK   ÚLÚRÚTarS   r   r   r   Ú__desx_internal_block‹   sj   





 þ





 z&LsaDecryptor_NT5.__desx_internal_block)r>   )F)Ú__name__Ú
__module__Ú__qualname__r   r   r   r   r   r   r@   rJ   rP   rA   rM   Ú__classcell__r   r   r   r   r      s    	
r   )@é é   é  éé   é é  rr   ru   rp   é  é  é rt   r   rv   rq   r]   é  é  rs   rw   rx   rz   r]   é   r{   é r|   ry   r}   r   r   rs   rz   rv   rp   rq   rx   rz   r}   r|   r{   rr   ru   r]   rr   rw   rs   r{   rw   ry   rt   rx   rv   r   rq   rt   ry   rp   r]   r}   r|   ru   )@é€@r   é € é  @é  @é€  é € @r   é €  é @é   rƒ   é  é €@r€   r†   é   é€ @r…   r„   é€ é   @r   r‡   rŠ   r‹   rˆ   r�   rŒ   r‰   r‚   r~   r‡   rˆ   rƒ   r‹   r~   r‡   r�   r   rŒ   r‚   r‰   r…   r„   rŒ   r‹   rŠ   rˆ   r„   r   r�   r†   r~   r   r€   r…   r‰   r‚   rƒ   rŠ   r†   r€   r   )@é  é r/   é é  é   r�   é  é  é   é  r\   éé  r\   é r   r�   rŽ   r/   r—   r–   r”   r�   r˜   r“   é r•   r’   r   r‘   r™   rŽ   r/   r\   r”   r—   r�   r•   r�   r   rŽ   r’   r˜   r�   r‘   r–   r\   r™   r�   r‘   r–   r”   r“   r�   r’   r“   r   r˜   r—   r�   r™   r/   r•   )@é@ é  r#   é@r   é  @é é @ é @é  é   é  r¡   rš   é  @ r¢   é @é @ é   r#   r¦   rž   r�   r§   r£   r   rŸ   r    r›   r¥   rœ   r¤   r¥   r£   r¤   r¡   r¦   r›   r#   r�   rž   r   r§   rŸ   r   r¥   r    r§   r¢   rœ   rš   r¤   rœ   r#   r›   rš   rŸ   r¦   r�   rž   r£   r¢   r¡   r    )@é   é   é   é é  é  é  é  r©   é    é   é  é  r¬   é r   r²   r¨   é   é   r­   r®   r   r±   r°   r³   r«   rµ   r¯   rª   r¶   r´   r´   r³   rµ   r¯   r©   r°   r±   r­   r¨   r²   r«   r   r®   r¨   rª   rµ   r³   rª   r   r«   r¬   r´   r¶   r©   r²   r¬   r­   r¶   r°   r®   r¯   r±   )@ì   @    é@   r   ì     @  r¸   é    ì   @    é    é@   ì   @ @  é    ì        ì        r·   ì     @  é@   r¼   r»   ì   @ @  r   rº   é@   r¹   rÄ   r¾   rÂ   rÀ   r½   rÅ   r¿   rÃ   rÁ   r½   rÀ   rÁ   rÃ   r¹   r¸   r   rÁ   rÀ   rº   rÄ   r¼   r¸   r¾   r¿   rÅ   r¾   r¿   r¼   r»   r·   rÂ   rÃ   r   rº   r·   r»   r¹   rÂ   r½   rÅ   rÄ   )@é @  é   é  é  éB é@  é B  r   é   é é  é @ r$   é B rÐ   rÏ   rÎ   rÆ   rË   rÊ   r   rÈ   rÉ   rÌ   é@ éB  rÑ   r$   rÓ   rÒ   rÇ   rÍ   rÓ   rÐ   rÒ   rÏ   rÆ   rÇ   rÍ   rÒ   rÎ   rÓ   rÌ   r   rÇ   rÉ   r$   rÈ   r   rÎ   rÈ   rÌ   rÏ   rÆ   rÊ   rÍ   rÑ   r$   rË   rÊ   rÉ   rÑ   rÐ   rË   )@é€ € é  ‚ é€  r   é   é€ € é  € é€ ‚ r>   é    é  ‚ rÖ   é€ ‚ é€  é€   rÙ   é   rÝ   rØ   r×   rÚ   rß   r   rÜ   rÛ   é  € rÞ   rÔ   rá   rà   rÕ   r>   rá   rà   rß   rÚ   rÖ   rÛ   r   rÜ   rÔ   rÞ   r×   rØ   rÕ   r>   rØ   r×   rÚ   rá   rÙ   rß   rÜ   rÖ   rÞ   rÙ   r>   rÕ   rÝ   r   rÛ   rÔ   rà   rÝ   c                 C   s  |d |A }|d |A }t |dƒ}| td |d@ d  N } | td |d@ d  N } | td |d? d@ d  N } | td |d? d@ d  N } | td |d? d@ d  N } | td	 |d? d@ d  N } | td
 |d? d@ d  N } | td |d? d@ d  N } | |fS )Nr   r\   r$   éü   r]   r#   é   r†   é   é   é   é   )rf   ÚSymCryptDesSpbox)rh   ri   Úkeyarj   ÚTbr   r   r   rc     s   
rc   c                 C   s   | |> | d| ? B d@ S ©Nr°   l   ÿÿ r   ©ÚnÚdr   r   r   ra     ó   ra   c                 C   s   | |? | d| > B d@ S rë   r   rì   r   r   r   rf   "  rï   rf   c                 C   s   t dd„ t| |ƒD ƒƒS )Nc                 s   s   � | ]	\}}||A V  qd S r3   r   )r5   ÚaÚbr   r   r   r6   &  s   € zxor.<locals>.<genexpr>)ÚbytesÚzip)Úd1Úd2r   r   r   rL   %  rï   rL   N)Úunicrypto.symmetricr   Ú%pypykatz.lsadecryptor.package_commonsr   Úpypykatz.commons.win_datatypesr   r   rè   rc   ra   rf   rL   r   r   r   r   Ú<module>   s$    TÕ3