Skip to content

Commit 4f37a28

Browse files
mtresslerikelos
authored andcommitted
dump_file_producer is now a classmethod and returns a FileInterface Object
1 parent 49acf44 commit 4f37a28

File tree

1 file changed

+19
-10
lines changed

1 file changed

+19
-10
lines changed

volatility/framework/plugins/windows/dumpfiles.py

Lines changed: 19 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
from volatility.framework.configuration import requirements
1111
from volatility.framework.renderers import format_hints
1212
from volatility.framework.objects import utility
13-
from typing import List, Tuple, Type
13+
from typing import List, Tuple, Type, Optional
1414
vollog = logging.getLogger(__name__)
1515

1616
FILE_DEVICE_DISK = 0x7
@@ -48,11 +48,13 @@ def get_requirements(cls) -> List[interfaces.configuration.RequirementInterface]
4848
requirements.VersionRequirement(name='handles', component=handles.Handles, version=(1, 0, 0))
4949
]
5050

51-
def dump_file_producer(self, file_object: interfaces.objects.ObjectInterface,
51+
@classmethod
52+
def dump_file_producer(cls,
53+
file_object: interfaces.objects.ObjectInterface,
5254
memory_object: interfaces.objects.ObjectInterface,
5355
open_method: Type[interfaces.plugins.FileHandlerInterface],
5456
layer: interfaces.layers.DataLayerInterface,
55-
desired_file_name: str) -> str:
57+
desired_file_name: str) -> Optional[interfaces.plugins.FileHandlerInterface]:
5658
"""Produce a file from the memory object's get_available_pages() interface.
5759
5860
:param file_object: the parent _FILE_OBJECT
@@ -77,13 +79,15 @@ def dump_file_producer(self, file_object: interfaces.objects.ObjectInterface,
7779
filedata.write(data)
7880

7981
if not bytes_written:
80-
result_text = "No data is cached for the file at {0:#x}".format(file_object.vol.offset)
82+
#vollog.debug("No data is cached for the file at {0:#x}".format(file_object.vol.offset))
83+
return None
8184
else:
82-
result_text = "Stored {}".format(filedata.preferred_filename)
85+
vollog.debug("Stored {}".format(filedata.preferred_filename))
86+
return filedata
8387
except exceptions.InvalidAddressException:
84-
result_text = "Unable to dump file at {0:#x}".format(file_object.vol.offset)
85-
86-
return result_text
88+
#vollog.debug("Unable to dump file at {0:#x}".format(
89+
#file_object.vol.offset))
90+
return None
8791

8892
def process_file_object(self, file_obj: interfaces.objects.ObjectInterface) -> Tuple:
8993
"""Given a FILE_OBJECT, dump data to separate files for each of the three file caches.
@@ -144,11 +148,16 @@ def process_file_object(self, file_obj: interfaces.objects.ObjectInterface) -> T
144148
ntpath.basename(obj_name),
145149
extension)
146150

147-
result_text = self.dump_file_producer(file_obj, memory_object, self.open, layer, desired_file_name)
151+
file_handle = self.dump_file_producer(file_obj, memory_object, self.open, layer, desired_file_name)
152+
153+
file_output = "Error dumping file"
154+
if file_handle:
155+
file_handle.close()
156+
file_output = file_handle.preferred_filename
148157

149158
yield (cache_name, format_hints.Hex(file_obj.vol.offset),
150159
ntpath.basename(obj_name), # temporary, so its easier to visualize output
151-
result_text)
160+
file_output)
152161

153162
def _generator(self, procs: List, offsets: List):
154163

0 commit comments

Comments
 (0)