
    hCF                    <   d Z ddlmZmZmZ ddlZddlZddlZddlZddlZddl	m
Z
mZmZmZmZ ddlmZmZ ddlmZ ddl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! dd	l"m#Z# dd
l$m%Z% ddl&m'Z' ddl(m)Z)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8m9Z9m:Z:m;Z; ddl<m=Z=m>Z>m?Z?m@Z@mAZAmBZBmCZCmDZDmEZEmFZFmGZGmHZHmIZImIZImJZJmKZKmLZLmMZMmNZNmOZOmPZPmQZQmRZR ddlSmTZTmUZU ddlVmWZWmXZXmYZY 	 ddlZZ[ddl\m]Z^ ddlZm_Z_ n# e`$ r dZ[Y nw xY w G d de#          Za G d de#          Zb G d de#          Zc G d de#          Zd G d de#          Ze G d de#          Zf G d de#          Zg G d d e#          Zh G d! d"e#          Zie[ G d# d$e[jj                  Zk G d% d&          ZldS )'zj
Create/Edit Kerberos ticket using Scapy

See https://scapy.readthedocs.io/en/latest/layers/kerberos.html
    )datetime	timedeltatimezoneN)ASN1_BIT_STRINGASN1_GENERAL_STRINGASN1_GENERALIZED_TIMEASN1_INTEGERASN1_STRING)	bytes_hex	hex_bytes)conf)log_interactive)	ByteFieldFieldLenField
FlagsFieldIntEnumFieldIntFieldPacketFieldPacketListFieldShortEnumField
ShortFieldStrLenFieldUTCTimeField)Packet)pretty_list)NDRUnion)AuthorizationDataAuthorizationDataItemEncTicketPartEncryptedDataEncryptionKey
KRB_TicketKerberosClientKerberosSSPPrincipalNameTransitedEncodingkpasswd
krb_as_reqkrb_tgs_req	_AD_TYPES_ADDR_TYPES_KRB_E_TYPES_KRB_S_TYPES_PRINCIPAL_NAME_TYPES_TICKET_FLAGS)CLAIM_ENTRYCLAIMS_ARRAY
CLAIMS_SETCLAIMS_SET_METADATACYPHER_BLOCKFILETIMEGROUP_MEMBERSHIPKERB_SID_AND_ATTRIBUTESKERB_VALIDATION_INFOPAC_ATTRIBUTES_INFOPAC_CLIENT_CLAIMS_INFOPAC_CLIENT_INFOPAC_INFO_BUFFERr<   PAC_REQUESTORPAC_SIGNATURE_DATAPACTYPERPC_SID_IDENTIFIER_AUTHORITYRPC_UNICODE_STRINGSIDUPN_DNS_INFOUSER_SESSION_KEYCLAIM_ENTRY_sub2)	WINNT_SIDWINNT_SID_IDENTIFIER_AUTHORITY)EncryptionTypeKey
_checksums)ttkc                   P    e Zd Z edddd           eddd           gZd	 ZdS )
CCCountedOctetStringlengthNdataI)	length_offmt    c                     | j         S N)rN   pkts    Z/mounts/lovelace/software/anaconda3/lib/python3.11/site-packages/scapy/modules/ticketer.py<lambda>zCCCountedOctetString.<lambda>u   s     rS   length_fromc                     t           j        S rU   r   padding_layerselfpayloads     rX   guess_payload_classz(CCCountedOctetString.guess_payload_classx       !!rS   )__name__
__module____qualname__r   r   fields_descrb    rS   rX   rM   rM   r   sX        hC@@@FC-C-CDDDK
" " " " "rS   rM   c            	           e Zd Z edde           edddd           ed e            e           edg ed	 
          gZ	d Z
d ZdS )CCPrincipal	name_typer   num_componentsN
componentsrP   count_ofrR   realmc                     | j         S rU   )rl   rV   s    rX   rY   zCCPrincipal.<lambda>   s	    3#5 rS   
count_fromc                     d                     d | j        D                       d| j        j                                        S )N/c              3   H   K   | ]}|j                                         V  d S rU   )rO   decode.0xs     rX   	<genexpr>z#CCPrincipal.toPN.<locals>.<genexpr>   s,      >>QV]]__>>>>>>rS   @)joinrm   rp   rO   rw   r`   s    rX   toPNzCCPrincipal.toPN   sH    HH>>do>>>>>>>JO""$$$
 	
