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