o
    j)                     @   s\   d dl Z d dlZd dlZd dlZd dlmZmZ G dd dZdd Z	e
dkr,e	  dS dS )    N)strftimegmtimec                   @   s<   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd ZdS )PrettyOuputc                 C   sr   g }|r| |d  |d }|s|d d d }t|dkr/tdt| D ]}|dd q&ddd |D S )	N         r    c                 S   s   g | ]}t |qS  )str).0gr
   r
   /root/aizidognhua/tmp/workspace/projects/ec89d86c-575f-41c9-af57-ac45cbdbf775/venv/lib/python3.10/site-packages/ldapdomaindump/pretty.py
<listcomp>   s    z#PrettyOuput.d2b.<locals>.<listcomp>)appendlenrangeinsertjoin)selfatbint2binxr
   r
   r   d2b	   s   zPrettyOuput.d2bc                 C   s  t |tr|S |dkrdS |dkrdS t|d }|d }|d| 8 }|d }|d| 8 }|d }|d| 8 }d	}|d
krE|d|7 }n|d
krP|d|7 }|d
kr\|d|7 }n|d
krg|d|7 }|d
krt|d|7 }|S |d
kr|d|7 }|S )Nr   Nonel         zNot Seti iQ i  <   r	      z	{0} days z{0} day z
{0} hours z	{0} hour z{0} minutes z{0} minute )
isinstancer   absformat)r   timesecdayshrsminsresultr
   r
   r   convert   s8   
zPrettyOuput.convertc                 C   s  t d t d|d d d d   t d|d d d d  t d|d d d	 d  | |d d d
 d }t d| t d t d|d  t d|d  t d|d  t d|d  t d|d  t d|d  t d t d| |d d d d  t d| |d d d d  t d| |d d d d  t d|d d d d  t d | |d d d! d  d S )"Nz
    +-----------------------------------------+
    | Password Policy Information             |
    +-----------------------------------------+
    z[+] Password Info for Domain:r   
attributesdcz	[+] Minimum password length: instanceTypez	[+] Password history length:pwdHistoryLengthpwdPropertiesz	[+] Password Complexity Flags:r	   z$		[+] Domain Refuse Password Change:z&		[+] Domain Password Store Cleartext:r   z%		[+] Domain Password Lockout Admins:r   z&		[+] Domain Password No Clear Change:   z%		[+] Domain Password No Anon Change:   z		[+] Domain Password Complex:   z	[+] Maximum password age:	maxPwdAgez	[+] Minimum password age:	minPwdAgez#	[+] Reset Account Lockout Counter:lockoutDurationz	[+] Account Lockout Threshold:lockoutThresholdz	[+] Forced Log off Time:forceLogoff)printupperr   r'   )r   datapassword_propertiesr
   r
   r   password_complexity2   s&   
   $zPrettyOuput.password_complexityc                 C   sX   t d t d|d d d d  t d|d d d d  t d |d d d d S )	Nz
    +--------------------------------------+
    | Getting Domain Sid For               |
    +--------------------------------------+
    z[+] Domain Name:r   r(   r)   zDomain Sid:	objectSidr	   )r5   )r   r7   r
   r
   r   domain_infoN   s
   zPrettyOuput.domain_infoc                 C   s   t d |D ]2}|d dr|d dd nd}t d| d |d d d  d	 |d d
 d  d |  qt d |D ]}t d|d d d  d  q?t d d S )Nzb
    +------------------------+
    | Users Infos            |
    +------------------------+
    r(   descriptionr   z(null)z	Account: \sAMAccountNamez	Name: namez	Desc: r	   zuser:[])r5   get)r   usersr)   userdescr
   r
   r   	user_infoY   s   $>zPrettyOuput.user_infoc                 C   s   t d |D ]}t d|d d d  d  q|D ]K}|d drdtdd	|d d tj}|rdt d
 |D ]*}|dkrBd}n|dkrId}n|dkrOd}t d|d d d  d | d |  q9qd S )Nzp
    +------------------------+import os.path
    | Groups Infos           |
    +------------------------+
    zgroup:[r(   r?   r   r@   memberz^CN=([\w\s\-\_\{\}\.\$\#]+)
z&
[+] Getting domain group memberships:zS-1-5-11z NT AUTHORITY\Authenticated UserszS-1-5-4zNT AUTHORITY\INTERACTIVEzS-1-5-17zNT AUTHORITY\IUSRzGroup 'z' has member: r=   )r5   rA   refindallr   M)r   groupsr)   grouprB   rC   r
   r
   r   groups_infoh   s$   *zPrettyOuput.groups_infoN)	__name__
__module____qualname__r   r'   r9   r;   rE   rM   r
   r
   r
   r   r      s    r   c                  C   s  t jdd} | jdddd |  }|jrt|jd }t|}W d    n1 s,w   Y  t|jd }t|}W d    n1 sHw   Y  t|jd	 }t|}W d    n1 sdw   Y  t }|	|}|
| |||  |||  d S td
 d S )Nz0LDAPDomainDump to pretty output like enum4linux.)r<   z-dz--directoryzThe ldapdomaindump directory where the json files are saved. Required files: domain_users.json, domain_groups.json and domain_policy.json)helpz/domain_policy.jsonz/domain_users.jsonz/domain_groups.jsonz&Missing parameter --directory /output/)argparseArgumentParseradd_argument
parse_args	directoryopenjsonloadr   r;   r9   rE   r6   rM   r5   )parserargsfdomainrB   rK   prettyr)   r
   r
   r   main   s&   

r_   __main__)rR   rX   os.pathosrH   r!   r   r   r   r_   rN   r
   r
   r
   r   <module>   s    x
