1   
 2   
 3   
 4   
 5   
 6   
 7   
 8   
 9   
10   
11   
12   
13   
14   
15   
16   
17   
18   
19   
20   
21   
22   
23   
24  from rekall.plugins.linux import common 
25   
26   
28      """Find hidden processes comparing various process listings.""" 
29   
30      __name = "psxview" 
31   
32      METHODS = common.LinProcessFilter.METHODS + [ 
33          "PidHashTable", 
34      ] 
35   
36      __args = [ 
37          dict(name="method", choices=list(METHODS), type="ChoiceArray", 
38               default=list(METHODS), help="Method to list processes.", 
39               override=True), 
40      ] 
41   
43          headers = [('Offset(V)', 'virtual_offset', '[addrpad]'), 
44                     ('Name', 'name', '<20'), 
45                     ('PID', 'pid', '>12'), 
46                    ] 
47   
48          for method in self.plugin_args.method: 
49              headers.append((method, method, "%s" % len(method))) 
50   
51          renderer.table_header(headers) 
52   
53          for process in self.filter_processes(): 
54              row = [process.obj_offset, process.comm, process.pid] 
55   
56              for method in self.plugin_args.method: 
57                  row.append(process.obj_offset in 
58                             self.session.GetParameter("pslist_%s" % method)) 
59   
60              renderer.table_row(*row) 
  61   
62   
64      name = "pslist_PidHashTable" 
65   
67          seen = set() 
68          pidhashtable_plugin = self.session.plugins.pidhashtable() 
69          for task in pidhashtable_plugin.filter_processes(): 
70              if task.obj_offset not in seen: 
71                  seen.add(task.obj_offset) 
72   
73          return seen 
  74