o
    Žõ±j"  ã                   @   s\   d dl T ddlT G dd„ dƒZG dd„ dƒZG dd„ dƒZG d	d
„ d
ƒZdd„ Zdd„ ZdS )é    )Ú*é   c                   @   ó    e Zd Zdd„ Zedd„ ƒZdS )ÚVOL3Sectionc                 C   s   d | _ d | _d | _d S ©N)ÚstartÚendÚsize©Úself© r   ú¡/root/aizidognhua/tmp/workspace/projects/ec89d86c-575f-41c9-af57-ac45cbdbf775/venv/lib/python3.10/site-packages/pypykatz/commons/readers/volatility3/volreader.pyÚ__init__   s   
zVOL3Section.__init__c                 C   s4   t ƒ }t|  ¡ ƒ|_t|  ¡ ƒ|_|j|j |_|S r   )r   ÚintÚ	get_startr   Úget_endr   r	   )ÚvadÚsr   r   r   Úfrom_vad   s
   zVOL3Section.from_vadN)Ú__name__Ú
__module__Ú__qualname__r   Ústaticmethodr   r   r   r   r   r      s    r   c                   @   r   )Ú
VOL3Modulec                 C   s   d | _ d | _d | _d | _d S r   )ÚnameÚ
start_addrÚend_addrr	   r
   r   r   r   r   !   s   
zVOL3Module.__init__c                 C   s>   t ƒ }t| ƒ ¡ |_t|jƒ|_t|jƒ|_|j|j |_	|S r   )
r   ÚstrÚlowerr   r   ÚDllBaser   ÚSizeOfImager	   r   )ÚBaseDllNameÚFullDllNameÚentryÚrmr   r   r   Úfrom_module'   s   zVOL3Module.from_moduleN)r   r   r   r   r   r%   r   r   r   r   r       s    r   c                   @   s   e Zd Zdd„ ZdS )ÚVOL3Sysinfoc                 C   s"   d | _ d | _d| _d | _d| _d S ©Ni HSé   )ÚarchitectureÚbuildnumberÚmsv_dll_timestampÚoperating_systemÚmajor_versionr
   r   r   r   r   1   s
   
zVOL3Sysinfo.__init__N)r   r   r   r   r   r   r   r   r&   0   s    r&   c                   @   s    e Z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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%d&„ZdS ))Ú
Vol3Readerc                 C   s<   || _ || _d | _d | _d | _i | _g | _d | _|  ¡  d S r   )	Úvol_objÚframework_versionÚproc_layer_nameÚ
proc_layerÚlsass_processÚmodulesÚsectionsÚprocessor_architectureÚsetup)r   r/   r0   r   r   r   r   9   s   zVol3Reader.__init__c                 C   s,   |   ¡  |  ¡  |  ¡  |  ¡  |  ¡  d S r   )Ú
find_lsassÚ	list_dllsÚget_buildnumberÚlist_sectionsÚget_archr
   r   r   r   r7   E   s
   zVol3Reader.setupc                 C   s,   t ƒ }| j|_| j|_d|_d |_d|_|S r'   )ÚKatzSystemInfor6   r)   r*   r+   r,   r-   )r   Úsysinfor   r   r   Úget_sysinfoL   s   zVol3Reader.get_sysinfoc                 C   sÈ   | j dkr| j dkrtdƒ‚tj dg¡}| j dkr3| jjd }| jjd }tjj| jj|||d�}n| j dkrGtjj| jj| jjd |d	�}|D ]}|| _	| j	 
¡ | _| jjj| j | _ d S td
ƒ‚)Nr   é   ú(Unsupported Volatility Framework Versionz	lsass.exeÚprimaryÚ
nt_symbols)ÚcontextÚ
layer_nameÚsymbol_tableÚfilter_funcÚkernel)rD   Úkernel_module_namerG   zLSASS process not found!)r0   Ú	ExceptionÚpslistÚPsListÚcreate_name_filterr/   ÚconfigÚlist_processesrD   r3   Úadd_process_layerr1   Úlayersr2   )r   rG   rE   rF   Ú	proc_listÚprocr   r   r   r8   U   s0   
ü

ýzVol3Reader.find_lsassc              	   C   sh   | j  ¡ D ],}t ¡  }}z|j ¡ }|j ¡ }W n
 tjy#   Y nw t	 
|||¡}|| j|j< qd S r   )r3   Úload_order_modulesÚ	renderersÚUnreadableValuer!   Ú
get_stringr"   Ú
exceptionsÚInvalidAddressExceptionr   r%   r4   r   )r   r#   r!   r"   Úmoduler   r   r   r9   u   s   
ÿözVol3Reader.list_dllsc                 C   s~   | j dkr| jjd tj d }n| j dkr(| jjj| jjd  jtj d }ntdƒ‚| jjj	|| j
| jjd�}|j| _d S )Nr   rC   Ú_PEBr@   rH   rA   )rE   Úoffset)r0   r/   rN   Ú	constantsÚBANGrD   r4   Úsymbol_table_namerJ   Úobjectr1   r3   ÚPebÚOSBuildNumberr*   )r   Ú
vol_objectÚpebr   r   r   r:   ƒ   s   

