o
    �õ±ju  ã                   @   s�  d dl Z d dlmZ d dlmZmZmZmZmZm	Z	m
Z
 d dlmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZm Z m!Z!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z( d dl)m*Z*m+Z+ d dl,Z,d dl-Z-d dl.m/Z/ d dl0m1Z1m2Z2m3Z3m4Z4 d dl5m6Z6 d d	l7m8Z8 d
d„ Z9dd„ Z:dd„ Z;dd„ Z<dd„ Z=dd„ Z>d)dd„Z?dd„ Z@dd„ ZAdd„ ZBdd „ ZCd!d"„ ZDd#d$„ ZEd*d%d&„ZFd'd(„ ZGdS )+é    N)ÚSE_OBJECT_TYPE)ÚCloseHandleÚCreateFileWÚGENERIC_READÚREAD_CONTROLÚOPEN_EXISTINGÚFILE_ATTRIBUTE_DIRECTORYÚFILE_FLAG_BACKUP_SEMANTICS)ÚLookupAccountNameWÚLookupAccountSidWÚGetSecurityInfoÚOWNER_SECURITY_INFORMATIONÚGROUP_SECURITY_INFORMATIONÚDACL_SECURITY_INFORMATIONÚOpenSCManagerWÚSC_MANAGER_ENUMERATE_SERVICEÚEnumServicesStatusWÚOpenServiceWÚQueryServiceObjectSecurityÚCloseServiceHandleÚhive_name_mapÚRegOpenKeyExWÚRegCloseKeyÚRegEnumKeyExWÚRegEnumValueWÚSetSecurityInfoÚBuildTrusteeWithSidWÚGetEffectiveRightsFromAclWÚConvertSidToStringSidWÚConvertStringSidToSidWÚ4ConvertSecurityDescriptorToStringSecurityDescriptorWÚOpenProcessTokenÚGetTokenInformationÚLsaGetLogonSessionDataÚTokenStatisticsÚOpenProcessÚGetCurrentProcessId)ÚNetUserGetLocalGroupsÚNetUserGetInfo)ÚSECURITY_DESCRIPTOR)ÚACCESS_ALLOWED_ACEÚAceFlagsÚFILE_ACCESS_MASKÚACCESS_MASK)ÚSID)ÚEvaluateSidAgainstDescriptorc                 C   s   t d | ƒ\}}}|S ©N)r
   )ÚusernameÚsidÚdomainÚuse© r5   ú�/root/aizidognhua/tmp/workspace/projects/ec89d86c-575f-41c9-af57-ac45cbdbf775/venv/lib/python3.10/site-packages/winacl/functions/highlevel.pyÚget_sid_for_user   s   r7   c                 C   s*   t  | ¡}td | ¡ ƒ\}}}d||f S )Nú%s\%s)r.   Úfrom_stringr   Úto_bytes)Úsid_strr2   r1   r3   r4   r5   r5   r6   Úget_user_for_sid   s   
