From fc5b051692b06ebb029f36a5610ff3258f002d65 Mon Sep 17 00:00:00 2001 From: Mike Auty Date: Sat, 22 Aug 2020 11:18:01 +0100 Subject: [PATCH] CLI: Apply the same specific config parsing to automagic --- volatility/cli/__init__.py | 24 +++++++++++++----------- 1 file changed, 13 insertions(+), 11 deletions(-) diff --git a/volatility/cli/__init__.py b/volatility/cli/__init__.py index 4647da5db..fb8b3c6ed 100644 --- a/volatility/cli/__init__.py +++ b/volatility/cli/__init__.py @@ -217,14 +217,13 @@ class CommandLine(interfaces.plugins.FileConsumerInterface): plugin_list = framework.list_plugins() seen_automagics = set() - configurables_list = {} + chosen_configurables_list = {} for amagic in automagics: if amagic in seen_automagics: continue seen_automagics.add(amagic) if isinstance(amagic, interfaces.configuration.ConfigurableInterface): self.populate_requirements_argparse(parser, amagic.__class__) - configurables_list[amagic.__class__.__name__] = amagic subparser = parser.add_subparsers(title = "Plugins", dest = "plugin", @@ -248,7 +247,7 @@ class CommandLine(interfaces.plugins.FileConsumerInterface): vollog.log(constants.LOGLEVEL_VVV, "Cache directory used: {}".format(constants.CACHE_PATH)) plugin = plugin_list[args.plugin] - configurables_list[plugin] = plugin + chosen_configurables_list[args.plugin] = plugin base_config_path = "plugins" plugin_config_path = interfaces.configuration.path_join(base_config_path, plugin.__name__) @@ -270,7 +269,16 @@ class CommandLine(interfaces.plugins.FileConsumerInterface): json_val = json.load(f) ctx.config.splice(plugin_config_path, interfaces.configuration.HierarchicalDict(json_val)) - self.populate_config(ctx, configurables_list, args, plugin_config_path) + # It should be up to the UI to determine which automagics to run, so this is before BACK TO THE FRAMEWORK + automagics = automagic.choose_automagic(automagics, plugin) + for amagic in automagics: + chosen_configurables_list[plugin] = plugin + + if ctx.config.get('automagic.LayerStacker.stackers', None) is None: + ctx.config['automagic.LayerStacker.stackers'] = stacker.choose_os_stackers(plugin) + self.output_dir = args.output_dir + + self.populate_config(ctx, chosen_configurables_list, args, plugin_config_path) if args.extend: for extension in args.extend: @@ -279,12 +287,6 @@ class CommandLine(interfaces.plugins.FileConsumerInterface): address, value = extension[:extension.find('=')], json.loads(extension[extension.find('=') + 1:]) ctx.config[address] = value - # It should be up to the UI to determine which automagics to run, so this is before BACK TO THE FRAMEWORK - automagics = automagic.choose_automagic(automagics, plugin) - if ctx.config.get('automagic.LayerStacker.stackers', None) is None: - ctx.config['automagic.LayerStacker.stackers'] = stacker.choose_os_stackers(plugin) - self.output_dir = args.output_dir - ### # BACK TO THE FRAMEWORK ### @@ -410,7 +412,7 @@ class CommandLine(interfaces.plugins.FileConsumerInterface): "\tThe necessary symbols are present and identified by volatility") def populate_config(self, context: interfaces.context.ContextInterface, - configurables_list: Dict[str, interfaces.configuration.ConfigurableInterface], + configurables_list: Dict[str, Type[interfaces.configuration.ConfigurableInterface]], args: argparse.Namespace, plugin_config_path: str) -> None: """Populate the context config based on the returned args.