$ýzVol3Reader.get_buildnumberc                 C   s*   | j  ¡  ¡ D ]}| j t |¡¡ qd S r   )r3   Úget_vad_rootÚtraverser5   Úappendr   r   )r   r   r   r   r   r;   ’   s   ÿzVol3Reader.list_sectionsc                 C   sx   | j dkrt | jj| jjd ¡}n| j dkr*t | jj| jjj| jjd  j¡}ntdƒ‚|s6t	j
| _d S t	j| _d S )Nr   rC   r@   rH   rA   )r0   ÚsymbolsÚsymbol_table_is_64bitr/   rD   rN   r4   r_   rJ   ÚKatzSystemArchitectureÚX86r6   ÚX64)r   ri   r   r   r   r<   ˜   s   

&zVol3Reader.get_archNc                 C   sN   |du r| j tjkrd}nd}| j| }|dkrdS || | }|  |¡ dS )zD
		Repositions the current reader to match architecture alignment
		Né   é   r   )r6   rj   rl   Úcur_posÚread)r   Ú	alignmentr\   Úoffset_to_alignedr   r   r   Úalign¤   s   

zVol3Reader.alignc                 C   s   | j S )z)
		Returns the current virtual address
		©ro   r
   r   r   r   Útell´   s   zVol3Reader.tellc                 C   ó8   | j tjkrtj|  d¡ddd�S tj|  d¡ddd�S )z¯
		Reads an integer. The size depends on the architecture. 
		Reads a 4 byte small-endian singed int on 32 bit arch
		Reads an 8 byte small-endian singed int on 64 bit arch
		rm   ÚlittleT©Ú	byteorderÚsignedrn   ©r6   rj   rl   r   Ú
from_bytesrp   r
   r   r   r   Úread_intº   ó   zVol3Reader.read_intc                 C   rv   )z³
		Reads an integer. The size depends on the architecture. 
		Reads a 4 byte small-endian unsinged int on 32 bit arch
		Reads an 8 byte small-endian unsinged int on 64 bit arch
		rm   rw   Frx   rn   r{   r
   r   r   r   Ú	read_uintÅ   r~   zVol3Reader.read_uintc                 C   s   |   |¡ |  ¡ S r   )Úmover   ©r   Úposr   r   r   Úget_ptrÐ   s   
zVol3Reader.get_ptrc                 C   sJ   | j tjkr|  |¡ tj|  d¡ddd�}|d | S |  |¡ |  ¡ S )Nrn   rw   Trx   )r6   rj   rl   r€   r   r|   rp   r   )r   r‚   Úptrr   r   r   Úget_ptr_with_offsetÔ   s   

zVol3Reader.get_ptr_with_offsetc                 C   s
   || _ d S r   rt   r�   r   r   r   r€   Ý   s   
zVol3Reader.movec                 C   s&   | j j| j|dd�}|  j|7  _|S )NF)Úpad©r2   rp   ro   )r   r	   Údatar   r   r   rp   à   s   zVol3Reader.readc                 C   s   | j  | j|¡S r   r‡   )r   r	   r   r   r   Úpeekå   s   zVol3Reader.peekFc                 C   s€   |  ¡ | jvrtd| ƒ‚| j|  ¡  }g }t|gd�}t|jƒt|jƒfg}| jj| j	j
||d�D ]\}	}
| t|	ƒ¡ q2|S )Nz'Module is not in lsass memory space! %s)Úpatterns)rD   Úscannerr5   )r   r4   rJ   ÚMultiStringScannerr   r   r	   r2   Úscanr/   rD   rg   )r   Úmodule_nameÚpatternÚ
find_firstÚreverse_orderrZ   Úresr‹   r5   ÚhitÚ_r   r   r   Úfind_in_moduleè   s   ýzVol3Reader.find_in_moduler   )FF)r   r   r   r   r7   r?   r8   r9   r:   r;   r<   rs   ru   r}   r   rƒ   r…   r€   rp   r‰   r•   r   r   r   r   r.   8   s&    	 
	r.   c                 c   sê   � | j D ]}| j |  ¡ D ]}d|fV  qq| jD ]Y}| ¡ }|d dkrM|d d urLt|d ƒt|d ƒt|d ƒdddddt|d ƒdg
}d|fV  q| ¡ }t|d ƒdddddt|d ƒt|d	 ƒt|d
 ƒdg
}d|fV  qd S )Nr   ÚcredtypeÚdpapiÚpasswordÚ
domainnameÚusernameÚ Ú	masterkeyÚsha1_masterkeyÚkey_guid)Úlogon_sessionsÚto_grep_rowsÚorphaned_credsÚto_dictr   )ÚmimiÚluidÚrowÚcredÚtÚxr   r   r   Úvol3_generatorø   s    €
ÿ
8
€8÷r©   c                 C   sL   t  dtfdtfdtfdtfdtfdtfdtfdtfd	tfd
tfg
t| ƒ¡S )Nr–   r™   rš   ÚNThashÚLMHashÚSHAHashrœ   zmasterkey(sha1)rž   r˜   )rU   ÚTreeGridr   r©   )r£   r   r   r   Úvol3_treegrid  s   öõr®   N)Úpypykatz.commons.commonr›   r   r   r&   r.   r©   r®   r   r   r   r   Ú<module>   s    A