Skip to content

Commit c91dcdc

Browse files
authored
Merge pull request #151 from siliconblade/main
Update Volatility3 reader for framework version 2
2 parents 6683b76 + 9719723 commit c91dcdc

File tree

2 files changed

+29
-7
lines changed

2 files changed

+29
-7
lines changed

pypykatz/commons/readers/volatility3/volreader.py

+27-5
Original file line numberDiff line numberDiff line change
@@ -54,8 +54,9 @@ def __init__(self):
5454
self.major_version = 6
5555

5656
class Vol3Reader:
57-
def __init__(self, vol_obj):
57+
def __init__(self, vol_obj, framework_version):
5858
self.vol_obj = vol_obj
59+
self.framework_version = framework_version
5960
self.proc_layer_name = None
6061
self.proc_layer = None
6162
self.lsass_process = None
@@ -83,10 +84,18 @@ def get_sysinfo(self):
8384

8485
def find_lsass(self):
8586
filter_func = pslist.PsList.create_name_filter(['lsass.exe'])
87+
if self.framework_version == 1:
88+
layer_name = self.vol_obj.config['primary']
89+
symbol_table = self.vol_obj.config['nt_symbols']
90+
elif self.framework_version == 2:
91+
layer_name = self.vol_obj.context.modules[self.vol_obj.config['kernel']].layer_name
92+
symbol_table = self.vol_obj.context.modules[self.vol_obj.config['kernel']].symbol_table_name
93+
else:
94+
raise Exception('Unsupported Volatility Framework Version')
8695
for proc in pslist.PsList.list_processes(
8796
context = self.vol_obj.context,
88-
layer_name = self.vol_obj.config['primary'],
89-
symbol_table = self.vol_obj.config['nt_symbols'],
97+
layer_name = layer_name,
98+
symbol_table = symbol_table,
9099
filter_func = filter_func
91100
):
92101
self.lsass_process = proc
@@ -112,8 +121,14 @@ def list_dlls(self):
112121

113122
def get_buildnumber(self):
114123
# https://github.com/volatilityfoundation/volatility3/blob/ee31ece0062ce762ed38f6d0a1c54e9f1cd37970/volatility/framework/plugins/windows/cmdline.py
124+
if self.framework_version == 1:
125+
vol_object = self.vol_obj.config["nt_symbols"] + constants.BANG + "_PEB"
126+
elif self.framework_version == 2:
127+
vol_object = self.vol_obj.context.modules[self.vol_obj.config['kernel']].symbol_table_name + constants.BANG + "_PEB"
128+
else:
129+
raise Exception('Unsupported Volatility Framework Version')
115130
peb = self.vol_obj.context.object(
116-
self.vol_obj.config["nt_symbols"] + constants.BANG + "_PEB",
131+
vol_object,
117132
layer_name = self.proc_layer_name,
118133
offset = self.lsass_process.Peb
119134
)
@@ -126,7 +141,13 @@ def list_sections(self):
126141
self.sections.append(VOL3Section.from_vad(vad))
127142

128143
def get_arch(self):
129-
if not symbols.symbol_table_is_64bit(self.vol_obj.context, self.vol_obj.config["nt_symbols"]):
144+
if self.framework_version == 1:
145+
symbol_table_is_64bit = symbols.symbol_table_is_64bit(self.vol_obj.context, self.vol_obj.config["nt_symbols"])
146+
elif self.framework_version == 2:
147+
symbol_table_is_64bit = symbols.symbol_table_is_64bit(self.vol_obj.context, self.vol_obj.context.modules[self.vol_obj.config['kernel']].symbol_table_name)
148+
else:
149+
raise Exception('Unsupported Volatility Framework Version')
150+
if not symbol_table_is_64bit:
130151
self.processor_architecture = KatzSystemArchitecture.X86
131152
self.processor_architecture = KatzSystemArchitecture.X64
132153

@@ -229,6 +250,7 @@ def vol3_generator(mimi):
229250
x = [str(t['credtype']), '', '', '', '', '', str(t['masterkey']), str(t['sha1_masterkey']), str(t['key_guid']), '']
230251
yield 0, x
231252

253+
232254
def vol3_treegrid(mimi):
233255
return renderers.TreeGrid([
234256
("credtype", str),

pypykatz/pypykatz.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -213,9 +213,9 @@ def go_rekall(session, override_timestamp = None, buildnumber = None, packages =
213213
return mimi
214214

215215
@staticmethod
216-
def go_volatility3(vol3_obj, packages = ['all']):
216+
def go_volatility3(vol3_obj, framework_version = 2, packages = ['all']):
217217
from pypykatz.commons.readers.volatility3.volreader import Vol3Reader, vol3_treegrid
218-
reader = Vol3Reader(vol3_obj)
218+
reader = Vol3Reader(vol3_obj, framework_version)
219219
sysinfo = reader.get_sysinfo()
220220
mimi = pypykatz(reader, sysinfo)
221221
mimi.start(packages)

0 commit comments

Comments
 (0)