Skip to content

Instantly share code, notes, and snippets.

@leesoh
Created September 20, 2016 01:18
Show Gist options
  • Save leesoh/1de93710c632c61210e1e3fba8a52e2f to your computer and use it in GitHub Desktop.
Save leesoh/1de93710c632c61210e1e3fba8a52e2f to your computer and use it in GitHub Desktop.
Visual Studio Code snippet for an Empire module
"Empire module": {
"prefix": "emp",
"description": "Skeleton for an Empire module",
"body": [
"from lib.common import helpers",
"",
"",
"class Module:",
"",
" def __init__(self, mainMenu, params=[]):",
"",
" # metadata info about the module, not modified during runtime",
" self.info = {",
" # name for the module that will appear in module menus",
" 'Name': '${1}',",
"",
" # list of one or more authors for the module",
" 'Author': ['$2'],",
"",
" # more verbose multi-line description of the module",
" 'Description': ('$3'),",
"",
" # True if the module needs to run in the background",
" 'Background': $4,",
"",
" # File extension to save the file as",
" 'OutputExtension': $5,",
"",
" # True if the module needs admin rights to run",
" 'NeedsAdmin': $6,",
"",
" # True if the method doesn't touch disk/is reasonably opsec safe",
" 'OpsecSafe': $7,",
"",
" # The minimum PowerShell version needed for the module to run",
" 'MinPSVersion': '$8',",
"",
" # list of any references/other comments",
" 'Comments': [",
" '$9',",
" ]",
" }",
"",
" # any options needed by the module, settable during runtime",
" self.options = {",
" # format:",
" # value_name : {description, required, default_value}",
" 'Agent': {",
" # The 'Agent' option is the only one that MUST be in a module",
" 'Description' : 'Agent to execute script on.',",
" 'Required' : True,",
" 'Value' : ''",
" },",
" }",
"",
" # save off a copy of the mainMenu object to access external functionality",
" # like listeners/agent handlers/etc.",
" self.mainMenu = mainMenu",
"",
" # During instantiation, any settable option parameters",
" # are passed as an object set to the module and the",
" # options dictionary is automatically set. This is mostly",
" # in case options are passed on the command line",
" if params:",
" for param in params:",
" # parameter format is [Name, Value]",
" option, value = param",
" if option in self.options:",
" self.options[option]['Value'] = value",
"",
" def generate(self):",
" script = \"\"\"function ${1} {",
" ${10:Function body}",
" }${1}\"\"\"",
"",
" # add any arguments to the end execution of the script",
" for option, values in self.options.iteritems():",
" if option.lower() != \"agent\":",
" if values['Value'] and values['Value'] != '':",
" if values['Value'].lower() == \"true\":",
" # if we're just adding a switch",
" script += \" -\" + str(option)",
" else:",
" script += \" -\" + str(option) + \" \" + str(values['Value'])",
"",
" return script",
""
]
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment