o
    Žõ±j2  ã                   @   s8   d dl Z d dlZd dlmZ ddd„ZG dd„ dƒZdS )é    N)Útqdmc              
   Ã   sš   �z5|d ur d}| D ]}z|t |ƒ7 }W q
   Y q
| |¡ n| D ]}ztt |ƒƒ W q"   Y q"g } W dS  tyL } z
d |fW  Y d }~S d }~ww )NÚ )TN)ÚstrÚwriteÚprintÚ	Exception)ÚbufferÚoutfile_handleÚresÚsecretÚe© r   ú�/root/aizidognhua/tmp/workspace/projects/ec89d86c-575f-41c9-af57-ac45cbdbf775/venv/lib/python3.10/site-packages/pypykatz/parsers/cmdhelper.pyÚflush_buffer   s*   €€ÿr   c                   @   s4   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ ZdS )ÚParsersCMDHelperc                 C   s   dg| _ dg| _d S )NÚparser)Úlive_keywordsÚkeywords)Úselfr   r   r   Ú__init__$   s   zParsersCMDHelper.__init__c                 C   s’   |j ddd�}| ¡ }d|_d|_|j ddd�}|jdd	d� |jd
dd� |jddddd� |jdddd� |jdddd� |jdddd� d S )Nr   zSMB related commands)ÚhelpTÚparser_moduleÚntdsz(NTDS.dit file parser, extracting secretsÚntdsfilezNTDS.dit fileÚ
systemhivezNSYSTEM hive file or the Bootkey(in hex). This is needed to decrypt the secretsz-pz
--progressÚ
store_truezMShow progress bar. Please use this only if you also specified an output file.)Úactionr   z-oz	--outfilez9Output file. If omitted secrets will be printed to STDOUTz--strictzStrict parsing. Fails on errorsz--no-historyzDo not parse history)Ú
add_parserÚadd_subparsersÚrequiredÚdestÚadd_argument)r   r   Úlive_parserÚparser_groupÚparser_subparsersÚ
ntds_groupr   r   r   Úadd_args(   s   zParsersCMDHelper.add_argsc                 C   s`   |j | jv rt |  |¡¡ t| jƒdkr*|j dkr,|j| jv r.t |  |¡¡ d S d S d S d S )Nr   Úlive)Úcommandr   ÚasyncioÚrunÚlenr   ÚmoduleÚrun_live©r   Úargsr   r   r   Úexecute7   s
   $ÿzParsersCMDHelper.executec                 Ã   s   �t  ¡  ¡ dkrtdƒ‚d S )NÚwindowsz#Live commands only work on Windows!)ÚplatformÚsystemÚlowerr   r.   r   r   r   r-   ?   s   €ÿzParsersCMDHelper.run_livec                 Ã   sV  �|j dkr§ddlm} ||j|j|j|j d�}g }d}| ¡ I d H }|jdu r>t	d|d|d	 dd
�}t	dd|d dd�}d }	|j
d urMt|j
ddd�}	| ¡ 2 zB3 d H W \}
}|d ur_|‚|jdu rh| ¡  |
d u rmqQ|jdu rv| ¡  | |
¡ t|ƒ|kr“t||	ƒI d H \}}g }|d ur“|‚qQ6 t||	ƒI d H \}}g }|d ur©|‚d S d S )Nr   r   )ÚNTDSParserConsole)Úignore_errorsÚwith_historyiè  TzJET table parsing ÚrecordséÈ   )ÚdescÚtotalÚunitÚminitersÚpositionzUser secrets foundr   é
   é   )r:   r<   r=   r>   Úw)Únewline)r   Úaesedb.examples.ntdsparser5   r   r   ÚstrictÚ
no_historyÚget_total_rowsÚprogressr   ÚoutfileÚopenÚget_secretsÚupdateÚappendr+   r   )r   r/   r5   Úntdsconr   Úbuffer_sizer;   ÚpbarÚpbar_secr	   r   ÚerrÚ_r   r   r   r*   C   sR   €
ü




€íÓ,zParsersCMDHelper.runN)Ú__name__Ú
__module__Ú__qualname__r   r&   r0   r-   r*   r   r   r   r   r   #   s    r   )N)r)   r2   r   r   r   r   r   r   r   Ú<module>   s
   