rS   c                     t           j        S rU   r]   r_   s     rX   rb   zCCPrincipal.guess_payload_class   rc   rS   )rd   re   rf   r   r.   r   r   rM   r   rg   r   rb   rh   rS   rX   rj   rj   |   s        [!%:;;&|MMMG11335IJJ 55		
 	
 	
	
K
 
 
" " " " "rS   rj   c                   D    e Zd Z edd           edd          gZd ZdS )CCDeltaTimetime_offsetr   usec_offsetc                     t           j        S rU   r]   r_   s     rX   rb   zCCDeltaTime.guess_payload_class   rc   rS   N)rd   re   rf   r   rg   rb   rh   rS   rX   r   r      sH        """"K
" " " " "rS   r   c                   r    e Zd Z eddddi           edd           ed e            e          gZd ZdS )	CCHeadertag   	DeltaTimetaglen   tagdatac                     t           j        S rU   r]   r_   s     rX   rb   zCCHeader.guess_payload_class   rc   rS   N)	rd   re   rf   r   r   r   r   rg   rb   rh   rS   rX   r   r      sf        ua![!122
8QI{{}}k::K" " " " "rS   r   c                       e Zd Z edde           edd           eddd           eddd	 
          gZd Z	d Z
dS )
CCKeyBlockkeytyper   etypekeylenNkeyvalue)rQ   rS   c                     | j         S rU   )r   rV   s    rX   rY   zCCKeyBlock.<lambda>   s    SZ rS   rZ   c                 8    t          | j        | j                  S )N)key)rI   r   r   r~   s    rX   toKeyzCCKeyBlock.toKey   s    4<T]3333rS   c                     t           j        S rU   r]   r_   s     rX   rb   zCCKeyBlock.guess_payload_class   rc   rS   )rd   re   rf   r   r,   r   r   r   rg   r   rb   rh   rS   rX   r   r      s        y!\22
7Ah
;;;J1G1GHHH	K4 4 4" " " " "rS   r   c                   X    e Zd Z edde           ed e            e          gZd ZdS )	CCAddressaddrtyper   addressc                     t           j        S rU   r]   r_   s     rX   rb   zCCAddress.guess_payload_class   rc   rS   N)	rd   re   rf   r   r+   r   rM   rg   rb   rh   rS   rX   r   r      sW        z1k22I33557KLLK
" " " " "rS   r   c                   X    e Zd Z edde           ed e            e          gZd ZdS )
CCAuthDataauthtyper   authdatac                     t           j        S rU   r]   r_   s     rX   rb   zCCAuthData.guess_payload_class   rc   rS   N)	rd   re   rf   r   r*   r   rM   rg   rb   rh   rS   rX   r   r      sW        z1i00J 4 4 6 68LMMK
" " " " "rS   r   c                      e Zd Z ed e            e           ed e            e           ed e            e           edd           edd           edd           edd           ed	d
           edd
de	dgd e
e	          z
  z  z   ddd                    edddd           edg ed            edddd           edg ed            ed e            e           ed e            e          gZd Zd ZdS )CCCredentialclientserverkeyblockauthtimeN	starttimeendtime
renew_tillis_skeyr   ticket_flags     num_addressaddrsrP   rn   c                     | j         S rU   )r   rV   s    rX   rY   zCCCredential.<lambda>   s    s rS   rr   num_authdatar   c                     | j         S rU   )r   rV   s    rX   rY   zCCCredential.<lambda>   s	    s?O rS   ticketsecond_ticketc                     t           j        S rU   r]   r_   s     rX   rb   z CCCredential.guess_payload_class   rc   rS   c                    t          |          | j        _        |j        j        j        | j        _        t          |j	        j                  | j        _	        d |j        j
        D             | j        _        |j        j        j        | j        _        t          |j        j                  | j        _	        d |j        j
        D             | j        _        t          |j        |j                  | _        |j        j                                        | _        |j        #|j        j                                        | _        |j        j                                        | _        |j        j        d         dk    r#|j        j                                        | _        t7          |j        j        d          | _        d S )NrO   c                 8    g | ]}t          |j                   S r   rM   valrx   s     rX   
<listcomp>z-CCCredential.set_from_krb.<locals>.<listcomp>   3     "
 "
 "
12 ae,,,"
 "
 "
rS   c                 8    g | ]}t          |j                   S r   r   rx   s     rX   r   z-CCCredential.set_from_krb.<locals>.<listcomp>   r   rS   r   r   r   1   )bytesr   rO   snamenameTyper   r   rk   rM   rp   
nameStringrm   cnamer   crealmr   r   r   r   r   r   	timestampr   r   flags	renewTillr   intr   )r`   tkt
clientpart
sessionkeykdcreps        rX   set_from_krbzCCCredential.set_from_krb   s    :: !$	 2 60cimDDD"
 "
69i6J"
 "
 "

 !+ 0 9 =0j6G6KLLL"
 "
6@6F6Q"
 "
 "

 #$^
 
 
 0::<<'#-6@@BBDN~.88::<A#%%$.7AACCDO   0!44rS   )rd   re   rf   r   rj   r   r   r   r   r/   lenr   r   r   r   rM   rg   rb   r   rh   rS   rX   r   r      s       Hkkmm[99Hkkmm[99J

j99Z&&[$''Y%%\4((	)Q
bTR##m*<*<%<==tttD	
 	
 	mTGEEEY;V;VWWWndZSIIIJ3O3O	
 	
 	
 	H22446JKKO%9%9%;%;=QRR/K4" " " 5  5  5  5  5rS   r   c            	           e Zd Z edd           edd           edg ed            ed e            e           ed	g e          gZ	d
S )CCachefile_format_versioni  	headerlenr   headersc                     | j         S rU   )r   rV   s    rX   rY   zCCache.<lambda>  s     rS   rZ   primary_principalcredentialsN)
rd   re   rf   r   r   r   r   rj   r   rg   rh   rS   rX   r   r     sw        
(&11
;""	2x=V=VWWW'DDr<88KKKrS   r   c                   <     e Zd Z fdZd Zd Zd Zd Zd Z xZ	S )ScrollFramec                 >   t                                          |           t          j        | d          | _        t          j        | j                  | _        t          j        | d| j        j	                  | _
        | j                            | j
        j                   | j
                            dd           | j                            d	d
d           | j                            d| j        dd          | _        | j                            d| j                   | j                            d| j                   | j                            d| j                   | j                            d| j                   |                     d            d S )Nr   )borderwidthverticalorientcommandyscrollcommandrightysidefillleftbothTr   r   expand)   r   nwzself.viewPort)windowanchortagsz<Configure>z<Enter>z<Leave>)super__init__tkCanvascanvasrK   FrameviewPort	Scrollbaryviewvsb	configuresetpackcreate_windowcanvas_windowbindonFrameConfigureonCanvasConfigureonEnteronLeave)r`   parent	__class__s     rX   r   zScrollFrame.__init__  sc   GGV$$$)Da888DKIdk22DM|DT[EVWWWDHK!!!>>>HMMwSM111K&vdCCC!%!:!:t}T "; " "D M}d.CDDDK]D,BCCCMy$,777My$,777!!$'''''rS   c                 l    | j                             | j                             d                     dS )z4Reset the scroll region to encompass the inner frameall)scrollregionN)r   r   bboxr`   events     rX   r  zScrollFrame.onFrameConfigure3  s1    K!!t{/?/?/F/F!GGGGGrS   c                 V    |j         }| j                            | j        |           dS )z>Reset the canvas window to encompass inner frame when required)widthN)r  r   
itemconfigr  )r`   r  canvas_widths      rX   r  zScrollFrame.onCanvasConfigure7  s-     ;LK""4#5\"JJJJJrS   c                    t          j                    dk    r5| j                            t	          d|j        dz  z            d           d S t          j                    dk    r2| j                            t	          d|j        z            d           d S |j        dk    r| j                            dd           d S |j        dk    r| j                            dd           d S d S )	NWindowsr   x   unitsDarwinr      r   )platformsystemr   yview_scrollr   deltanumr  s     rX   onMouseWheelzScrollFrame.onMouseWheel<  s      I--((R5;3D-E)F)FPPPPP""h..((R%+-=)>)>HHHHH9>>K,,R99999Y!^^K,,Q88888 $^rS   c                     t          j                    dk    rB| j                            d| j                   | j                            d| j                   d S | j                            d| j                   d S NLinuxz
<Button-4>z
<Button-5>z<MouseWheel>)r  r  r   bind_allr!  r  s     rX   r  zScrollFrame.onEnterG  sr      G++$$\43DEEE$$\43DEEEEE$$^T5FGGGGGrS   c                     t          j                    dk    r6| j                            d           | j                            d           d S | j                            d           d S r#  )r  r  r   
unbind_allr  s     rX   r	  zScrollFrame.onLeaveN  sc      G++&&|444&&|44444&&~66666rS   )
rd   re   rf   r   r  r  r!  r  r	  __classcell__)r  s   @rX   r   r     s        	( 	( 	( 	( 	(,	H 	H 	H	K 	K 	K
		9 		9 		9	H 	H 	H	7 	7 	7 	7 	7 	7 	7rS   r   c                   j   e Zd Zd Zd Zd5dZd6dZd Zd7dZd8d	Z	d9d
Z
d7dZd Zd Zd8dZd Zd6dZd Zd Zd5dZd Zd5dZd Z edddg ddd          Zd Zd Zd Zd  Zd! Zd" Zd# Zd$ Z d% Z!d& Z"d' Z#d( Z$d) Z%d* Z&d+ Z'd, Z(d- Z)d8d.Z*d8d/Z+d8d0Z,d:d1Z-dddg fd2Z.d5d3Z/dg fd4Z0dS );Ticketerc                     t          j        t                    | _        d | _        t                      | _        t          j        t                    | _        d S rU   )collectionsdefaultdictdict_datafnamer   ccachehashes_cacher~   s    rX   r   zTicketer.__init__Z  s?     ,T22

hh'3D99rS   c                     || _         t          j        t                    | _        t          | j         d          5 }t          |                                          | _        ddd           dS # 1 swxY w Y   dS )z'
        Load CCache from file
        rbN)	r0  r,  r-  r.  r2  openr   readr1  r`   r0  fds      rX   	open_filezTicketer.open_file`  s     
'3D99$*d## 	,r ++DK	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	,s   'A//A36A3Nc                     |r|| _         | j         st          d          t          | j         d          5 }|                    t	          | j                            cddd           S # 1 swxY w Y   dS )z)
        Save opened CCache file
        z.No file opened. Specify the 'fname' argument !wbN)r0  
ValueErrorr5  writer   r1  r7  s      rX   savezTicketer.savei  s      	DJz 	OMNNN$*d## 	0r88E$+..//	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0s   'A))A-0A-Fc                 j   | j         j        st          d           dS t          d           fd}t          | j         j                  D ]\  }}|j        j        dk    rt          |d|j                                        d|j                                                   t          |	                    d                     t          t           ||j                   ||j                   ||j                   ||j                  fgd	g                     t                       dS )
z.
        Show the content of a CCache
        zNo tickets in CCache !NzTickets:c                 ~    | dS t          j        | rt          j        nd           } |                     d          S )NNone)tzz%d/%m/%y %H:%M:%S)r   fromtimestampr   utcstrftime)rz   rD  s    rX   _to_strzTicketer.show.<locals>._to_str~  s@    yv*11N$OOO::1222rS   r   z. z -> z   %ticket_flags%)z
Start timezEnd timezRenew untilz	Auth time)r1  r   print	enumerater   r   r   r   r   sprintfr   r   r   r   r   )r`   rD  rF  icreds    `   rX   showzTicketer.showt  sq    {& 	*+++F*	3 	3 	3 	3 	3 !!899 	 	GAt}$)) AAK$$&&&&K$$&&&	   $,,233444 $GDN33#GDL11#GDO44#GDM22	 LL
 
   GGGG3	 	rS   c                 d    	 ddl m}  ||          S # t          $ r t          |          cY S w xY w)Nr   )prompt)prompt_toolkitrN  ImportErrorinput)r`   msgrN  s      rX   _promptzTicketer._prompt  sT    	------6#;; 	 	 	::	s    //c                    |rt           |         }n|rt          |         }nt          d          |sq|| j        v r#|| j        |         v r| j        |         |         }nEd|d|d}t	          |                     |                    }|dk    rt          j        d           t          |||          }|| j        |         |<   |r)|r'|j	        r || j        |         t          |j	                 <   |S )Nz No cksumtype nor etype specifiedz
Enter the z
 hash for z (as hex): s   Ӵ5Ӵ5zBThis hash is the LM 'no password' hash. Is that what you intended?)r   	cksumtyper   )
r,   r-   r<  r2  r   rS  r   warningrI   rU  )r`   spnr   rU  hashhashtyperR  r   s           rX   _prompt_hashzTicketer._prompt_hash  s0    	A#E*HH 	A#I.HH?@@@ 	d'''H8I#8N,N,N(-h7?GxxM c!2!233TU U $+\   ===+/#x( 	G5 	GS] 	GBFDc"<#>?
rS   c                 z   | j         j        |         }t          |j        j                  }|9|                     |                                |j        j        j	        |          }	 |j        
                    |          S # t          $ r. 	 | j        |                                = n# t          $ r Y nw xY w w xY w)z<
        Get the decrypted ticket by credentials ID
        Nr   rX  )r1  r   r"   r   rO   rZ  getSPNencPartr   r   decrypt	Exceptionr2  
IndexError)r`   rJ  r   rX  rK  r   s         rX   
dec_ticketzTicketer.dec_ticket  s     {&q))**;##

k'+ $  C
	;&&s+++ 	 	 	%cjjll33   	s0   (B 
B:B('B:(
B52B:4B55B:c                    | j         j        |         }t          |j        j                  }|r+|                     ||                                ||          }|                     |                                |j        j	        j
        |          }|j                            |t          |                     |                    |||j                                        |           dS )z=
        Update a decrypted ticket by credentials ID
        )rX  kdc_hashr\  N)r1  r   r"   r   rO   _resign_ticketr]  rZ  r^  r   r   encryptr   r   r   r   )	r`   rJ  decTktresignrX  rd  rK  r   r   s	            rX   update_ticketzTicketer.update_ticket  s    
 {&q))**  	((

!	 )  F JJLL+#'   
 

 	Cv/// 	J		
 	
 	
 	
 	
rS   c                    || j         j        |         }nt                      }t          |t                    r|9|                     |                                |j        j        j	        |          }|j        
                    |          }|                    |||j                                        |           nzt          |t          j                  r|j        }n1t          |t          j                  r|j        }nt'          d          |                    |j        ||j        |j                   |!| j         j                            |           dS dS )z
        Import the result of krb_[tgs/as]_req or a Ticket into the CCache.

        :param obj: a KRB_Ticket object or a AS_REP/TGS_REP object
        :param sessionkey: the session key that comes along the ticket
        Nr\  zUnknown type of obj !)r1  r   r   
isinstancer"   rZ  r]  r^  r   r   r_  r   r   r   r#   RES_AS_MODEasrepRES_TGS_MODEtgsrepr<  r   r   r   append)r`   resr   rX  _inplacerK  rg  reps           rX   
import_krbzTicketer.import_krb  sd    ;*84DD>>D c:&& 	{''JJLL++/ (  
 [((--F
  ""	    #~9:: :iC!<== :j !8999

	   K#**400000 rS   c                     | j         j        |         }t          |j        j                  |j                                        |j                                        |j	                                        fS )zA
        Export a full ticket, session key, UPN and SPN.
        )
r1  r   r"   r   rO   r   r   r   r   r   )r`   rJ  rK  s      rX   
export_krbzTicketer.export_krb'  s`     {&q)t{'((M!!KK	
 	
rS   c                 \    |                      |          \  }}}}t          ||||          S )z4
        Create a KerberosSSP from a ticket
        )STKEYUPNSPN)rv  r$   )r`   rJ  r   r   upnrW  s         rX   sspzTicketer.ssp3  sA     (,q'9'9$
C	
 
 
 	
rS   c                 t   t                      }|                     d          pdt          j                    vrt	          d           dS t          fdt          j                    D                       t          t          |j	        t          t          d          |j	        gt          d                    t          	          
                    |j        _        | j        j                            |           |                     t)          | j        j                  dz
  |d||           dS )z4
        Add a decoded ticket to the CCache
        zoWhat key should we use (AES128-CTS-HMAC-SHA1-96/AES256-CTS-HMAC-SHA1-96/RC4-HMAC) ? [AES256-CTS-HMAC-SHA1-96]: zAES256-CTS-HMAC-SHA1-96zUnknown keytypeNc              3   .   K   | ]\  }}|k    |V  d S rU   rh   )ry   kvr   s      rX   r{   z%Ticketer._add_cred.<locals>.<genexpr>M  s+      FF41a1::Q::::FFrS   s   krbtgtr   r   r   )r   )rp   r   r^  r   Trh  rX  rd  )r   rS  r,   valuesrG  nextitemsr   r"   r   r%   r   r	   r    r   rO   r1  r   rp  ri  r   )r`   rg  rX  rd  rK  r   s        @rX   	_add_credzTicketer._add_cred?  s`    ~~LL B  ) )	 	 +----#$$$FFFFF<#5#7#7FFFFF m#+I66  *!__   &    
 
 	&&t,,,'((1, 	 	
 	
 	
 	
 	
rS   c                 4
   |                     d|                     d          pd          }|                     d|                     d          pd                                          }|                     d|                     d          pd	          }|                     d
d |                     d          pd                    d          D                       }|                     dt	          |                     d          pd                    }|                     dt	          |                     d          pd                    }|                     dd          }|8|                     d          pg }|rd |                    d          D             }|                     dt	          |                     d          pd                    }	t          j        t          j                  	                    d          }
t          j                    }t          j        t          j        |                    d                    }i dt#          d           d!t%          |j                  t)          |j                  d"d#t-          |          d$t-          |          gt%          d%          d&d't/          |
          d(t/          |
t1          |	)          z             d*t/          |
t1          |	)          z             d+t/          |
t1          |	)          z             d,|                     |
                                          d-|                     d.          d/|                     d.          d0|                     |
t1          d1)          z
                                            d2|                     d          d3|                     d.          d4|d5d6d7d6i d8d6d9d6d:d6d;d<d=d6d>|                    d?d%          d         d@dAdBddC|dD|dEdF |D             dGddH|dIdJdKdL |D             dMddNg i dO|                     |
                                          dP|dQdRdS|dT|                                dU|                                dV|dW|dX|dYd%dZdRd[d\gd]gd^d_d`|dX|dadbdcdddedfdgdbdhdddidfdjdkdddfdkdddfdl}|                     |          }|                     |           dS )mz*
        Create a Kerberos ticket
        userzUser [User]: UserdomainzDomain [DOM.LOCAL]: z	DOM.LOCAL
domain_sidzDomain SID [S-1-5-21-1-2-3]: zS-1-5-21-1-2-3	group_idsc                 P    g | ]#}t          |                                          $S rh   )r   striprx   s     rX   r   z*Ticketer.create_ticket.<locals>.<listcomp>t  s6        AGGII  rS   z%Group IDs [513, 512, 520, 518, 519]: z513, 512, 520, 518, 519,user_idzUser ID [500]: 500primary_group_idzPrimary Group ID [513]: 513
extra_sidsNzExtra SIDs [] :c                 6    g | ]}|                                 S rh   )r  rx   s     rX   r   z*Ticketer.create_ticket.<locals>.<listcomp>  s     GGGAaggiiGGGrS   durationzExpires in (h) [10]: 10r   )microsecondr   r    01000000111000010000000000000000r   r   r   r   r   r  r   r   )hoursr   r   VI.LogonTimeVI.LogoffTimeNEVERVI.KickOffTimeVI.PasswordLastSet
   VI.PasswordCanChangeVI.PasswordMustChangeVI.EffectiveNameVI.FullNamer   VI.LogonScriptVI.ProfilePathVI.HomeDirectoryVI.HomeDirectoryDriveVI.UserSessionKeys                   VI.LogonServerVI.LogonDomainName.VI.LogonCountF   VI.BadPasswordCount	VI.UserIdVI.PrimaryGroupIdVI.GroupIdsc                     g | ]}|d dS )   
RelativeId
Attributesrh   rx   s     rX   r   z*Ticketer.create_ticket.<locals>.<listcomp>  s7       
  #$"#   rS   VI.UserFlagsVI.LogonDomainIdVI.UserAccountControl   VI.ExtraSidsc                     g | ]}|d dS )r  Sidr  rh   rx   s     rX   r   z*Ticketer.create_ticket.<locals>.<listcomp>  s     MMMQQa88MMMrS   VI.ResourceGroupDomainSidVI.ResourceGroupIdsCI.ClientIdCI.NameUPNDNS.Flags   
UPNDNS.Upnr|   UPNDNS.DnsDomainNameUPNDNS.SamName
UPNDNS.Sid-CC.ClaimsArrayszad://ext/AuthenticationSilozT0-siloIdTypeStringValuesClaimsSourceTypeClaimEntriesAI.FlagsPAC_WAS_REQUESTEDREQ.SidSC.SignatureType   SC.Signatures               SC.RODCIdentifierrS   KC.SignatureTypeKC.SignatureKC.RODCIdentifierTKT.SignatureTyper   TKT.SignatureTKT.RODCIdentifierEXKC.SignatureTypeEXKC.SignatureEXKC.RODCIdentifier) getrS  uppersplitr   r   nowr   rD  replacerandomSystemRandomrI   random_to_keyrH   AES256_CTS_HMAC_SHA1_96	randbytesr   r	   r   r
   r   r   r   r   _time_to_filetimer   rsplit_utc_to_mstimelower_build_ticketr  )r`   kwargsr  r  r  r  r  r  r  r  now_timerandr   storer   s                  rX   create_ticketzTicketer.create_ticketf  sO    zz&$,,"?"?"I6JJt||$:;;J{QQSS
 
 ZZLL899M=M
 

 JJ  LL!HII 10%**  	
 	
	 **YDLL9J,K,K,Tu(U(UVV!::DLL1K$L$L$UPU V V
 
 ZZd33
&788>BJ HGG1A1A#1F1FGGG
::DLL)@AAITJJ
 
 <--55!5DD"$$2DNN24F4F
 
^
_%GHH^
 '	22'00 ^
 )&11^
 24889(OO ^
 -h77^
 .x)(:S:S:S/STT^
 ,X	8Q8Q8Q-QRR^
 .x)(:S:S:S/STT^
$ D2283E3E3G3GHH%^
& T33G<<'^
( d44W==)^
* !$"8"8IB////::<<# #+^
0 #D$:$:1$=$=1^
2 $T%;%;G%D%D3^
4 5^
6 27^
8 b9^
 ^
: b;^
< =^
> $R?^
@  A^
B bC^
D !&--Q"7"7":E^
F RG^
H "1I^
J K^
L  !1M^
N   
 #  O^
\ B]^
^ 
_^
` $Sa^
b MM*MMMc^
d (e^
f "2g^
 ^
 ^
j 4..x/A/A/C/CDDk^
l tm^
p Aq^
r TTT6<<>>>:s^
t #FLLNNu^
v dw^
x ZZZ9y^
| () #@$%,5 %	 	 }^
V +W^
Z ***gg6[^
^ _^
` La^
b  c^
f g^
h Li^
j  k^
n  o^
 ^
p *"%"$*#&{^
 ^
 ^
@   ''srS   c                    |sd S t          j        d|                                          }|st          d|z            g }|                    d          r2d |                    d                              d          D             }|r{t          t          |                    d                    t          t          j
        dt          |                    d                              dd          	          |
          S t          t          |                    d                    t          t          j
        dt          |                    d                              dd          	          |
          S )NzS-(\d+)-(\d+)-?((?:\d+-?)*)zInvalid SID format: %sr  c                 ,    g | ]}t          |          S rh   r   rx   s     rX   r   z'Ticketer._build_sid.<locals>.<listcomp>  s    @@@Q#a&&@@@rS   r  r   z>Qr   )Value)RevisionIdentifierAuthoritySubAuthority)rematchr  r<  groupr  rF   r   rG   structr  rB   r@   )r`   sidstrmsdnm
subauthorss        rX   
_build_sidzTicketer._build_sid  se    	4H3V\\^^DD 	@5>???
771:: 	A@@!''!***:*:3*?*?@@@J 	QWWQZZ$B +dC

OO<<QRR@% % % (    QWWQZZ$@ +dC

OO<<QRR@% % % (   rS   c           &          d         r%t          dd d         D             ddd           }nd }fd}t          t          t          d          t	          d                    d d	         t          d
         d         d
         d                   d         t          d         d         d         d                   d         d         d         d         t          t          t          d          t          t          dt          t          d          g |d          rt          d          gng z    |d          rt          d          gng z   t          d          t          d           gz   |rt          d!          gng z   d"         rt          d#          gng z   d$         rt          d%          gng z    |d&          rt          d'          gng z    |d(          rt          d)          gng z   t          di d*dd+d,d-d.         d/d0         d1d2         d3d4         d5d6         d7d8         d9t          d:         ;          d<t          d=         ;          d>t          d?         ;          d@t          dA         ;          dBt          dC         ;          dDt          dE         ;          dFt          t          dG         d dH         I          t          dG         dHd          I          gI          dJt          dK         ;          dLt          dM         ;          dNdO         dPdQ         dRdS         dTdU         dVdW dX         D             dYdZ         d[                     d\                   d]ddgd^d_         d`g dadbdc         r fdddc         D             nd de                     df                   dgdh         rdi dh         D             nd g |d          r%t!          dj         dk         dl         m          gng z    |d          r%t!          dn         do         dp         m          gng z   t#          dq         dr         s          t%          dt         dudv         fdwdx         fdydz         fd{                     d|         d}~          fg          gz   |r%t'          dt)          |gdddd                     gng z   d"         rt+          d"         gd          gng z   d$         r,t-                               d$         d}~                    gng z    |d&          r%t!          d         d         d         m          gng z    |d(          r%t!          d         d         d         m          gng z                       g                    g                    S )Nr  Fc                 \    g | ])}t          |d          d |d         D                       *S )r  c                     g | ]y}t          |d          |d         t          |d         t          |d                             d          dz   |d                             d                                        zS )r  r  r  ;r   )
ValueCountr  )r   valuer  r  Values)r0   r   rE   countr  ry   ces     rX   r   z5Ticketer._build_ticket.<locals>.<listcomp>.<listcomp>  s     & & & !# (#%d8%'Z'/(*6
*:35n3E3K3KC3P3PST3T575G5M5Mc5R5R+& +& +&(" (" ("
 
 
& & &rS   r  )usClaimsSourceTyper  )r1   ry   cas     rX   r   z*Ticketer._build_ticket.<locals>.<listcomp>  se       $ # !+-.@+A& & ')&8& & &    rS   r   )ndr64ClaimsArraysusReservedTypeulReservedFieldSizeReservedFieldc                 "    | dz            dk    S )Nz.SignatureTyper   rh   )rz   r  s    rX   rY   z(Ticketer._build_ticket.<locals>.<lambda>(  s    5-=)=#>"#D rS   rS   )trTypecontentsr   r   r   r   r   r   r   r   r   r  r   r   r   r   r   zAD-WIN2K-PACLogon informationulTypeSCzServer SignatureKCzKDC Signature"Client name and ticket informationUPN and DNS informationClient claims informationr  PAC Attributesr  PAC RequestorTKTzTicket SignatureEXKCzExtended KDC Signaturer  	ndrendianlittle	LogonTimer  
LogoffTimer  KickOffTimer  PasswordLastSetr  PasswordCanChanger  PasswordMustChanger  EffectiveNamer  )BufferFullNamer  LogonScriptr  ProfilePathr  HomeDirectoryr  HomeDirectoryDriver  UserSessionKeyr  r   r   LogonServerr  LogonDomainNamer  
LogonCountr  BadPasswordCountr  UserIdr  PrimaryGroupIdr  GroupIdsc                 H    g | ]}t          |d          |d                    S r  r  r  r6   rx   s     rX   r   z*Ticketer._build_ticket.<locals>.<listcomp>  sH     :2 :2 :2
 9:	 5ECD\?CD\?56 56 56:2 :2 :2rS   r  	UserFlagsr  LogonDomainIdr  	Reserved1UserAccountControlr  	Reserved3)r   r   r   r   r   r   r   	ExtraSidsr  c                 p    g | ]2}t                              |d                    |d                   3S )r  r  r  )r7   r  ry   rz   r`   s     rX   r   z*Ticketer._build_ticket.<locals>.<listcomp>  sU     ;2 ;2 ;2
 9:	 5L<@OOAeH<U<UCD\?56 56 56;2 ;2 ;2rS   ResourceGroupDomainSidr  ResourceGroupIdsr  c                 H    g | ]}t          |d          |d                    S rC  rD  rx   s     rX   r   z*Ticketer._build_ticket.<locals>.<listcomp>  sN     B2 B2 B2
 9:	 5ECD\?CD\?56 56 56B2 B2 B2rS   r  r  r  )SignatureType	SignatureRODCIdentifierr  r  r  r  r  )ClientIdNamer  Upnr  DnsDomainNamer  SamNamer  r  r  T)r  )FlagsPayload)	ClaimsSetusCompressionFormatr  r  r  )r  Claimsr   )rX  FlagsLength)r  r  r  r  r  r  r  )BuffersPayloads)adTypeadData)seq)	transited	addressesr   r   r   r   r   r   r   r   authorizationDatarh   )r2   r   r&   r	   r
   r!   r%   r   r   r?   r<   r8   rA   rD   r4   r  r>   r;   rC   r:   r3   r9   r=   )r`   r  claimSet_signature_sets   ``  rX   r  zTicketer._build_ticket
  s}   "# 	! $ $$56%  (  !$%"1  HH6 HDDDD'#AS1A1A   .eY/uj1   ? >,7w
3   :&K()$K(/)+A0 5+9+2,;7J-. -. -.1* 0>~d/C/C-40?;M12 12 12-. -. 241*( 0>~d/C/C-40?;J12 12 12-. -. 24+1*0 -<7[-. -. -. -<7P-. -. -.	+*/1*J 08-40?;V12 12 12-. -. 24M'1*\ 05Z/@-40?;K12 12 12-. -. 24_01*n 05Y/?-40?;J12 12 12-. -. 24q91*@ 0>~e/D/D-40?;M12 12 12-. -. 24CB1*R 0>~f/E/E-40?;S12 12 12-. -. 24UK1*Z -A f-. f-. f-.6;ef-.:B(f-. ;@:O:Of-. <A;Q;Q	f-.
 =BBR<S<Sf-. AF4HA2 A2f-. CH4JC2 C2f-. DI4KD2 D2f-. ?Q;@AS;T?2 ?2 ?2 ?2f-.$ :L;@;O:2 :2 :2 :2%f-.* =O;@AQ;R=2 =2 =2 =2+f-.0 =O;@AQ;R=2 =2 =2 =21f-.6 ?Q;@AS;T?2 ?2 ?2 ?27f-.< DV;@8O<6D2 D2 D2 D2=f-.F @P8DAF@SB>>@qbBB9: 9: 9:
 9EAF@SB>>?bbBB9: 9: 9::6@2 @2 @2 @2Gf-.b =O;@AQ;R=2 =2 =2 =2cf-.h AS;@AU;VA2 A2 A2 A2if-.n <A;Q;Qof-.p BG4IB2 B2qf-.v 8=[7I7Iwf-.x @E4G@2 @2yf-.~:2 :2
 >C==Q:2 :2 :2 :2f-.L ;@:O:OMf-.N ?Coo49:L4M?2 ?2 ?2Of-.T <=a&&Uf-.V DI4KD2 D2Wf-.\ ;P:O:O:O]f-.l 493H;: ;2 ;2 ;2 ;2
 >C>=R;2 ;2 ;2 ;2 6:of-.p HL49:U4VH2 H2 H2qf-.H 499N3O
B: B2 B2
 >C8M>6B2 B2 B2 B2 6:Kf-.h2*j 0>~d/C/C-40BBG8JC6 ?DN>SCH8KD612 12 12
-. 
-. 24mw2*H 0>~d/C/C-40BBG8JC6 ?DN>SCH8KD612 12 12
-. 
-. 24KF2*P -<9>}9M5:95E-. -. -. -96;N6K 9>8=l8K56
 9H8=>T8U56
 9B8=>N8O56
 9>8<<A,<OAE 9H 9: 9:5692-. -. -.+*Od2*h 08-40F:?;N<DC: MNGHLMFJ<6 <6 <612 12 12-. -. 24kv2*| 05Z/@-40C;@;L:M@A12 12 12-. -. 24@2*R 05Y/?-40=8<8=i8Ht 9H 96 9612 12 12-. -. 24UK2*p 0>~e/D/D-40BBG8KC6 ?DO>TCH8LD612 12 12
-. 
-. 24sZ2*N 0>~f/E/E-40BBG8LC6 ?DDT>UCH8MD612 12 12
-. 
-. 24Qi2*[w,& w,& w,&z!" z!" z!"|!~  ~  ~ A A ACE E E'Y
 Y
 Y
 Y	
rS   c                 n    t          |j                  D ]\  }}|j        |k    r|j        |         c S  d S rU   )rH  r^  r!  r_  )r`   pacr!  rJ  bufs        rX   _getPayloadIfExistzTicketer._getPayloadIfExist  sH    ,, 	' 	'FAszV##|A&&& $trS   c                    t          j        |          }|                    d           t          |          D ]\  }}t	          j        ||d                   x|| j        n||d         <   }t          j        ||d                                       |dd           t          j	        ||	                              |dd
           |
                    dd           d S )Nrz   r   r   r  r   textw)rowcolumnsticky)textvariablee)weight)rK   r   r  rH  r   	StringVarr/  LabelgridEntrygrid_columnconfigure)r`   elementfields	datastorefrmrJ  fldr  s           rX   _make_fieldszTicketer._make_fields  s    i  c'' 	M 	MFAsKM<3q6L L L 9,TZZ)SVDq IcA''',,1S,IIIIc***//Aa/LLLL  1 -----rS   c                     |D ]V}t          j        ||v           x||<   }t          j        |||t           j                                      ddd           Wd S )Nrn  )rp  variabler   rz   r  r   r   padxpady)r   
BooleanVarCheckbuttonWr  )r`   r}  keysr   r  flgr  s          rX   _make_checkboxzTicketer._make_checkbox  sy     	 	C!#SE\!B!B!BBIcNQN7qFFFKKqq L    	 	rS   c                 "    t          j        |          }t          j        |dd          t          j        |dj                  }|                    dd	                               |j        
           D ]:}                    |t          j
                                       ||           ;t          |          D ]\  }	}
                    dd|	|
                               ddd            fd               G  fddt          j                  fd}fd}fd}t          j        |          }t          j        |d|                              ddd           t          j        |d|                              ddd           t          j        |d|                              ddd           |                                 |                    d            d S )!Nro  headingsr   )rs  rL  heightr   r   r   r   r   r   )r   r   endr
  indexiidr  rz   r  r  c                  d    fd                                 D             } | j        n<   d S )Nc                 <    g | ]}                     |d           S r  )item)ry   rz   trees     rX   r   zCTicketer._make_table.<locals>._update_datastore.<locals>.<listcomp>  s'    LLL1		!X..LLLrS   )get_childrenr/  )childrenr  namer`   r  s    rX   _update_datastorez/Ticketer._make_table.<locals>._update_datastore  sC    LLLL8I8I8K8KLLLHEM9,TZZ)TBBBrS   c                   @     e Zd Z fdZfdZ fdZd Z xZS )(Ticketer._make_table.<locals>.EditDialogc                     i | _         |                    di           | _        d| _         t	          |           j        |i | d S )Nr  F)rO   popinitial_valuessuccessr   r   r`   argsr  
EditDialogr  s      rX   r   z1Ticketer._make_table.<locals>.EditDialog.__init__  sO    	&,jj2&>&>#$0j$''0$A&AAAAArS   c                 \                          | fdD              j                   |S )Nc                 J    g | ]}|j                             |d           f S )r   )r  r  )ry   rz   diags     rX   r   zATicketer._make_table.<locals>.EditDialog.body.<locals>.<listcomp>  s1    JJJQa,00B778JJJrS   r  )r  rO   )r  framer   r`   s   ` rX   bodyz-Ticketer._make_table.<locals>.EditDialog.body  sG    !!JJJJ'JJJ"i "   
 rS   c                 L    d| _          t          |           j        |i | d S )NT)r  r   okr  s      rX   r  z+Ticketer._make_table.<locals>.EditDialog.ok  s2    #*j$''*D;F;;;;;rS   c                 b    t          d | j                                        D                       S )Nc              3   >   K   | ]}|                                 V  d S rU   )r  rx   s     rX   r{   zBTicketer._make_table.<locals>.EditDialog.values.<locals>.<genexpr>  s*      AAQUUWWAAAAAArS   )tuplerO   r  r~   s    rX   r  z/Ticketer._make_table.<locals>.EditDialog.values  s-    AAdi.>.>.@.@AAAAAArS   )rd   re   rf   r   r  r  r  r(  )r  r  r   r`   s   @rX   r  r    s        B B B B B B     < < < < < <B B B B B B BrS   r  c                       d          } | j         rLt                                                    }                    dd||                                                          d S )NAdd)titler
  r   r  r  )r  r   r  insertr  )dialogrJ  r  r  r  s     rX   addz!Ticketer._make_table.<locals>.add  sr    ZeD999F~ S))++,,2U&--//RRRrS   c            	      *                                    } | sd S t          t                              | d                              } d|          }|j        r)                    | |                                                         d S )Nr  Edit)r  r
  r  r  )focusr.  zipr  r  r  )selectedr  r  r  r  r   r  s      rX   editz"Ticketer._make_table.<locals>.edit  s    zz||H #gtyy8'D'DEEFFFZfT&IIIF~ <		(6==??	;;;rS   c                  r                                     } | r                    |                          d S rU   )r  delete)r  r  r  s    rX   removez$Ticketer._make_table.<locals>.remove  s?    zz||H &H%%%rS   r  rp  r   r   rr  rs  r  r  r   Remover   rm  )rK   
LabelFrameTreeviewr   r   r  r   r  rs  r   CENTERheadingrH  r  tksdDialogr   Buttonrz  )r`   r}  r  r   lstr  wrapr   hrJ  rr  r  r  r  btnsr  r  r  s   ` `` `         @@@rX   _make_tablezTicketer._make_table  s   ~gD111|Dz!LLLmDTZHHHgC(((cg... 	$ 	$AKK")K,,,LLL####nn 	C 	CFAsKKrAcKBBBB		s"	---	N 	N 	N 	N 	N 	N 	N 	N 		B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B,	  	  	  	  	  	  	 	  	  	  	  	  	  	  	 	  	  	  	  	  	  y
4eS111661QR6PPP
4fd33388Qqr8RRR
4h777<<1SU<VVV				s	rS   c                   
 t          j        |                                           t          j        t
                    x| j        |<   fd
|D ]} 
|           
fd}fd}t          j        |          }	t          j        |	d|                              ddd           t          j        |	d	|                              dd
d           |	                                 d S )Nc                                                      d         }t          j        d          }|                    dd|d            || |                    d S )Nr   BorderFrame.TFrame)styler  r   )r  r  rr  rs  )	grid_sizerK   r   rz  )r   rJ  eltrO   functbls      rX   rp  z#Ticketer._make_list.<locals>.append  sb    "A)C';<<<CHH"21QH777Dc47#####rS   c                  B                                                  d S rU   )copy)rp  
new_valuess   rX   r  z Ticketer._make_list.<locals>.add  s#    F:??$$%%%%%rS   c                     t                                                    } t          j        dd| dz
  z            }|	|| dz
  k    rd S                     |d          d                                          |= d S )NDeletez-Input the index of the Claim to delete [0-%s]r   )r
  r   )rr  rs  )r   grid_slavesr  
askintegerdestroy)slavescountrJ  rO   r  s     rX   r  z#Ticketer._make_list.<locals>.delete  s    coo//00K?;QR?S  A
 yAa//OO!O,,Q/77999QrS   r  r  r   r  r  r  r   )	rK   r   r  r,  r-  r.  r/  r  rz  )r`   r}  r  r   fields_listr  r   r  r  r  rp  rO   r  s     `  `    @@@rX   
_make_listzTicketer._make_list  s8   i  


!,!8!>!>>
3$	$ 	$ 	$ 	$ 	$ 	$ 	$  	 	CF3KKKK	& 	& 	& 	& 	& 	&
	 
	 
	 
	 
	 
	 y!!
4eS111661QR6PPP
4h777<<1SU<VVV		rS   r   z<Q)iA  r   r   r   r   r       cAz%Y-%m-%d %H:%M:%S)rR   epochcustom_scalingstrfc                 l    | j                             d |                              dd          d         S )N r   r   )_TIME_FIELDi2reprr  r`   rz   s     rX   _pretty_timezTicketer._pretty_time  s0    &&tQ//66sA>>qAArS   c                 @    t          || j        j        z
  dz            S )Nr  )r   r  r  r  s     rX   r  zTicketer._utc_to_mstime  s     A(..#5666rS   c                     |                      t          j        || j        j                                                            S rU   )r  r   strptimer  r  r   r  s     rX   _time_to_intzTicketer._time_to_int  s<    ""a!1!677AACC
 
 	
rS   c                 Z    t          t          j        || j        j                            S rU   )r   r   r  r  r  r  s     rX   _time_to_asn1zTicketer._time_to_asn1  s#    $X%6q$:J:O%P%PQQQrS   c                 2   t          |t                    r)|                                dk    rt          dd          S t          |t                    r|                     |          }n|                     |          }t          |dz	  dz  |dz            S )Nr      )dwHighDateTimedwLowDateTimer   )rk  strr  r5   r  r  r  s     rX   r  zTicketer._time_to_filetime  s    a 	Q!''))w"6"6:ZPPPPa 	'!!!$$AA##A&&AGz1j.
 
 
 	
rS   c                 |    |j         dk    r|j        dk    rdS |                     |j         dz  |j        z             S )Nr  r  r  r   )r  r  r  r  s     rX   _filetime_totimezTicketer._filetime_totime)  sD    z))ao.K.K7  !"2b"8AO!KLLLrS   c                 J    |r|j         j        sdS |                                S )Nr   )r  r  summary)r`   sids     rX   _pretty_sidzTicketer._pretty_sid.  s*     	#17 	2{{}}rS   c                 6	                          |d          }|s7|j                            t          d                     t	                      }n|j        }                     |d                     |j                  fd                     |j	                  fd                     |j
                  fd                     |j                  fd                     |j                  fd                     |j                  fd	|j        j        j        j        d
         j                                        fd|j        j        j        j        d
         j                                        fd|j        j        j        j        d
         j                                        fd|j        j        j        j        d
         j                                        fd|j        j        j        j        d
         j                                        fd|j        j        j        j        d
         j                                        fdt-          |j                  fdt-          |j                  fdt-          |j                  fdt-          |j                  fg                                |dddgd |j        j        j        D                                             |dt-          |j                  fdt=          d                    d |j         j!        D                                                                 fd|j"        j        j        j        d
         j                                        fd|j#        j        j        j        d
         j                                        fd $                    |j%        j                  fdt-          |j&                  fg                                |d d!dg fd"|j'        r|j'        j        j        ng D                                             |d# $                    |j(        r|j(        j        nd           fg                                |d$ddgd% |j)        r|j)        j        j        ng D                        d S )&Nr   r   r-  r.  r/  r0  r1  r2  r3  r   r5  r6  r7  r8  r9  r=  r>  r?  r@  rA  r  r  c                 ^    g | ]*}t          |j                  t          |j                  f+S rh   r  r  r  rx   s     rX   r   z1Ticketer._getLogonInformation.<locals>.<listcomp>n  sA        Q\""C$5$56  rS   rE  r:  rS   c              3   $   K   | ]}|j         V  d S rU   r   rx   s     rX   r{   z0Ticketer._getLogonInformation.<locals>.<genexpr>z  s$       O OA O O O O O OrS   r;  r<  rF  rH  rJ  r  c                 v    g | ]5}                     |j        j                  t          |j                  f6S rh   )r  r  r  r  r  rL  s     rX   r   z1Ticketer._getLogonInformation.<locals>.<listcomp>  sJ        !!!%+..AL0A0AB  rS   rM  rN  c                 ^    g | ]*}t          |j                  t          |j                  f+S rh   r  rx   s     rX   r   z1Ticketer._getLogonInformation.<locals>.<listcomp>  sA        Q\""C$5$56  rS   )*rk  r^  rp  r<   r8   r  r  r  r-  r.  r/  r0  r1  r2  r3  r4  rw   r5  r6  r7  r8  r9  r  r=  r>  r?  r@  r  rA  rE  r   r}   r:  rO   r;  r<  r  rF  rH  rJ  rM  rN  )r`   ri  r}  	logonInfos   `   rX   _getLogonInformationzTicketer._getLogonInformation3  s   ++C<<	 	(KjAAABBB,..II!Id33I4GHHIt44Y5IJJK 5 5i6K L LM%)))*CDD
 ()))*EFF
 ))))*FGG
 $+28>qAGNNPP
 &-39!<BIIKK
 ")06<Q?ELLNN
 ")06<Q?ELLNN
 $+28>qAGNNPP
 )07=CAFLSSUU s9#7889#S)C%D%DE3y/001!3y'?#@#@AW,/	
 /	
 /	
` 	<( "+17  		
 	
 	
 	c)"5667$ O O1I1N O O OOO fhh	 ")06<Q?ELLNN
 &-4:@CIPPRR
 $$$Y%<%BCC &s9+G'H'HI)	
 	
 	
2 	L!    8A7JRI'-33PR  	
	
 
	
 
	
 	 -$$$;"	8>>! 		
 	
 	
 	<(  !1I.4::  		
 	
 	
 	
 	
rS   c                    |                      |d          }|s6|j                            t          d                     t	                      }|                     |d|                     |j                  fd|j        fg          S )Nr  r   rS  rT  )	rk  r^  rp  r<   r;   r  r  rS  rT  )r`   ri  r}  
clientInfos       rX   _getClientInfozTicketer._getClientInfo  s    ,,S*==
 	+KjAAABBB(**J  T..z/BCCD)
 
 	
rS   c           
         |                      |d          }|s6|j                            t          d                     t	                      }|                     |d|j        fd|j        fd|j        j	        r|j
        r|j        ndfd|j        j	        r!|j        r|                     |j                  ndfg          S )N   r   rU  rV  rW  r   	UpnDnsSid)rk  r^  rp  r<   rC   r  rU  rV  rX  S
SamNameLenrW  SidLenr  r  )r`   ri  r}  
upndnsinfos       rX   _getUPNDnsInfozTicketer._getUPNDnsInfo  s    ,,S*==
 	(KjAAABBB%J  
' *":;!').8.CJ&&	  !').8.?D$$Z^444	
 
 	
rS   c           	                                |d          }|rt          |t          j                  r+|j                            t          d                     g }nE|j                            d                              d          j                            d          } fd} 	                    ||d|t          g                     S )	N   r   r\  rZ  r  c           	                               | dt          |j                  fg|                               | dg dd |                    d          D             |           d S )Nr  r  r  r  c           
         g | ]}|                     d                                           t          |j                  d                    d |                     d                               d          D                       fS )r  r  c              3   >   K   | ]}|                                 V  d S rU   )rw   )ry   zs     rX   r{   zETicketer._getClientClaims.<locals>.func.<locals>.<listcomp>.<genexpr>  s>       ! ! ! HHJJ! ! ! ! ! !rS   r  r  )valueofrw   r  r  r}   )ry   r   s     rX   r   z;Ticketer._getClientClaims.<locals>.func.<locals>.<listcomp>  s     
 
 
  		$..00AF ! !%&YYx%8%8%@%@%P%P! ! !  
 
 
rS   )r  r  r  r  r  )r  rz   r  r`   s      rX   r  z'Ticketer._getClientClaims.<locals>.func  s    'Q-A)B)BC $     (((
 
 YY~66
 
 
 $      rS   )r  )r  r   r  r  )rk  rk  r   r^   r^  rp  r<   r  r  r  r1   )r`   ri  r}  clientClaimsclaimsArrayr  s   `     rX   _getClientClaimszTicketer._getClientClaims  s    ..sJ?? 	z,8JKK 	KjAAABBBKK "**844%%ww~.. 	 	 	 	 	4 ##444  
 
 	
rS   c                 ^   |                      |d          }|s8|j                            t          d                     t	          d          }t          |j        d                                       d          }i | j        d<   | 	                    |ddg|| j        d                    d S )	N   r   r   )rX  +pacAttributesr  PAC_WAS_GIVEN_IMPLICITLY)
rk  r^  rp  r<   r9   r  rX  r  r/  r  )r`   ri  r}  r  r   s        rX   _getPACAttributeszTicketer._getPACAttributes  s    //Z@@ 	9KjAAABBB/a888MM'*++11#66&(
?##* J'	
 	
 	
 	
 	
rS   c                     |                      |d          }|s6|j                            t          d                     t	                      }|                     |d|                     |j                  fg          S )N   r   ReqSid)rk  r^  rp  r<   r=   r  r  r  )r`   ri  r}  pacRequestors       rX   _getPACRequestorzTicketer._getPACRequestor  s    ..sJ?? 	+KjAAABBB(??L  x!1!1,2B!C!CDE
 
 	
rS   c                    |                      |d          }|s6|j                            t          d                     t	                      }|                     |d|j        t          |j                  ndfdt          |j	                  
                                fd|j        
                                fg          S )N   r   SRVSignatureTyper   SRVSignatureSRVRODCIdentifierrk  r^  rp  r<   r>   r  rP  r  r   rQ  rw   rR  )r`   ri  r}  serverChecksums       rX   _getServerChecksumzTicketer._getServerChecksum       00jAA 	2KjAAABBB/11N   '%3? 4555	  >+C!D!D!K!K!M!MN$n&C&J&J&L&LM	
 
 	
rS   c                    |                      |d          }|s6|j                            t          d                     t	                      }|                     |d|j        t          |j                  ndfdt          |j	                  
                                fd|j        
                                fg          S )Nr  r   KDCSignatureTyper   KDCSignatureKDCRODCIdentifierr,  )r`   ri  r}  kdcChecksums       rX   _getKDCChecksumzTicketer._getKDCChecksum3  s    --c:>> 	/KjAAABBB,..K   '"0< 1222	  ;+@!A!A!H!H!J!JK$k&@&G&G&I&IJ	
 
 	
rS   c                    |                      |d          }|s6|j                            t          d                     t	                      }|                     |d|j        t          |j                  ndfdt          |j	                  
                                fd|j        
                                fg          S )Nr  r   TKTSignatureTyper   TKTSignatureTKTRODCIdentifierr,  )r`   ri  r}  ticketChecksums       rX   _getTicketChecksumzTicketer._getTicketChecksumF  r/  rS   c                    |                      |d          }|s6|j                            t          d                     t	                      }|                     |d|j        t          |j                  ndfdt          |j	                  
                                fd|j        
                                fg          S )N   r   EXKDCSignatureTyper   EXKDCSignatureEXKDCRODCIdentifierr,  )r`   ri  r}  exkdcChecksums       rX   _getExtendedKDCChecksumz Ticketer._getExtendedKDCChecksumY  s    //Z@@ 	1KjAAABBB.00M   )$2> 3444	 "9]-D#E#E#L#L#N#NO&(D(K(K(M(MN	
 
 	
rS   c           
      !    t           t          d                               |||          }|j        j        d         j        d         j        d         j        }t          j                    }|                    d           t          |          }|j	        }t          j        |d          }	t          j        |d          }
t          j        |d|j        	                              dd
d           t          j                    }|                    d           |                    ddd           t          j        |	dd          }|                    dd           |                    d                              |          }i  j        d<                        |t0          | j        d                    t          j        |	dd          }|                    dd                                |dt5          |j        j        j                  fdt=          |j        j        j                                                   fg                                |	d|j!        j                                         fg           t          j        |	dd          }|                    dd                                |dt5          |j"        j#        j                  fg            $                    |ddgd |j"        j%        D                        t          j        |	d d          }|                    dd                                |d!t5          |j&        j'        j                  fd"|j&        j(        j                                         fg                                |	d#|j)        j*        +                    d$          fd%|j,        j*        +                    d$          fd&|j-        j*        +                    d$          fd'|j.        j*        +                    d$          fg           t          j        |
d(d          }|                    dd            /                    ||           t          j        |
d)d          }|                    dd            0                    ||           t          j        |
d*d          }|                    dd            1                    ||           t          j        |
d+d          }|                    dd            2                    ||           t          j        |
d,d          }|                    dd            3                    ||           t          j        |
d-d          }|                    dd            4                    ||           t          j        |
d.d          }|                    dd            5                    ||           t          j        |
d/d          }|                    dd            6                    ||           t          j        |
d0d          }|                    dd            7                    ||           t          j        |
d1d          }|                    dd            8                    ||           |	                    ddt           j9        2           |
                    d
dt           j9        2           |                    d3d4d56           |:                                 i dtw          d7<                     fd8t0          D                       d9t{          t0                     d:z  z  z             dt}          t           j        d         @                                                    t          t           j        d         @                                                    d;dt           j        d         @                                          dd<  j        d         D             t}          t           j        d         @                                                    d=d# D                     j        d#         @                                          d% D                     j        d%         @                                          d& D                     j        d&         @                                          d' D                     j        d'         @                                          d> E                     j        d?         @                                          d@ E                     j        dA         @                                          dB E                     j        dC         @                                          dD E                     j        dE         @                                          dF E                     j        dG         @                                          dH E                     j        dI         @                                          dJ j        dK         @                                dL j        dM         @                                dN j        dO         @                                i dP j        dQ         @                                dR j        dS         @                                dT j        dU         @                                dVt           j        dW         @                                          dX j        dY         @                                dZ j        d[         @                                d\t           j        d]         @                                          d^t           j        d_         @                                          d`t           j        da         @                                          dbt           j        dc         @                                          ddde  j        df         D             dgt           j        dh         @                                          di j        dj         @                                dkt           j        dl         @                                          dmdn  j        do         D             dp j        dq         @                                drds  j        dt         D             i du F                     j        dv         @                                          dw j        dx         @                                dyddz j        d{         @                                d| j        d}         @                                d~ j        d         @                                d j        d         @                                dd  j        d         G                                D             dd<                     fddD                       d j        d         @                                dt           j        d         @                                          dt           j        d         @                                          dt           j        d         @                                          dt           j        d         @                                pd          dt           j        d         @                                          dt           j        d         @                                          dt           j        d         @                                pd          t           j        d         @                                          t           j        d         @                                          t           j        d         @                                pd          t           j        d         @                                          t           j        d         @                                          d} H                    |          }|	||j        } I                    |||           dS )z6
        Edit a Kerberos ticket using the GUI
        Nz=tkinter is not installed (`apt install python3-tk` on debian))r   rX  r   zTicketer++ (@secdev/scapy)r  )paddingQuitr  r   r   )rs  rr  
columnspanaltr  groover  )reliefr   rX  )rp  r  rz   )r   r  r   r   r   r   r   r   r   r   r  c                 B    g | ]}|j                                         fS rh   )r   rw   rx   s     rX   r   z(Ticketer.edit_ticket.<locals>.<listcomp>  s%    ===1aellnn===rS   rc  r  r  r   z UTCr   r   r   r  r$  r%  r&  r'  r(  zServer checksumzKDC checksumzTicket checksumzExtended KDC checksum)rs  rr  rt  topr   Tr   r   c              3   j   K   | ]-}j         d          |                                         rdndV  .dS )r   r   0Nr/  r  rL  s     rX   r{   z'Ticketer.edit_ticket.<locals>.<genexpr>W  sU        EF4:g.q15577@CCS     rS   rM  r   r   c                 8    g | ]}t          |d                    S )r   )r   rx   s     rX   r   z(Ticketer.edit_ticket.<locals>.<listcomp>b  s2       23'!--  rS   r  r  r-  r  r.  r  r/  r  r0  r  r1  r  r2  r  r3  r  r5  r  r6  r  r7  r  r8  r  r9  r  r:  r  r;  r  r<  r  r=  r  r>  r  r?  r  r@  r  c                 d    g | ]-}t          |d                    t          |d                   d.S r   r   r  r  rx   s     rX   r   z(Ticketer.edit_ticket.<locals>.<listcomp>  sK       
  #&ad))"%ad))   rS   rA  r  rE  r  rF  r  rH  r  c                 J    g | ] }|d          t          |d                   d!S )r   r   r  r  rx   s     rX   r   z(Ticketer.edit_ticket.<locals>.<listcomp>  sE       
  Q4"%ad))   rS   rJ  r  rM  r  c                 d    g | ]-}t          |d                    t          |d                   d.S rQ  r  rx   s     rX   r   z(Ticketer.edit_ticket.<locals>.<listcomp>  sK     $ $ $
  #&ad))"%ad)) $ $ $rS   rN  r  rS  r  rT  r  r  rU  r  rV  r  rW  r  r  r  c                     g | ]<}t          |d                                                    d |d         D             d=S )r  c                 X    g | ]'}|d          t          |d                   |d         d(S )r   r   r   r  r  r  s     rX   r   z3Ticketer.edit_ticket.<locals>.<listcomp>.<listcomp>  sL     % % % 	 #%Q%$'1JJ,.qE % % %rS   r  r  )r   r  r  s     rX   r   z(Ticketer.edit_ticket.<locals>.<listcomp>  sq            ),B/A,B,F,F,H,H(I(I% % #%^"4% % %
 
     rS   r  r  r  c              3   f   K   | ]+}j         d          |                                         '|V  ,dS )r  NrN  rL  s     rX   r{   z'Ticketer.edit_ticket.<locals>.<genexpr>  sU       ! !:o.q15577!! ! ! ! ! !rS   )r  r   r  r$  r  r)  r  r*  r  r+  r  r1  z-1r  r2  r  r3  r  r7  r8  r9  r>  r?  r@  r  rX  )Jr   rP  rb  re  rb  ra  Tkr  r   r   rK   r   r  r  rz  Style	theme_user   r  r  	get_field	get_flagsr/  r  r/   r  r  r   r   r   r   r   rw   r   r   r   r  r   rc  r  r  r   pretty_timerstripr   r   r   r  r	  r  r  r!  r&  r.  r5  r;  rB  Nmainloopr   r}   r   r	   r   r  r
   r   r   r  r  r  r  r  ri  )r`   rJ  r   rX  r   ri  rootscrollFramer  	tk_tickettk_pacttkstyletk_flagsr   tk_keytk_cnametk_transitedtk_logoninfotk_clientinfotk_upndnsinfotk_clientclaimstk_pacattributestk_pacrequestortk_serverchksumr  s   `                        rX   edit_ticketzTicketer.edit_ticketl  s    :O   ooaSto44#'*1!48;B uww

/000 "$''"Ic1---	3***
3VT\:::??! 	@ 	
 	
 	
 9;;5!!!  	 	
 	
 	
 >&
 
 

 	3Q'''g&&0055 
7HmUDJw<OPPP &
 
 

 	1%%%C 3445cg.233::<<		
 		
 		
 	)x1F1F1H1H&I%JKKK >&
 
 

 	3Q''' 	*.//	
 	
 	
 	I==	(<===		
 	
 	
 ~&
 
 

 	s+++ ,011
 M*.5577
	
 	
 	
  	S\5<<VDDEcm7>>vFFGCK3::6BBCcm7>>vFFG		
 	
 	
 ~$&
 
 

 	s+++!!#|444 5&
 
 

 	!,,,C/// *&
 
 

 	!,,,C/// .,&
 
 

 	#A...c?333 >!&
 
 

 	3Q///s$4555 . &
 
 

 	#A...c?333 ."&
 
 

 	#A..._555 .&
 
 

 	#A...S/222 ."&
 
 

 	#A..._555 .(&
 
 

 	#A...$$S/::: 	aQrt4441!BD111e&>>>{
_    JW     #m,,,r123 {
 'DJy,A,E,E,G,G(H(HII'	$*Z2H2L2L2N2N(O(OPP {
 )$*X*>*B*B*D*DEE{
  7;z,7O   )TZ
-C-G-G-I-I)J)JKK	 {
& **4:j+A+E+E+G+GHH'{
( ++DJ{,C,G,G,I,IJJ){
* t))$*Y*?*C*C*E*EFF+{
, ++DJ{,C,G,G,I,IJJ-{
2 D224:k3J3N3N3P3PQQ3{
4 T33DJ|4L4P4P4R4RSS5{
6 d44TZ5N5R5R5T5TUU7{
8 !$"8"8
,-1133# #9{
> #D$:$:
./3355% %?{
D $T%;%;
/04466& &E{
J 
? ; ? ? A AK{
L 4:j15577M{
N dj7;;==O{
 {
P dj7;;==Q{
R 
? ; ? ? A AS{
T $TZ0D%E%I%I%K%KU{
V  4:6F+G+K+K+M+M!N!NW{
X dj7;;==Y{
Z !$*->"?"C"C"E"E[{
\ SL!9!=!=!?!?@@]{
^ "3tz2D'E'I'I'K'K#L#L_{
` TZ1557788a{
b  TZ0@%A%E%E%G%G!H!Hc{
d   
 J/  e{
r C
; 7 ; ; = =>>s{
t 
? ; ? ? A Au{
v $S4H)I)M)M)O)O%P%Pw{
x   
 K0  y{
F (4L)M)Q)Q)S)SG{
H " $ $
 $67$ $ $I{
 {
 {
X 4,,TZ
-C-G-G-I-IJJY{
Z tz&)--//[{
^ A_{
` $*U+//11a{
b #DJ$?$C$C$E$Ec{
d dj37799e{
f $*[15577g{
j      *^4;;==     k{
H  ! ! ! !J! ! !  I{
T tz(+//11U{
X DJ/A$B$F$F$H$H I IY{
Z Idj&@&D&D&F&FGG[{
\  4:6I+J+N+N+P+P!Q!Q]{
` DJ/A$B$F$F$H$H$PD Q Qa{
b Idj&@&D&D&F&FGGc{
d  4:6I+J+N+N+P+P!Q!Qe{
h  TZ0B%C%G%G%I%I%QT!R!Ri{
 {
j 'tz.'A'E'E'G'GHH"+DJ7J,K,O,O,Q,Q"R"R"%dj1E&F&J&J&L&L&TPT"U"U'
3C(D(H(H(J(JKK#,TZ8M-N-R-R-T-T#U#Uu{
 {
 {
x   ''<CO7D1c-----rS   c                    |j         j        d         j        j        d         j        }|                                }|j         j        d         j        j        d         j        }i i }t	          |j                  D ]\  }	}
|
j        dv r|	|
j        <   |j        |	         j        ||
j        <   	 dt          |j        |	         j                 j
        z  |j        |	         _        n# t          $ r t          d          w xY wd|j        |	         _        d|j        |	         _        t!          fddD                       rt          d          |                     ||d	         |
          }|                     dd                    |                    d          dd         dz            z   |d         |
          }dv rzd|j         j        d         j        j        d         _        |                    dt+          |                    x|j        d                  _        }||j        d                  _        dv rS|                    dt+          |                    x|j        d                  _        }||j        d                  _        |                    dt+          |                    x|j        d	                  _        }|                    d|          |j        d                  _        |S )z(
        Resign a ticket (priv)
        r   )r(  r  r  r=      z!Unknown/Unsupported signatureTypeNc              3       K   | ]}|vV  	d S rU   rh   )ry   rz   sig_is     rX   r{   z*Ticketer._resign_ticket.<locals>.<genexpr>  s'      @@!q~@@@@@@rS   )r(  r  z/Cannot sign PAC: missing a compulsory signaturer(  )rU  rX  zkrbtgt/r|   r   r   r  r  r  r=  )re  rb  ra  r  rH  r^  r!  r_  rP  rJ   macsizerQ  KeyErrorr<  cbBufferSizeOffsetanyrZ  r}   r  make_checksumr   )r`   r   rW  rX  rd  rpactmp_tktri  sig_typer  rj  key_srvkey_kdc
ticket_sigextended_kdc_sig
server_sigru  s                   @rX   re  zTicketer._resign_ticket  s%   
 $(+26q9@((**'+A.59!<C,, 	. 	.FAszMMM$%cj!'*|A'D$J*S\!_-J"K"SS LO--   J J J$%HIIIJ/3Q,)-Q& @@@@'?@@@@@ 	PNOOO ##z* $ 
 

 ##3!3a!7888z* $ 
 
   ELG%)!,37:A (/'<'<E'NN( (DMj!* 9CCLz*+5  .5-B-BE#JJ. .DMj!* 9ICLz*+5 CJBWBWc

C
 C
 	
eJ'(2Z 6=5J5J
6
 6
eJ'(2 
s   /5C%%C?c                 h    |                      ||          }|                     ||d||           dS )a  
        Resign a ticket from CCache

        :param hash: the hash to use to compute the Server Signature
        :param kdc_hash: the hash to use to compute the KDC signature
                         (if None, not recomputed unless its a TGT where is uses hash)
        rW  Tr  N)rb  ri  )r`   rJ  rX  rd  r   s        rX   resign_ticketzTicketer.resign_ticket,  s>     ooado++1c$THMMMMMrS   c                 \    t          |f||||d|}|sdS |                     |           dS )z
        Request a Kerberos TGT and add it to the local CCache

        See :func:`~scapy.layers.kerberos.krb_as_req` for the full documentation.
        )ipr   passwordrp   N)r(   rt  )r`   r|  r  r   r  rp   r  rq  s           rX   request_tgtzTicketer.request_tgt7  sJ     WxuWWPVWW 	FrS   c           
          |                      |          \  }}	}
}t          |
|f|	|||||d|}|sdS |                     |           dS )z
        Request a Kerberos TS and add it to the local CCache using another ticket

        :param i: the ticket/sessionkey to use in the TGS request

        See :func:`~scapy.layers.kerberos.krb_tgs_req` for the the other parameters.
        )r   r   r  renewrp   additional_ticketsNrv  r)   rt  )r`   rJ  rW  r  r  rp   r  r  r   r   r|  _rq  s                rX   
request_stzTicketer.request_stC  s     &*__Q%7%7"
C

 "1

 

 

 

  	FrS   c                 b    |                      |          \  }}}}t          ||d||           dS )zz
        Use kpasswd in 'Set Password' mode to set the password of an account.

        :param i: the TGT to use.
        T)r|  	targetupnsetpasswordr   r   N)rv  r'   )r`   rJ  r  r   r   r|  r  s          rX   
kpasswdsetzTicketer.kpasswdset_  sN     &*__Q%7%7"
C	
 	
 	
 	
 	
 	
rS   c           	          |                      |          \  }}}}t          ||f|||d|d|}	|	sdS |                     |	|           dS )z
        Renew a Kerberos TGT or a TS from the local CCache using a TGS-REQ

        :param i: the ticket/sessionkey to renew.
        T)r   r   r  r  r  N)rr  r  )
r`   rJ  r  r  r  r   r   r|  rW  rq  s
             rX   r  zTicketer.renewn  s     (,q'9'9$
C	
 "1	
 	
 	
 	
  	Fa(((((rS   rU   )F)NNN)NN)FNN)NNNN)1rd   re   rf   r   r9  r>  rL  rS  rZ  rb  ri  rt  rv  r}  r  r  r  r  rk  r  r  r  r  r   r  r  r  r  r  r  r  r  r  r	  r  r  r!  r&  r.  r5  r;  rB  rq  re  r  r  r  r  r  rh   rS   rX   r*  r*  Y  sm       : : :, , ,	0 	0 	0 	0* * * *X     4   * 
  
  
  
D,1 ,1 ,1 ,1\

 

 



 

 

%
 %
 %
 %
NH H HT   4x
 x
 x
t  	. 	. 	. 	.  E E E EN! ! !F ,
###   KB B B7 7 7
 
 

R R R

 

 

M M M
  
}
 }
 }
~
 
 

 
 
2,
 ,
 ,
\
 
 
"
 
 

 
 
&
 
 
&
 
 
&
 
 
&g. g. g. g.RU U U Un	N 	N 	N 	N
 
 
 
 U$2   8
 
 
 
 2 ) ) ) ) ) )rS   r*  )m__doc__r   r   r   r,  r  r  r  r   scapy.asn1.asn1r   r   r   r	   r
   scapy.compatr   r   scapy.configr   scapy.errorr   scapy.fieldsr   r   r   r   r   r   r   r   r   r   r   scapy.packetr   scapy.utilsr   scapy.layers.dcerpcr   scapy.layers.kerberosr   r   r   r    r!   r"   r#   r$   r%   r&   r'   r(   r)   r*   r+   r,   r-   r.   r/   scapy.layers.msrpce.mspacr0   r1   r2   r3   r4   r5   r6   r7   r8   r9   r:   r;   r<   r=   r>   r?   r@   rA   rB   rC   rD   rE   scapy.layers.smb2rF   rG   scapy.libs.rfc3961rH   rI   rJ   tkinterr   tkinter.simpledialogsimpledialogr  rK   rP  rM   rj   r   r   r   r   r   r   r   r   r   r*  rh   rS   rX   <module>r     s    3 2 2 2 2 2 2 2 2 2        				              . - - - - - - -       ' ' ' ' ' '                                 # # # # # # ( ( ( ( ( (                                         *                                                 2       
 ? > > > > > > > > >''''''   	BBB" " " " "6 " " "" " " " "& " " "." " " " "& " " "" " " " "v " " "" " " " " " " "" " " " " " " "" " " " " " " ">5 >5 >5 >5 >56 >5 >5 >5B    V    >77 77 77 77 77bh 77 77 77zj) j) j) j) j) j) j) j) j) j)s   C/ /C98C9