PAGES
← all tools
◆ Exploitation & C2

donut-shellcode

v1.0 open-source

Generates position-independent shellcode that enables in-memory execution of VBScript, JScript, EXE, DLLDLLA Windows file format containing compiled code and data that multiple programs can load and share at runtime, letting cyber tools inject functionality into other processes or hook system calls., and .NET assemblies.

Summary

donut-shellcode is an open-source shellcode generator that turns VBScript, JScript, EXE, DLL, and .NET assembly files into position-independent code capable of running entirely in memory, optionally staged from an HTTP server or embedded in the loader itself. It runs as a command-line tool, with a Docker image available for building payloads without a local toolchain, and its module-overloading and PE-header mutation options are built for red teamers and penetration testers working on payload delivery and evasion rather than for defenders. It sits in the exploitation and code-injection space alongside other shellcode-generation and loader tooling used in offensive tradecraft. Development goes back to 2019 with 29 contributors, but there have been no commits in the past year and the last release shipped 667 days ago, so anyone adopting it should expect a stable but effectively dormant project.

Generates position-independent shellcode that enables in-memory execution of VBScript, JScript, EXE, DLL, and .NET assemblies.

How donut-shellcode helps

Which of my payload formats can I turn into shellcode that runs entirely in memory without touching disk?

takes a VBScript, JScript, EXE, DLL, or .NET assembly and converts it into position-independent code that loads and executes in memory, with the original file reference erased afterward to defeat memory scanners

How do I keep my payload out of the delivered artifact until execution time?

can generate the loader so the module is staged from an HTTP server at runtime instead of being embedded, so the file on disk carries no payload

Can I stop static analysis from reading my payload straight out of the shellcode?

encrypts the module with a randomly generated key using the Chaskey block cipher, so the content is not recoverable by inspecting the generated code

Will module overloading survive a check that looks for shellcode without a backing file on disk?

overlays the payload in memory backed by a decoy file on disk, and can rewrite the payload's PE headers to match that decoy so file-backed detections see a legitimate module

Do I need real relocation data or unbroken API resolution in the binaries I hand it?

works with binaries lacking relocation information or with edge-case relocation data, and falls back to its own replacement calls when the normal API resolution path is unavailable

Which output language do I need to fit into my existing tooling?

produces the shellcode as raw bytes or as C#, Python, or UUID-string source, so it drops into whichever loader or delivery script is already in use

all 7 features, with the evidence for each →

Languages

Not documented

Features

7 capabilities

Built from donut-shellcode's releases, docs, README and our own runs. “Seen” marks the month we first spotted a release the vendor didn't date. Group names and tags are our labels.

Compare with peers →

What donut-shellcode offers you

  • Command-line interface4
  • JavaScript scripting support1
  • Scripting language support1
All capabilities 7 capabilities
In-memory execution for multiple file formats shipped Generates position-independent shellcode to enable in-memory execution of VBScript, JScript, EXE, DLL, and .NET assemblies. 2 releases · 1 other source · first seen Sep 2019

Also counts toward: Command-line interface, JavaScript scripting support, Scripting language support

release

  • Adds execution support for unmanaged DLLs and EXEs from RX memory. v0.9.2 · Sep 2019 · source · release history
  • Adds --script-type option to generate shellcode for JScript (jscript), VBScript (vbscript) and XSL (xsl) targets. v0.9.2 · Sep 2019 · source · release history

docs

  • Generates position-independent shellcode that enables in-memory execution of VBScript, JScript, EXE, DLL, and .NET assemblies.
Encryption and compression options shipped Allows configuring entropy/encryption levels for shellcode and adds input file compression support. 2 releases · first seen Dec 2019

Also counts toward: Command-line interface

release

  • -e switch allows disabling entropy/encryption (1=none, 2=random names, 3=random + symmetric) 0.9.3 · Dec 2019 · source · release history
  • -z switch adds input file compression support (aPLib on all platforms; LZNT1, Xpress, Xpress Huffman on Windows) 0.9.3 · Dec 2019 · source · release history
Thread management and IAT interception shipped Controls loader thread execution behavior and allows interception of exit-related API calls in the Import Address Table. 2 releases · first seen Dec 2019

Also counts toward: Command-line interface

release

  • -y switch creates a new thread for the loader and jumps to a specific hex address or OEP 0.9.3 · Dec 2019 · source · release history
  • -t switch runs unmanaged entrypoint as a thread and intercepts exit-related API in IAT 0.9.3 · Dec 2019 · source · release history
ETW bypass in generated shellcode shipped Incorporates Event Tracing for Windows (ETW) bypass techniques into the output shellcode to evade detection. 1 release · first seen Mar 2023

release

  • Adds ETW (Event Tracing for Windows) bypasses in the generated shellcode. v1.0 · Mar 2023 · source · release history
ModuleOverload payload execution shipped Executes payloads inside a target process image using native PE loading via the ModuleOverload technique. 1 release · first seen Mar 2023

