o
    j                      @   s   d dl Z d dlmZ d dlmZ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	eZG d
d deZG dd deZG dd dZdS )    N)Thread)ProcessQueue)logger)NetLocalGroupGetMembers)
is_port_up)UniversalEncoderc                   @   s(   e Zd Zg dddfddZdd ZdS )	LocalGroupEnumThreadzRemote Desktop UsersAdministratorszDistributed COM Users   Tc                 C   s,   t |  || _|| _|| _|| _|| _d S N)r   __init__inQoutQtimeout	pre_checkgroups)selfr   r   r   r   r    r   /root/aizidognhua/tmp/workspace/projects/ec89d86c-575f-41c9-af57-ac45cbdbf775/venv/lib/python3.10/site-packages/pypykatz/remote/live/localgroup/enumerator.pyr      s   

zLocalGroupEnumThread.__init__c              
   C   s   	 | j  }|s
d S | jdu rt|d| jddu rq z| jD ]}t||ddD ]}| j|||f q'qW n t	yP } zt
dt|  W Y d }~q d }~ww q)NTi  )r   F   )levelzLocalGroupEnumThread error: %s)r   getr   r   r   r   r   r   put	Exceptionr   debugstr)r   target	groupnamegrouper   r   r   run   s&   


zLocalGroupEnumThread.runN__name__
__module____qualname__r   r"   r   r   r   r   r	      s    r	   c                   @   s   e Zd ZdddZdd ZdS )	LocalGroupEnumProcr   Tc                 C   s8   t |  || _|| _|| _g | _|| _|| _|| _d S r   )	r   r   r   r   	threadcntthreadsr   r   r   )r   r   r   r(   r   r   r   r   r   r   r   %   s   

zLocalGroupEnumProc.__init__c                 C   s^   t | jD ]}t| j| j| j| j| jd}d|_|	  | j
| q| j
D ]}|  q&d S )Nr   r   r   T)ranger(   r	   r   r   r   r   r   daemonstartr)   appendjoin)r   itr   r   r   r"   /   s   

zLocalGroupEnumProc.runN)r   Tr#   r   r   r   r   r'   $   s    

r'   c                   @   s&   e Zd Zd	ddZdd Zdd ZdS )
	LGResProcNFc                 C   s&   t |  || _i | _|| _|| _d S r   )r   r   r   resultsout_fileto_json)r   r   r4   r5   r   r   r   r   9   s
   

zLGResProc.__init__c                 C   s   d S r   r   r   r   r   r   setup@   s   zLGResProc.setupc              	   C   s  |    	 | j }|snL|\}}}| jdu r.|| jvr!g | j|< | j| || g n*d|||j|jt	|j
f }| jd urT|| jvrKg | j|< | j| | nt| q| jd u re| jdu red S td | jd urt| jddd;}| jdu r|tj| jtddd	 n| jD ]}| j| D ]}|d
||f  qqW d    d S W d    d S 1 sw   Y  d S ttj| jtddd	 d S )NTz%s %s %s %s %sFzWriting results...w )newline   )clsindent	sort_keysz%s %s
)r7   r   r   r5   r3   r.   to_dictdomainusernamer   sidr4   printr   infoopenwritejsondumpsr   )r   resultr   r   r    fresr   r   r   r"   C   sB   











"zLGResProc.run)NF)r$   r%   r&   r   r7   r"   r   r   r   r   r2   8   s    
r2   c                   @   s4   e Zd Zdd Zdd Zdd Zdd Zd	d
 ZdS )LocalGroupEnumeratorc                 C   sT   g | _ t | _t | _g | _d | _d| _d| _d| _d| _	d | _
d| _g d| _d S )Nr;   r   TFr
   )hostsr   r   r   agentsresult_processagent_proccntagent_threadcntr   r   r4   r5   r   r6   r   r   r   r   l   s   zLocalGroupEnumerator.__init__c                 C   s<   d}dg}| ||D ]}| j|d d d d  qd S )Nz(&(sAMAccountType=805306369))sAMAccountName
attributes)pagedsearchrM   r.   )r   ldapldap_filterrS   entryr   r   r   load_targets_ldap~   s
   z&LocalGroupEnumerator.load_targets_ldapc                 C   sX   t |d}|D ]}| }|dkrq| j| qW d    d S 1 s%w   Y  d S )Nrr9   )rE   striprM   r.   )r   filenamerJ   liner   r   r   load_targets_file   s   "z&LocalGroupEnumerator.load_targets_filec                 C   s   |  j |7  _ d S r   )rM   )r   targetsr   r   r   load_tagets   s   z LocalGroupEnumerator.load_tagetsc              	   C   s   t | j| j| jd| _d| j_| j  t| jD ]}t	| j
| j| j| j| j| jd}d|_|  | j| qtd | jD ]}| j
| qA| jD ]}t| jD ]}| j
d  qTqM| jD ]}|  qa| jd  | j  d S )N)r4   r5   Tr*   z === Enumerating local groups ===)r2   r   r4   r5   rO   r,   r-   r+   rP   r'   r   rQ   r   r   r   rN   r.   r   rD   rM   r   r/   )r   r0   pr1   ar   r   r   r"      s&   
 




zLocalGroupEnumerator.runN)r$   r%   r&   r   rY   r^   r`   r"   r   r   r   r   rL   k   s    rL   )rG   	threadingr   multiprocessingr   r   pypykatzr   4pypykatz.commons.winapi.local.function_defs.netapi32r   "pypykatz.remote.live.common.commonr   pypykatz.commons.commonr   r	   r'   r2   rL   r   r   r   r   <module>   s    3