1   
  2   
  3   
  4   
  5   
  6   
  7   
  8   
  9   
 10   
 11   
 12   
 13   
 14   
 15   
 16   
 17   
 18   
 19   
 20  """ 
 21  @author:       Bradley L Schatz 
 22  @license:      GNU General Public License 2.0 or later 
 23  @contact:      bradley@schatzforensic.com.au 
 24   
 25  This file provides support for windows Vista. 
 26  """ 
 27   
 28   
 29   
 30  from rekall.plugins.overlays.windows import common 
 31   
 32   
 33  vista_overlays = { 
 34      '_EPROCESS': [None, { 
 35           
 36          'RealVadRoot': lambda x: x.VadRoot.BalancedRoot 
 37      }], 
 38   
 39      '_MMADDRESS_NODE': [None, { 
 40          'Tag': [-4, ['String', dict(length=4)]], 
 41      }], 
 42   
 43      '_MMVAD_SHORT': [None, { 
 44          'Tag': [-4, ['String', dict(length=4)]], 
 45          'Start': lambda x: x.StartingVpn << 12, 
 46          'End': lambda x: ((x.EndingVpn + 1) << 12) - 1, 
 47          'Length': lambda x: x.End - x.Start + 1, 
 48          'CommitCharge': lambda x: x.u.VadFlags.CommitCharge, 
 49      }], 
 50   
 51      '_MMVAD': [None, { 
 52          'Tag': [-4, ['String', dict(length=4)]], 
 53          'ControlArea': lambda x: x.Subsection.ControlArea, 
 54          'Start': lambda x: x.StartingVpn << 12, 
 55          'End': lambda x: ((x.EndingVpn + 1) << 12) - 1, 
 56          'Length': lambda x: x.End - x.Start + 1, 
 57          'CommitCharge': lambda x: x.u.VadFlags.CommitCharge, 
 58      }], 
 59   
 60      '_MMVAD_LONG': [None, { 
 61          'Tag': [-4, ['String', dict(length=4)]], 
 62          'ControlArea': lambda x: x.Subsection.ControlArea, 
 63          'Start': lambda x: x.StartingVpn << 12, 
 64          'End': lambda x: ((x.EndingVpn + 1) << 12) - 1, 
 65          'Length': lambda x: x.End - x.Start + 1, 
 66          'CommitCharge': lambda x: x.u.VadFlags.CommitCharge, 
 67      }], 
 68   
 69      "_CONTROL_AREA": [None, { 
 70          'FilePointer': [None, ['_EX_FAST_REF', dict( 
 71              target="_FILE_OBJECT")]], 
 72      }], 
 73      '_MM_SESSION_SPACE': [None, { 
 74           
 75           
 76          'ImageIterator': lambda x: x.ImageList.list_of_type( 
 77              "_IMAGE_ENTRY_IN_SESSION", "Link") 
 78      }], 
 79   
 80      '_IMAGE_ENTRY_IN_SESSION': [None, { 
 81          'ImageBase': lambda x: x.Address.v() & ~7 
 82      }] 
 83  } 
 84   
 85   
 87      """In win7 the base of all Vad objects in _MMADDRESS_NODE. 
 88   
 89      The Vad structures can be either _MMVAD_SHORT or _MMVAD or _MMVAD_LONG. At 
 90      the base of each struct there is an _MMADDRESS_NODE which contains the 
 91      LeftChild and RightChild members. In order to traverse the tree, we follow 
 92      the _MMADDRESS_NODE and create the required _MMVAD type at each point 
 93      depending on their tags. 
 94      """ 
 95   
 96       
 97      tag_map = {'Vadl': '_MMVAD_LONG', 
 98                 'VadS': '_MMVAD_SHORT', 
 99                 'Vad ': '_MMVAD', 
100                 'VadF': '_MMVAD_SHORT', 
101                 'Vadm': '_MMVAD_LONG', 
102                } 
 103   
104   
106      """A class for Windows 7 ETHREAD objects""" 
107   
109          """Return the EPROCESS that owns this thread""" 
110          return self.Tcb.Process.dereference_as("_EPROCESS") 
  111   
112   
123