o
    Žõ±jÁ5  ã                	   @   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                    s4   t ƒ  dd ||¡ || _d | _d | _d | _d | _d S )NÚLsaDecryptor)ÚsuperÚ__init__Údecryptor_templateÚfeedbackÚfeedback_offsetÚdes_keyÚ
random_key)ÚselfÚreaderr	   Úsysinfo©Ú	__class__© ú›/root/aizidognhua/tmp/workspace/projects/ec89d86c-575f-41c9-af57-ac45cbdbf775/venv/lib/python3.10/site-packages/pypykatz/alsadecryptor/lsa_decryptor_nt5.pyr      s   
zLsaDecryptor_NT5.__init__c                 Ã   s¤   �|   d¡ |  ¡ I d H }| j |¡I d H  | jj| jjfD ]1}|| _z|  |¡I d H | _	|  
|¡I d H | _|  |¡I d H | _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   Úacquire_crypto_material   s   €
ûõz(LsaDecryptor_NT5.acquire_crypto_materialc                 Ã   sª   �| j jdkr%| j || j ¡I d H }| j |¡I d H  | j d¡I d H S | j || j ¡I d H  t | j¡I d H }|| j d | }| j |¡I d H  | j d¡I d H S )NÚx86é   é   )	r	   Úarchr   Úget_ptr_with_offsetr   r   Úreadr   Ú	loadvalue)r   r   Únew_ptrÚoffsetÚnewposr   r   r   r   ,   s   €zLsaDecryptor_NT5.get_feedbackc                 Ã   sä   �| j jdkr3| j || j j ¡I d H }| j |¡I d H  | j j | j¡I d H }| | j¡I d H }|S | j || j j ¡I d H  t	 
| j¡I d H }|| j j d | }| j |¡I d H  | j j | j¡I d H }| | j¡I d H }|S )Nr"   r$   )r	   r%   r   r&   Údesx_key_ptr_offsetr   Úkey_struct_ptrÚloadr'   r   r(   )r   r   r)   Údes_key_ptrr   r*   r+   r   r   r   r   8   s   €	ùzLsaDecryptor_NT5.get_keyc                 Ã   s²   �| j jdkr'| j || j j ¡I d H }| j |¡I d H }| j |¡I d H  n)| j || j j ¡I d H  t | j¡I d H }|| j j d | }| j |¡I d H  | j 	d¡I d H S )Nr"   r$   é   )
r	   r%   r   r&   Úrandomkey_ptr_offsetr   r   r(   r,   r'   )r   r   Úrandom_key_ptrr*   r+   r   r   r   r   H   s   €zLsaDecryptor_NT5.get_randomc                 Ã   sˆ   �|   d¡ | j d| jj¡I d H }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Úloggerr5   Ú	ExceptionÚjoin)r   Úflr   r   r   r   U   s   €
zLsaDecryptor_NT5.find_signatureé€   c                 C   sB   d}t |ƒ}|r|d dkrt| jƒ}| |¡}|S |  |¡}|S )Nó    r#   r   )r:   r   r   ÚdecryptÚ_LsaDecryptor_NT5__desx_decrypt)r   Ú	encryptedÚsegment_sizeÚ	cleartextÚsizeÚctxr   r   r   rA   `   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   Úformatr:   r
   r5   r   r   ÚinputWhiteningÚoutputWhitening)r   r   r   r   Údumpo   s
   
"&zLsaDecryptor_NT5.dumpc                 C   s.   t || jjƒ}| j|dd�}t || jjƒ}|S )NF)Úencrypt)Úxorr   rJ   Ú&_LsaDecryptor_NT5__desx_internal_blockrI   )r   Úchunkr   r   r   Ú__desx_decrypt_internal_blockw   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
   r:   Ú._LsaDecryptor_NT5__desx_decrypt_internal_blockrM   )r   ÚdataÚresÚiÚIVrO   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   rR   rL   ÚLÚRÚTarT   r   r   r   Ú__desx_internal_blockŠ   sj   





 þ





 z&LsaDecryptor_NT5.__desx_internal_block)r?   )F)Ú__name__Ú