release

  • Adds ModuleOverload capability to execute payload inside a target process image (native PE loading). v1.0 · Mar 2023 · source · release history
Shellcode generation from binaries without relocation information shipped Generates shellcode directly from compiled binaries that lack relocation data. 1 release · first seen Mar 2023

release

  • Supports generating shellcode from binaries without relocation information. v1.0 · Mar 2023 · source · release history
Module download via HTTP shipped Specifies an HTTP server URL to download the target module dynamically at runtime. 1 release · first seen Dec 2019

Also counts toward: Command-line interface

release

Lines in monospace are the tool's own words: help text parsed from its source, or an endpoint from its API document. Under release, a line is our summary of a dated release. Under docs, it is quoted from the tool's own documentation or website. Each links back to the source it came from.

Score card

  1. Shipping velocity releases a month, last 12 months
  2. Documentation quality release-notes rubric, 0–100
  3. Breaking-change discipline how rarely a release breaks users, and notice given
  4. Maintenance risk quiet time against its own cadence, maintainers
  5. Innovation & surface new capabilities, API and MCP surface
  6. Community health
  7. Contributor trend distinct committers, this year against last
  8. Maintainer concentration bus factor now against a year ago
  9. Issue backlog trend issues closed per issue opened, 12 months
  10. Responsiveness median time to a maintainer’s first reply

Nine scores for donut-shellcode, each built from the releases, notes and API history this site tracks — and, on Researcher and Business, where it stands among every measured tool in its category and how that has moved.

Score cards are part of every paid plan.

See plans →

Each score is 0–100 on a published rubric, derived from data this site already shows. A dimension we cannot measure says so — it is never scored 0 and never enters a rank.

How this is scored
  • Shipping velocity — releases a month over the last 12 months, on a log scale where 16 a month scores 100. Needs 3 releases in the window.
  • Documentation quality — the release-notes rubric published on the analytics page, unchanged.
  • Breaking-change discipline — the share of releases carrying a breaking change (none scores 100, half or more scores 0). Only projects that label breaking changes are measured: a clean record cannot be told from an unlabelled one.
  • Maintenance risk — quiet time measured against the tool's own release cadence (quiet longer than 90 days and three typical gaps scores 0), plus the number of active maintainers and whether contributors are growing, where known. Higher is lower risk.
  • Innovation & surface — new capabilities in the feature ledger this year, API and MCP operations added, and the share of commits that are features: the mean of whichever we hold.
  • Community health (open-source tools only) — each is a direction, not a size: contributors this year against last, the bus factor now against a year ago, and issues closed per issue opened, where steady scores 50, doubled 100 and halved 0; plus the median time to a maintainer's first reply (an hour scores about 100, a month or more 0). A commercial card has no repository and carries none of the four.
  • Documented delivery (commercial tools) — when a vendor's documented new capabilities have slowed against its own baseline, that counts against the overall standing as heavily as two low dimensions. Steady delivery, or too little history to judge, leaves the standing alone; it is never a sixth score.
  • Open-source tools are scored on repository signals; commercial tools on their published changelog. Ranks compare tools within one category and one profile and need at least five measured peers; the overall standing needs three ranked dimensions. Best-in-breed or consolidator is a shape, not a quality, and is never scored.

Release-note detail over time

See how much detail donut-shellcode puts in its release notes, quarter by quarter, and compare it with tracked tools in the same category. This history uses up to ten retained, reviewed notes per tool; sparse or blank older quarters may reflect that limit.

Checking release-note history…

Explore the full chart →

Releases

3 entries

  1. March 20231
  2. December 20191
  3. September 20191

    3 entries

    Project health

    Issue, contributor and maintainer activity in TheWover/donut, 2023-10 – 2026-09, as of 2026-09-25. Twelve-month figures first; the trend lines run the whole window.

    1. Contributors 0 −1 vs prior 12 months
    2. Maintainers 0 +0 joined · −1 left, last 12 months
    3. Bus factor 0 committers behind half the commits
    4. Community-filed 100% of issues opened, last 12 months
    5. Median time to close not measured issues closed, last 12 months
    6. Open backlog 31 of 114 issues ever filed
    1. Issues opened / month 0 · 0 communitymaintainers
    2. Open backlog 31
    3. Contributors / month 0
    4. Commits / month 0
    5. Stars 4,703
    Issue themes, last 12 months
    • other 100%

    Counts from the project's public repository and git history; no individuals are identified. Maintainers are the committers covering 80% of the last year's commits. how we measure this

    Articles

    3 articles · updated Nov 4, 2026

    Where donut-shellcode turns up in what others publish: how-tos, attack reports that name it, and incident write-ups. A row says why it is here and quotes where the article names it; the link goes to the publisher.

    Libraries its release ships

    What its latest release locks, checked against known advisories.

    None of its release's images build from a lockfile we can read.

    Add the badge to your README

    Maintain this project? The badge links readers straight to this page, so they can follow every release here.

    Tracked by Cyber Toolchain Choose a badge style and copy the code →
    browse all tools → score card for your toolchain →