r<   c                 C   s   t | tjjttB tB ƒ}|S r0   )r   r   ÚSE_REGISTRY_KEYÚvaluer   r   r   )Ú
key_handleÚsdr5   r5   r6   Ú
get_reg_sd   s   rA   c                 C   s.   d}t | |td�}t|tjj|ƒ t|ƒ d S )Ni   ©ÚdwDesiredAccessÚdwCreationDisposition)r   r   r   r   ÚSE_FILE_OBJECTr>   r   )Ú	file_pathr@   Ú
req_rightsÚfile_handler5   r5   r6   Úset_file_sd"   s   rI   c                 C   s2   t | ttd�}t|tjjttB t	B ƒ}t
|ƒ |S )NrB   )r   r   r   r   r   rE   r>   r   r   r   r   )rF   rH   r@   r5   r5   r6   Úget_file_sd(   s   rJ   c                 C   s8   t | ttttB d�}t|tjjt	t
B tB ƒ}t|ƒ |S )N)rC   rD   ÚdwFlagsAndAttributes)r   r   r   r   r	   r   r   rE   r>   r   r   r   r   )Údir_pathrH   r@   r5   r5   r6   Úget_directory_sd.   s   rM   Fc                 c   s²   � | d dkr| d7 } t j| d dd�D ]B}tj |¡du r4z
|dt|ƒfV  W q   |ddfV  Y q|du rVtj |¡du rVz
|dt|ƒfV  W q   |ddfV  Y qqd S )	Néÿÿÿÿú\z**/*T)Ú	recursiveÚdirÚERRÚfile)ÚglobÚiglobÚosÚpathÚisdirrM   ÚisfilerJ   )rL   Ú
with_filesÚfilenamer5   r5   r6   Úget_dir_file_recursive4   s    €€ör\   c                  C   s.   t td�} t| ttB tB tjd�}t| ƒ |S ©N©rC   ©ÚdwSecurityInformationÚsd_object_type)	r   r   r   r   r   r   r   Ú
SE_SERVICEr   )Ú
scm_handler@   r5   r5   r6   Úget_servicemanager_sdC   s   
rd   c                 C   sH   t ttB d�}t|| td�}t|ttB tB tj	d�}t
|ƒ t
|ƒ |S r]   )r   r   r   r   r   r   r   r   r   rb   r   )Úservice_namerc   Úservice_handler@   r5   r5   r6   Úget_service_sdI   s   rg   c                  c   sÜ   � dt ƒ fV  tttB d�} t| ƒD ]M}z?zt| |td�}t|ttB t	B t
jd�}||fV  W n tyF } z|dfV  W Y d }~nd }~ww W zt|ƒ W q   Y qzt|ƒ W w    Y w zt| ƒ W d S    Y d S )NÚSCMr^   r_   Úerr)rd   r   r   r   r   r   r   r   r   r   r   rb   Ú	Exceptionr   )rc   re   rf   r@   Úer5   r5   r6   Úenumerate_all_service_sdQ   s2   €€ÿ€ýrl   c                 C   s$   t |  }t|tjjttB tB ƒ}|S r0   )r   r   r   r=   r>   r   r   r   )Ú	hive_namer?   r@   r5   r5   r6   Úget_registry_hive_sde   s   rn   c                 C   sx   |   d¡}t|d  }g }|dd… D ]}t||ƒ}| |¡ qt|tjjtt	B t
B ƒ}|d d d… D ]}t|ƒ q3|S )NrO   r   é   rN   )Úsplitr   r   Úappendr   r   r=   r>   r   r   r   r   )Úreg_pathÚpath_elementsÚ
reg_handleÚhandlesÚnamer@   r5   r5   r6   Úget_registry_key_sdj   s   


rw   c                 C   s|   g }d }|  d¡dkr| d¡\}}t||ƒ^}}| |¡ t||ƒD ]}t||ƒ\}}}	| |¡ q#t| |d|ƒ\}
}|S )NrO   rN   i   )Úfindrp   r
   rq   r'   r/   )r@   r1   Ú
sid_groupsr3   Úuser_sidÚtÚ
group_namer2   Ú	groupnamer4   ÚresÚmaskr5   r5   r6   Ú get_maximum_permissions_for_user|   s   
r€   c                 c   s2  � | d dkr| d d… } g }|d u r3|   d¡}t|d  }g }|dd … D ]}t||ƒ}| |¡ q&t|ƒ}|D ]T}d| |f }zt||ƒ}W n( typ }	 zt|	ƒ d¡dkrbtt|	ƒ| ƒ nt|	ƒ W Y d }	~	q9d }	~	ww t	|t
jjttB tB t
jd�}
||
fV  t||ƒE d H  q9|D ]}t|ƒ q�d S )NrN   rO   r   ro   r8   zcannot find)Úse_object_type)rp   r   r   rq   r   rj   Ústrrx   Úprintr   r   r=   r>   r   r   r   Úenumerate_registry_sdr   )rr   rt   ru   rs   rv   ÚsubkeysÚskÚreg_path_skÚreg_handle_skrk   r@   r5   r5   r6   r„   �   s8   €

€ü

ÿr„   c                  C   s*   t d dtƒ ƒ} t| ƒ}t|tƒ}t|jƒS )NF)r%   r&   r!   r"   r$   r#   ÚAuthenticationId)ÚphandleÚ	tokhandleÚstatsr5   r5   r6   Úget_logon_info±   s   

r�   )Fr0   )HÚctypesÚwinacl.functions.constantsr   Úwinacl.functions.kernel32r   r   r   r   r   r   r	   Úwinacl.functions.advapi32r
   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r    r!   r"   r#   r$   r%   r&   Úwinacl.functions.netapi32r'   r(   rT   rV   Úwinacl.dtyp.security_descriptorr)   Úwinacl.dtyp.acer*   r+   r,   r-   Úwinacl.dtyp.sidr.   Úwinacl.functions.rights_calcr/   r7   r<   rA   rI   rJ   rM   r\   rd   rg   rl   rn   rw   r€   r„   r�   r5   r5   r5   r6   Ú<module>   s4    $|	

"