1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 """This module implements renderers specific to virtualization."""
20
21 from rekall.ui import text
22 from rekall.ui import json_renderer
23 from rekall.plugins import hypervisors
24 from rekall.plugins.renderers import data_export
25 from rekall.plugins.renderers import json_storage
26
27
28 -class VTxPagedMemoryObjectRenderer(
29 json_storage.BaseAddressSpaceObjectRenderer):
30 renders_type = "VTxPagedMemory"
31
32 - def GetState(self, item, **options):
33 state = super(VTxPagedMemoryObjectRenderer, self).GetState(
34 item, **options)
35 state["dtb"] = item.dtb
36 state["ept"] = item.ept
37
38 return state
39
41 renders_type = "VirtualMachine"
42
57
59 if vm.get("_quick"):
60 return "VM [?? vCORE(s), {1}]".format(vm.get("guest_arch"))
61 else:
62 return "VM [{0} vCORE(s), {1}]".format(
63 vm.get("num_cores"), vm.get("guest_arch"))
64
65
67 renders_type = "VirtualMachine"
68
70 super_obj = super(VirtualMachine_JsonObjectRenderer, self)
71 state = super_obj.DecodeFromJsonSafe(state, options)
72
73 vm = hypervisors.VirtualMachine(host_rip=state.get("host_rip"),
74 ept=state.get("ept"),
75 parent=state.get("parent"),
76 name=state.get("name"),
77 session=state.get("base_session"))
78
79 vm.vmcss = state.get("vmcss", [])
80 vm.vmcs_validation = state.get("vmcs_validation", {})
81
82
83 for vm in state.get("virtual_machines", []):
84 unserialized_vm = self.DecodeFromJsonSafe(vm, options)
85 unserialized_vm.parent = vm
86 vm.virtual_machines.update([unserialized_vm])
87 return vm
88
90 state = super(VirtualMachine_JsonObjectRenderer, self).GetState(
91 item, **options)
92 state["_quick"] = options.pop("quick", False)
93 state["ept"] = item.ept
94 state["host_rip"] = item.host_rip
95 state["name"] = item.name
96 state["base_session"] = item.base_session
97
98 state["vmcs_validation"] = item.vmcs_validation
99
100 state["vmcss"] = list(item.vmcss)
101 state["virtual_machines"] = list(item.virtual_machines)
102 return state
103
104
106 """Virtualization nodes can be Hypervisors, VirtualMachine or VMCS."""
107 renders_type = "VirtualizationNode"
108 renderers = ["TextRenderer", "WebConsoleRenderer", "TestRenderer"]
109
110 - def __init__(self, *args, **options):
111 self.quick = options.pop("quick", False)
112 super(VirtualizationNode_TextObjectRenderer, self).__init__(
113 *args, **options)
114
115 self.table = text.TextTable(
116 columns=[
117 dict(name="description"),
118 dict(name="name", width=20),
119 dict(name="valid", type="bool"),
120 dict(name="ept")],
121 renderer=self.renderer,
122 session=self.session)
123
125 result = text.Cell("Description", width=40)
126 result.append_line("-" * result.width)
127
128 return result
129
130 - def render_row(self, target, **options):
131 if isinstance(target, hypervisors.VirtualMachine):
132 return text.Cell("VM [{0:s} vCORE(s), {1:s}]".format(
133 (self.quick and "??") or str(target.num_cores),
134 target.guest_arch))
135 elif "VMCS" in target.__class__.__name__:
136 return text.Cell("VMCS @ {0:08X} vCORE {1:x}".format(
137 target.obj_offset, target.m("VPID")))
138