mirror of
https://github.com/volatilityfoundation/volatility3.git
synced 2026-08-22 22:32:22 +02:00
All conversions using `latin-1` have been converted to `raw_unicode_escape` which is like `latin-1`, but handles unicode characters appropriately (with a `\u` prefix). Since this is like `latin-1` it should have no impact on things that ran previously, but those that would fail with a unicode error now will present an encoded unicode string. There may be situations where the binary representation of unicode would be better (timeliner file output?), but those can be changed when/if it's determined necessary. Fixes #274.
51 lines
2.0 KiB
Python
51 lines
2.0 KiB
Python
# This file is Copyright 2019 Volatility Foundation and licensed under the Volatility Software License 1.0
|
|
# which is available at https://www.volatilityfoundation.org/license/vsl-v1.0
|
|
#
|
|
|
|
import json
|
|
import logging
|
|
from typing import List
|
|
|
|
from volatility.framework import renderers, interfaces
|
|
from volatility.framework.configuration import requirements
|
|
from volatility.framework.interfaces import plugins
|
|
|
|
vollog = logging.getLogger(__name__)
|
|
|
|
|
|
class ConfigWriter(plugins.PluginInterface):
|
|
"""Runs the automagics and both prints and outputs configuration in the
|
|
output directory."""
|
|
|
|
@classmethod
|
|
def get_requirements(cls) -> List[interfaces.configuration.RequirementInterface]:
|
|
return [
|
|
requirements.TranslationLayerRequirement(name = 'primary',
|
|
description = 'Memory layer for the kernel',
|
|
architectures = ["Intel32", "Intel64"]),
|
|
requirements.BooleanRequirement(name = 'extra',
|
|
description = 'Outputs whole configuration tree',
|
|
default = False,
|
|
optional = True)
|
|
]
|
|
|
|
def _generator(self):
|
|
filename = "config.json"
|
|
config = dict(self.build_configuration())
|
|
if self.config.get('extra', False):
|
|
vollog.debug("Outputting additional information, this will NOT work with the -c option")
|
|
config = dict(self.context.config)
|
|
filename = "config.extra"
|
|
try:
|
|
filedata = plugins.FileInterface(filename)
|
|
filedata.data.write(bytes(json.dumps(config, sort_keys = True, indent = 2), 'raw_unicode_escape'))
|
|
self.produce_file(filedata)
|
|
except Exception:
|
|
vollog.warning("Unable to JSON encode configuration")
|
|
|
|
for k, v in config.items():
|
|
yield (0, (k, json.dumps(v)))
|
|
|
|
def run(self):
|
|
return renderers.TreeGrid([("Key", str), ("Value", str)], self._generator())
|