
    :%f                         d dl 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 d dlmZ  G d dej        j                  Zd	S )
    )IterableListTuple)
interfaces	renderers)requirements)format_hints)yarascan)pslistc                       e Zd 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eeef                  fd            Zd	 Zd
S )VmaYaraScanz4Scans all virtual memory areas for tasks using yara.)      r   )   r   r   returnc           
      t   t          j        dt          dd          t          j        dt          j        d          t          j        dt          j        d	          t          j        d
t          j	        d          t          j
        ddg d          g}t          j                                        }||z   S )Npidz9Process IDs to include (all other processes are excluded)T)nameelement_typedescriptionoptionalr   )r   r   r   )r   pluginversionr
   )r   r   r   yarascanner)r   	componentr   kernelzLinux kernel)Intel32Intel64AArch64)r   r   architectures)r   ListRequirementintPluginRequirementr   PsListr
   YaraScanVersionRequirementYaraScannerModuleRequirement get_yarascan_option_requirements)clsvmayarascan_requirementsyarascan_requirementss      a/home/panchajanya/Development/work/volatility3/volatility3/framework/plugins/linux/vmayarascan.pyget_requirementszVmaYaraScan.get_requirements   s     ( W	   *fmY   *(99   +"h.BI   **???  !$
 0 !) 1 R R T T %'???    c              #   r  K   t           j                            t          | j                            }t
          j                            | j                            dd                     }t
          j        	                    | j
        | j        d         |          D ]}|                                }|s| j
        j        |         }|                    | j
        t          j        |          |                     |                    D ])\  }}}}	dt!          j        |          |j        |||	ffV  *d S )Nr   r   )contextvmlinux_module_namefilter_func)rules)r1   scannersectionsr   )r
   r%   process_yara_optionsdictconfigr   r$   create_pid_filterget
list_tasksr1   add_process_layerlayersscanr'   get_vma_mapsr	   Hextgid)
selfr4   r3   taskproc_layer_name
proc_layeroffset	rule_namer   values
             r-   
_generatorzVmaYaraScan._generator4   sW     !66tDK7H7HII m55dkooeT6R6RSSM,,L $H 5# - 
 
 	 	D #4466O"  ,_=J 3=// ,5999**400 3B 3 3  .	4
  $V,,I     	 	r/   rD   c              #      K   | j         r6| j                                         D ]}|j        |j        z
  }|j        |fV  dS dS )a  Creates a map of start/end addresses for each virtual memory area in a task.

        Args:
            task: The task object of which to read the vmas from

        Returns:
            An iterable of tuples containing start and end addresses for each descriptor
        N)mmget_vma_itervm_endvm_start)rD   vmavm_sizes      r-   r@   zVmaYaraScan.get_vma_mapsV   sg       7 	.w++-- . .*s|3|W-----	. 	.. .r/   c                     t          j        dt          j        fdt          fdt
          fdt
          fdt          fg|                                           S )NOffsetPIDRule	ComponentValue)r   TreeGridr	   rA   r"   strbytesrJ   )rC   s    r-   runzVmaYaraScan.rung   sT    !<+,c"%  OO	
 	
 		
r/   N)__name__
__module____qualname____doc___required_framework_version_versionclassmethodr   r   configurationRequirementInterfacer.   rJ   staticmethodobjectsObjectInterfacer   r   r"   r@   r[    r/   r-   r   r      s        >>"+H@j&>&S!T @ @ @ [@>     D . 0.	%S/	". . . \. 

 

 

 

 

r/   r   N)typingr   r   r   volatility3.frameworkr   r   #volatility3.framework.configurationr   volatility3.framework.renderersr	   volatility3.pluginsr
   volatility3.plugins.linuxr   pluginsPluginInterfacer   rh   r/   r-   <module>rq      s   
 ) ( ( ( ( ( ( ( ( ( 7 7 7 7 7 7 7 7 < < < < < < 8 8 8 8 8 8 ( ( ( ( ( ( , , , , , ,c
 c
 c
 c
 c
*$4 c
 c
 c
 c
 c
r/   