
    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dS )	    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d
S )Bannersz8Attempts to identify potential linux banners in an image)   r   r   returnc                 0    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,B  
 	
    c              #     K   | j         j        | j        d                  }t          |t          j        j                  r| j         j        |j        d                  }|                     | j         |j                  D ]\  }}d||ffV  d S )Nr   memory_layerr   )contextr   config
isinstanceintelIntellocate_bannersr   )selflayeroffsetbanners       r   
_generatorzBanners._generator   s      #DK	$:;eV\/00 	FL'^(DEE"11$,
KK 	& 	&NFFff%%%%%%	& 	&r   r   
layer_namec              #     K   |j         |         }|                    |t          j        d                    D ]}|                    |d          }|                    d          }|dk    rR|d|                                         }d |D             }|s(t          j        |          t          |dd	
          fV  dS )z&Identifies banners from a memory images<   (Linux version|Darwin Kernel Version) [0-9]+\.[0-9]+\.[0-9]+)r   scanneri      r   Nc                     g | ]}|d v|	S )sL    #()+,;/-.0123456789:@ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz~ ).0chars     r   
<listcomp>z*Banners.locate_banners.<locals>.<listcomp>3   s=       jk k k k kr   zlatin-1?)encodingerrors)
r   scanr   RegExScannerreadfindstripr	   Hexstr)r   r   r$   r    r!   data
data_indexfaileds           r   r   zBanners.locate_banners#   s     
 z*jj)P  ! 
 
 	 	F ::fe,,D7++JA~~KZK(..00  $    &*622Cy5 5 5    #	 	r   c                 z    t          j        dt          j        fdt          fg|                                           S )NOffsetBanner)r   TreeGridr	   r5   r6   r#   )r   s    r   runzBanners.run>   s7    !()Hc?;T__=N=N
 
 	
r   N)__name__
__module____qualname____doc___required_framework_versionclassmethodr   r   configurationRequirementInterfacer   r#   r   ContextInterfacer6   r   r>   r)   r   r   r   r      s        BB"+
j&>&S!T 
 
 
 [
& & &  (9GJ   [4
 
 
 
 
r   r   )loggingtypingr   volatility3.frameworkr   r   r   #volatility3.framework.configurationr   volatility3.framework.layersr   volatility3.framework.renderersr	   	getLoggerr?   vollogpluginsPluginInterfacer   r)   r   r   <module>rR      s           ? ? ? ? ? ? ? ? ? ? < < < < < < 1 1 1 1 1 1 8 8 8 8 8 8		8	$	$2
 2
 2
 2
 2
j 0 2
 2
 2
 2
 2
r   