Source code for volatility3.plugins.configwriter

# 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 volatility3.framework import renderers, interfaces
from volatility3.framework.configuration import requirements
from volatility3.framework.interfaces import plugins

vollog = logging.getLogger(__name__)


[docs]class ConfigWriter(plugins.PluginInterface): """Runs the automagics and both prints and outputs configuration in the output directory.""" _required_framework_version = (2, 0, 0)
[docs] @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: with self.open(filename) as file_data: file_data.write( bytes( json.dumps(config, sort_keys=True, indent=2), "raw_unicode_escape", ) ) except Exception as excp: vollog.warning(f"Unable to JSON encode configuration: {excp}") for k, v in config.items(): yield (0, (k, json.dumps(v)))
[docs] def run(self): return renderers.TreeGrid([("Key", str), ("Value", str)], self._generator())