FakeMenu class to pass obj to function later
September 5, 2017 ยท View on GitHub
import os from lib.common import empire
FakeMenu class to pass obj to function later
class FakeMenu(object): conn = None installPath = os.getcwd()
main = empire.MainMenu(args=args) is a blocking call
we need a FakeMenu to load modules.
fakeMenu = FakeMenu() modules = empire.modules.Modules(fakeMenu, [])
instead of writing py file parsing again, I reuse.
I organized the modules into a dictionary.
module_classes = {} for moduleName, module in modules.modules.iteritems(): if not moduleName.startswith('powershell'): continue m = moduleName.split('/') if m[1] not in module_classes: module_classes[m[1]] = {} class_name = moduleName.replace(m[0] + '/' + m[1] + '/', "") class_name = class_name.replace('/', '') class_name = class_name.replace('-', '') module_classes[m[1]][moduleName] = {'class_name':class_name, 'module_obj': module}
build the source code from the dictionary formed earlier
source_code = '"""this is auto-generated for EmpireAPIWrapper"""\n\n'
for k1, v1 in module_classes.items(): source_code += "class {0}(object):\n".format(k1) for k2, v2 in v1.items(): source_code += "\tclass {0}(object):\n".format(v2['class_name']) description = v2['module_obj'].info['Description'] source_code += '\t\t"""{0}\n\t\t"""\n\n'.format(description.replace('\','/')) source_code += "\t\tpath = '{0}'\n\n".format(k2) source_code += "\t\tclass options(object):" for name, option in v2['module_obj'].options.iteritems(): if option['Required'] is True: source_code += "\n\t\t\t{0} = '{1}'".format('required_' + name.lower(), name) else: if name.isdigit() is True: # 1 special case where option is numeric source_code += "\n\t\t\t{0} = '{1}'".format('_' + name.lower(), name) else: source_code += "\n\t\t\t{0} = '{1}'".format(name.lower(), name) source_code += "\n\n"
write the source code to a file
with open("empire_autocomplete.py", "w") as text_file: text_file.write(source_code)