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rd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rt||	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
   
