Skip to content

I. Interfaces

Gabriel Ryan edited this page Aug 23, 2020 · 1 revision

Interface modules are used to orchestrate the payload creation process and facilitate data transfer between individual payload components. Interfaces typically implement the following workflow:

  1. Mutate symbols - the Interface systematically mutates the symbols of all Output Modules using the selected Mutator module
  2. Merge Imports - the Interface consolidates all Output Module dependencies into a single list, eliminating any duplicates
  3. Run Input Modules - the Interfaces runs all Input Modules. The results of all EKey modules are combined into a single encryption key. The selected crypter module is used to convert the shellcode into ciphertext.
  4. Transfer data to Output Modules - The Interface facilitates the transfer of any data that needs to be sent between output / input modules.
  5. Payload rendering - all output modules are rendered and combined into a single payload

The exact steps involved with this process may differ depending on the target programming language or environment.

Selecting Interfaces

You should try to select an interface that matches the programming language or environment that your payload will be written in. For example, if you are creating a .NET payload written in C#, you need to select the interface module that corresponds to that format.

To list all available interfaces, use the --list flag as shown in the following example.

Command:

python dropengine.py --list interfaces

To instruct DropEngine to use a specific interface, use the --interface flag as shown below.

Command:

python dropengine.py --build [..snip..] --interface some_interface_type [..snip..]

Clone this wiki locally