
    Xfi	                         d dl Z d dlmZ d dlmZmZmZ d dlmZ d dl	m
Z
 d dlmZ  e j                  e      Z G d dej                   j"                        Zy)	    N)List)
interfaces	rendererslayers)requirements)scanners)format_hintsc                       e Zd ZdZdZedeej                  j                     fd       Z
d Zedej                  j                  defd       Zd	 Zy
)Bannersz8Attempts to identify potential linux banners in an image)   r   r   returnc                 2    t        j                  dd      gS )NprimaryzMemory layer to scan)namedescription)r   TranslationLayerRequirement)clss    W/home/panchajanya/Development/work/volatility3/volatility3/framework/plugins/banners.pyget_requirementszBanners.get_requirements   s"     44,B
 	
    c              #   X  K   | j                   j                  | j                  d      }t        |t        j                  j
                        r&| j                   j                  |j                  d      }| j                  | j                   |j                        D ]  \  }}d||ff  y w)Nr   memory_layerr   )contextr   config
isinstanceintelIntellocate_bannersr   )selflayeroffsetbanners       r   
_generatorzBanners._generator   s     ##DKK	$:;eV\\//0LL''^(DEE"11$,,

K 	&NFFff%%%	&s   B(B*r   
layer_namec              #   x  K   |j                   |   }|j                  |t        j                  d            D ]y  }|j	                  |d      }|j                  d      }|dkD  s,|d| j                         }|D cg c]  }|dvr|
 }}|rUt        j                  |      t        |dd	
      f { yc c}w w)z&Identifies banners from a memory images<   (Linux version|Darwin Kernel Version) [0-9]+\.[0-9]+\.[0-9]+)r   scanneri      r   NsL    #()+,;/-.0123456789:@ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz~zlatin-1?)encodingerrors)
r   scanr   RegExScannerreadfindstripr	   Hexstr)	r   r   r$   r    r!   data
data_indexcharfaileds	            r   r   zBanners.locate_banners#   s     
 z*jj))P ! 
 	F ::fe,D7+JA~KZ(..0 !%jk   &**62Cy5  #	s   A!B:$B:;B5B:-B:c                 z    t        j                  dt        j                  fdt        fg| j                               S )NOffsetBanner)r   TreeGridr	   r0   r1   r#   )r   s    r   runzBanners.run>   s5    !!(()Hc?;T__=N
 	
r   N)__name__
__module____qualname____doc___required_framework_versionclassmethodr   r   configurationRequirementInterfacer   r#   r   ContextInterfacer1   r   r:    r   r   r   r      so    B"+
j&>&>&S&S!T 
 
&  ((99GJ 4
r   r   )loggingtypingr   volatility3.frameworkr   r   r   #volatility3.framework.configurationr   volatility3.framework.layersr   volatility3.framework.renderersr	   	getLoggerr;   vollogpluginsPluginInterfacer   rD   r   r   <module>rO      sF      ? ? < 1 8			8	$2
j  00 2
r   