from typing import List from volatility import framework from volatility.framework import interfaces, renderers from volatility.framework.interfaces import plugins class FrameworkInfo(plugins.PluginInterface): """Plugin to list the various modular components of Volatility""" @classmethod def get_requirements(cls) -> List[interfaces.configuration.RequirementInterface]: return [] def _generator(self): categories = { 'Automagic': interfaces.automagic.AutomagicInterface, 'Requirement': interfaces.configuration.RequirementInterface, 'Layer': interfaces.layers.DataLayerInterface, 'Object': interfaces.objects.ObjectInterface, 'Plugin': interfaces.plugins.PluginInterface, 'Renderer': interfaces.renderers.Renderer } for category, module_interface in categories.items(): yield (0, (category, )) for clazz in framework.class_subclasses(module_interface): yield (1, (clazz.__name__, )) def run(self): return renderers.TreeGrid([("Data", str)], self._generator())