
    9c                     6    d dl Zd dlmZmZmZ  G d de      Zy)    N)ModuleOptionKwargc                      e Zd ZdZdZ edddddd       ed	d
dg deej                   d       edddddd       edddg dedd       eddddid       eddddid       edd d!g ieej                   d"       ed#d$d%g ieej                   d&      gZ e	d'd()       e	dd()       e	d%g )       e	d!g )       e	d*g )       e	d+d()       e	d,d()       e	dd()       e	d-g )      g	Z
d.Zd/ Zd0 Zd1 Zd2 Zy3)4	SignaturezSignature Scan
   B	signatureT)enabledexplicit_signature_scanz.Scan target file(s) for common file signatures)shortlongkwargsdescriptionRraw)r   	raw_bytesz7Scan target file(s) for the specified sequence of bytes)r   r   r   typedtyper   Aopcodes)r   search_for_opcodesz;Scan target file(s) for common executable opcode signaturesmmagic)r   magic_filesfilez"Specify a custom magic file to usebdumb	dumb_scanz Disable smart signature keywordsIinvalidshow_invalidzShow results marked as invalidxexcludeexclude_filtersz Exclude results that match <str>yincludeinclude_filtersz"Only show results that match <str>r   F)namedefaultr   r   r   r   z%s    %dc                    d | _         | j                  rY| j                  j                  j                  j
                  | j                  j                  j                  j
                  g| _        | j                  s| j                  r| j                  rh| xj                  | j                  j                  j                  j                  | j                  j                  j                  j                  z   z  c_        t        j                  j                  j                  | j                  | j                  | j                         | _
        | j                  r{g }| j                  D ]  }|j#                  d|d|d        t        j                  j$                  j'                  dt)        |      z         | j                  j+                  |       | j                  rkt        j                  j$                  j'                  dt)        | j                        z         | j                  D ]  }| j                  j-                  |        dt/        | j                  j0                        g| _        y )N)r'   r$   r!   z0    string    z    Raw signature ()zParsing raw signatures: %szLoading magic files: %szSignatures:)one_of_manyr   configsettingsuserbinarchsystemr   r   r   r   binwalkcoreMagicr(   r%   r"   appendcommondebugstrparseloadlen
signaturesVERBOSE)selfraw_signaturesr   fs       ;/usr/lib/python3/dist-packages/binwalk/modules/signature.pyinitzSignature.initE   s    ""$$))11$$++33 D   D<X<X 4 4 9 9 ? ?$$++11!2 2 \\''--d6J6J6:6J6J6:6G6G . I

 >>N!^^ j	%%S\^g&hijLL%%&BSEX&XYJJ^, LL%%&?#dFVFVBW&WX%% #

"# &s4::+@+@'AB    c                 t   | j                   rd|_        n|j                  r|j                  sd|_        |j                  r7|j                  |j                  z   |j
                  j                  kD  rd|_        |j                  r7|j                  |j                  z   |j
                  j                  kD  rd|_        t        |d      r |j                  |j                  k7  rd|_        |j                  rG|j                  | j                  k(  rd|_        y|j                  r|j                  | _
        yd| _
        yy)z6
        Called automatically by self.result.
        TFlocationN)r"   validr   sizeoffsetr   jumphasattrrF   idr-   displaymany)r?   rs     rB   validatezSignature.validatek   s     AGWW==vv166AHH,;vv166AHH,;q*%1::+A77 ttt'''!	#$44 #'  rD   c                    d | _         | j                  j                          	 |j                         \  }}|dk  ry d}|j	                         |z
  }||j
                  z
  | j                  _        | j                  j                  ||      D ]  }|j
                  |k  r|j
                  |j                  z   }||z   |_        ||_
        | j                  |       |j                  dk(  r|j                  |_        |j                  s||j                  dkD  s| j                   r|j
                  |j                  z   }||j                  z   }||j	                         k\  s|j#                  |j
                  |j                  z           n j)NT   r   )rO   )r-   r   reset
read_blocktellrI   status	completedscanadjustr   resultendrH   rJ   rG   r   seek)	r?   fpdatadlencurrent_block_offsetblock_startrO   relative_offsetabsolute_jump_offsets	            rB   	scan_filezSignature.scan_file   sS   

==?LT4ax#$ '')d*K$/"))$;DKK! ZZ__T40 %
 8822 #$((QXX"5 '8 
 a  55D=WWAF 77qvvz$..+,88aff+<(+:QVV+C( ,rwwy8166 12K% rD   c                     t        | j                  d       D ]3  }| j                          | j                  |       | j	                          5 y )N)iter	next_fileheaderrd   footer)r?   r]   s     rB   runzSignature.run   s:    t~~t, 	BKKMNN2KKM	rD   N)__name__
__module____qualname__TITLEORDERr   listr9   CLIr   KWARGSVERBOSE_FORMATrC   rP   rd   rj    rD   rB   r   r      s   EE 	S"&4HK	M 	S"&R8\\T	V 	S"&dCX	Z 	S"&r:?	A 	S"D)=	? 	S%t,;	= 	S("-\\=	? 	S("-\\?	AG)CX 	9e,>51$b1$b1;+'7,e<;.="-
F  N$CL(:3jrD   r   )binwalk.core.magicr3   binwalk.core.moduler   r   r   r   rt   rD   rB   <module>rw      s     5 5z zrD   