o
    j                     @   s   d dl Z d dlmZ d dlmZ d dlmZ d dlmZ d dlm	Z	 d dl
mZ d dlmZ G d	d
 d
ZdddZdd Zdd ZedkrKe  dS dS )    N)tqdm)ESENT_DB)AFile)NTDS)SYSTEM)AIOWinRegHive)loggerc                   @   s&   e Zd Zd	ddZdd Zdd ZdS )
NTDSParserConsoleTc                 C   s   || _ || _|| _|| _d S N)bootkeyntdsfileignore_errorswith_history)selfr   r   r   r    r   /root/aizidognhua/tmp/workspace/projects/ec89d86c-575f-41c9-af57-ac45cbdbf775/venv/lib/python3.10/site-packages/aesedb/examples/ntdsparse.py__init__   s   
zNTDSParserConsole.__init__c                    s   t d | j}t| jtrt| j}t|}| I d H \}}|d ur'|d}|dI d H \}}|d ur9|t d|  |S )NzFetching total row count...   	datatablezTotal row count done! %s)	r   debugr   
isinstancestrr   r   parse
get_rowcnt)r   filedb_errtotalr   r   r   get_total_rows   s   

z NTDSParserConsole.get_total_rowsc              
   C  s>  zd}t | jtr t| jdkr z
t| j}d}W n   Y |du rA| j}t | jtr2t| j}t|}t|}|	 I d H }| j
}t | j
trOt| j
}t|}| I d H \}}	|	d urb|	t||}
td |
j| j| jd2 z3 d H W \}}	||	fV  qu6 W d S  ty } zd |fV  W Y d }~d S d }~ww )NF    TzDumping secrets)r   r   )r   r   r   lenbytesfromhexr   r   r   get_bootkeyr   r   r   r   r   r   dump_secretsr   r   	Exception)r   hexkeyr   regfilereghivesyshiver   r   r   r   ntdssecreter   r   r   get_secrets$   s@   



"zNTDSParserConsole.get_secretsN)TT)__name__
__module____qualname__r   r   r.   r   r   r   r   r	   
   s    
r	   c              
      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)r   writeprintr&   )bufferoutfile_handleresr,   r-   r   r   r   flush_bufferG   s*   r8   c               
      s  dd l } dd l}z| jdd}|jddddd |jdd	d
dd |jdddd |jdd
dd |jdd
dd |jddd |jddd | }t|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rt|jd%d!d&}
| 2 zB3 d H W \}}|d ur||jdu r|  |d u rq|jdu r|	  || t||krt||
I d H \}}g }|d ur|q6 t||
I d H \}}g }|d ur|W d S  ty } z|  W Y d }~d S d }~ww )'Nr   zNTDS.dit parser)descriptionz-vz	--verbosecount)actiondefaultz-pz
--progress
store_truezShow progress bar)r;   helpz-oz
--out-filezOutput file path.)r>   z--strictzStrict parsing. Fails on errorsz--no-historyzDo not parse historyr   z'Bootkey OR path to the SYSTEM hive filer   zNTDS.dit file path)r   r   i  TzJET table parsing records   )descr   unitminiterspositionzUser secrets foundr2   
   r   )rA   rB   rC   rD   w)newline)argparse	tracebackArgumentParseradd_argument
parse_argsr	   r   r   strict
no_historyr   progressr   out_fileopenr.   updateappendr!   r8   r&   	print_exc)rH   rI   parserargsntdsconr5   buffer_sizer   pbarpbar_secr6   r,   r   r   r-   r   r   r   amain^   sl   




r[   c                   C   s   t t  d S r
   )asynciorunr[   r   r   r   r   main   s   r^   __main__r
   )r\   r   aesedb.eesentdbr   aesedb.utils.afiler   aesedb.security.ntdsr   aesedb.utils.systemhiver   aiowinreg.ahiver   aesedbr   r	   r8   r[   r^   r/   r   r   r   r   <module>   s    
=A
