o
    j
                     @   s>   d dl Z d dlZd dlmZ G dd dZG dd deZdS )    N)PackageDecryptorc                   @   s,   e Zd Zdd Zdd Zdd Zdd Zd	S )
LiveSspCredentialc                 C   s(   d| _ d | _d | _d | _d| _d | _d S )Nlivessp    credtypeusername
domainnamepasswordpassword_rawluidself r   /root/aizidognhua/tmp/workspace/projects/ec89d86c-575f-41c9-af57-ac45cbdbf775/venv/lib/python3.10/site-packages/pypykatz/lsadecryptor/packages/livessp/decryptor.py__init__   s   
zLiveSspCredential.__init__c                 C   sD   i }| j |d< | j|d< | j|d< | j|d< | j|d< | j|d< |S )Nr   r   r	   r
   r   r   r   r   tr   r   r   to_dict   s   





zLiveSspCredential.to_dictc                 C   s   t |  S )N)jsondumpsr   r   r   r   r   to_json   s   zLiveSspCredential.to_jsonc                 C   sJ   d| j  }|d| j 7 }|d| j 7 }|d| j 7 }|d| j  7 }|S )Nz	== LiveSsp [%x]==
z	username %s
z	domainname %s
z	password %s
z		password (hex)%s
)r   r   r	   r
   r   hexr   r   r   r   __str__   s   
zLiveSspCredential.__str__N)__name__
__module____qualname__r   r   r   r   r   r   r   r   r   
   s
    	r   c                       s4   e Zd Z fddZdd Zdd Zdd Z  ZS )	LiveSspDecryptorc                    s"   t  d||| || _g | _d S )NLiveSsp)superr   decryptor_templatecredentials)r   readerr    lsa_decryptorsysinfo	__class__r   r   r   (   s   
zLiveSspDecryptor.__init__c                 C   s   |  d| jj}| dt|  | dt|| jj   | j|| jj }| dt|  | j|}| dt|  ||fS )Nz
msv1_0.dllzSignature @ %szSignature (corrected) @ %szFirst entry ptr @ %szFirst entry -> %s)	find_signaturer    	signaturelogr   first_entry_offsetr"   get_ptr_with_offsetget_ptr)r   positionptr_entry_loc	ptr_entryr   r   r   find_first_entry-   s   z!LiveSspDecryptor.find_first_entryc                 C   s   t  }|j|_|j| j}|jj| j|_	|jj
| j|_|jjjdkrW|jj| j}|j	ddu rN| j|dd\|_|_|jd urM|j |_n	| |\|_|_| j| d S )Nr   $T)bytes_expected)r   LocallyUniqueIdentifierr   	suppCredsreadr"   r!   UserNameread_stringr   Domainer	   PasswordLengthread_maxdataendswithdecrypt_passwordr
   r   r   append)r   	ssp_entrycr4   enc_datar   r   r   	add_entry7   s   
zLiveSspDecryptor.add_entryc              
   C   sr   z|   \}}W n ty" } z| d|  W Y d }~d S d }~ww | j| | j| j}| || j d S )Nz"Failed to find structs! Reason: %s)	r0   	Exceptionr)   r"   mover    
list_entry	walk_listrB   )r   entry_ptr_valueentry_ptr_loce	entry_ptrr   r   r   startJ   s   zLiveSspDecryptor.start)r   r   r   r   r0   rB   rK   __classcell__r   r   r%   r   r   '   s
    
r   )ior   %pypykatz.lsadecryptor.package_commonsr   r   r   r   r   r   r   <module>   s
   