__module__Ú__qualname__r   r!   r   r   r   r   rA   rK   rQ   rB   rN   Ú__classcell__r   r   r   r   r      s    
r   )@é é   é  éé   é é  rs   rv   rq   é  é  é ru   r   rw   rr   r^   é  é  rt   rx   ry   r{   r^   é   r|   é r}   rz   r~   r   r   rt   r{   rw   rq   rr   ry   r{   r~   r}   r|   rs   rv   r^   rs   rx   rt   r|   rx   rz   ru   ry   rw   r   rr   ru   rz   rq   r^   r~   r}   rv   )@é€@r   é € é  @é  @é€  é € @r€   é €  é @é   r„   é  é €@r�   r‡   é   é€ @r†   r…   é€ é   @r   rˆ   r‹   rŒ   r‰   r‚   r�   rŠ   rƒ   r   rˆ   r‰   r„   rŒ   r   rˆ   r‚   r   r�   rƒ   rŠ   r†   r…   r�   rŒ   r‹   r‰   r…   r   r‚   r‡   r   r€   r�   r†   rŠ   rƒ   r„   r‹   r‡   r�   r€   )@é  é r0   é é  é   r�   é  é  é   é  r]   éé  r]   é r   r‘   r�   r0   r˜   r—   r•   rŽ   r™   r”   é r–   r“   r   r’   rš   r�   r0   r]   r•   r˜   r‘   r–   r�   r   r�   r“   r™   r‘   r’   r—   r]   rš   rŽ   r’   r—   r•   r”   r�   r“   r”   r   r™   r˜   rŽ   rš   r0   r–   )@é@ é  r#   é@r   é  @é é @ é @é  é   é  r¢   r›   é  @ r£   é @é @ é   r#   r§   rŸ   rž   r¨   r¤   r   r    r¡   rœ   r¦   r�   r¥   r¦   r¤   r¥   r¢   r§   rœ   r#   rž   rŸ   r   r¨   r    r   r¦   r¡   r¨   r£   r�   r›   r¥   r�   r#   rœ   r›   r    r§   rž   rŸ   r¤   r£   r¢   r¡   )@é   é   é   é é  é  é  é  rª   é    é   é  é  r­   é r   r³   r©   é   é   r®   r¯   r   r²   r±   r´   r¬   r¶   r°   r«   r·   rµ   rµ   r´   r¶   r°   rª   r±   r²   r®   r©   r³   r¬   r   r¯   r©   r«   r¶   r´   r«   r   r¬   r­   rµ   r·   rª   r³   r­   r®   r·   r±   r¯   r°   r²   )@ì   @    é@   r   ì     @  r¹   é    ì   @    é    é@   ì   @ @  é    ì        ì        r¸   ì     @  é@   r½   r¼   ì   @ @  r   r»   é@   rº   rÅ   r¿   rÃ   rÁ   r¾   rÆ   rÀ   rÄ   rÂ   r¾   rÁ   rÂ   rÄ   rº   r¹   r   rÂ   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‡   é   é   é   é   )rg   ÚSymCryptDesSpbox)ri   rj   Úkeyark   ÚTbr   r   r   rd     s   
rd   c                 C   s   | |> | d| ? B d@ S ©Nr±   l   ÿÿ r   ©ÚnÚdr   r   r   rb     ó   rb   c                 C   s   | |? | d| > B d@ S rì   r   rí   r   r   r   rg   !  rð   rg   c                 C   s   t dd„ t| |ƒD ƒƒS )Nc                 s   s   � | ]	\}}||A V  qd S r4   r   )r6   ÚaÚbr   r   r   r7   %  s   € zxor.<locals>.<genexpr>)ÚbytesÚzip)Úd1Úd2r   r   r   rM   $  rð   rM   N)Úunicrypto.symmetricr   Ú&pypykatz.alsadecryptor.package_commonsr   Ú$pypykatz.alsadecryptor.win_datatypesr   r   ré   rd   rb   rg   rM   r   r   r   r   Ú<module>   s$    SÕ3