Skip to content
KitploitKITPLOIT
ツールエクスプロイトブログ
Log in
提出
ツールエクスプロイトブログ
提出

ハッキング、侵入テスト、サイバーセキュリティツールをあなたのセキュリティアーセナルに!

Kitploitはハッキング、サイバーセキュリティ、ペネトレーションテストのツールディレクトリです。最新のプロジェクトアップデートを見つけて、脆弱性の発見、システム分析、テストの自動化、セキュリティの強化を行いましょう。

フィードお問い合わせプライバシー© 2026 Kitploit

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
donut — x86、x64、またはAMD64+x86の位置独立型シェルコードを生成し、.NETアセンブリ、PEファイル、およびその他のWindowsペイロードをメモリから読み込んでパラメータ付きで実行します。 | Kitploit
ツール/GitHubGitHub/thewover/donut
メモリフォレンジックペイロード生成エクスプロイトIDS/IPS回避シェルコードポストエクスプロイトペネトレーションテストレッドチーミングシェルコード生成ペイロード開発IDS/IPS回避 第7位
4.7k753421年前Kitploit レビュー済み

人気

すべて見る →

コミュニティで最も使われているツールを見つけましょう。

すべてのツールを探索

ツールコレクションを閲覧

すべてのツールを見る →
共有
ペイロード開発 第1位
ペイロード生成 第2位
シェルコード 第1位
シェルコード生成 第2位
GitHubthewover/donut

donut

x86、x64、またはAMD64+x86の位置独立型シェルコードを生成し、.NETアセンブリ、PEファイル、およびその他のWindowsペイロードをメモリから読み込んでパラメータ付きで実行します。

リポジトリを見る

Issues Contributors Stars Forks License Chat Github All Releases Twitter URL

Alt text

現在のバージョン: v1.1

目次

  1. はじめに
  2. 動作の仕組み
  3. ビルド
  4. 使用方法
  5. サブプロジェクト
  6. Donutを使った開発
  7. 質問と議論
  8. 免責事項

1. はじめに

Donut は、VBScript、JScript、EXE、DLL ファイル、および dotNET アセンブリのメモリ内実行を可能にする、位置独立コードです。Donut によって作成されたモジュールは、HTTP サーバーからステージングするか、ローダー自体に直接埋め込むことができます。モジュールはオプションで、Chaskey ブロック暗号と128ビットのランダム生成キーを使用して暗号化されます。ファイルがメモリにロードされ実行された後、元の参照は消去され、メモリスキャナーを妨害します。ジェネレーターとローダーは以下の機能をサポートしています。

  • aPLib および LZNT1、Xpress、Xpress Huffman(RtlCompressBuffer 経由)による入力ファイルの圧縮。
  • API ハッシュと文字列生成のためのエントロピーの使用。
  • ファイルの128ビット対称暗号化。
  • ネイティブ PE ヘッダーの上書き。
  • MEM_IMAGE メモリへのネイティブ PE の格納。
  • Antimalware Scan Interface (AMSI) および Windows Lockdown Policy (WLDP) のパッチ適用。
  • Event Tracing for Windows (ETW) のパッチ適用。
  • EXE ファイルのコマンドラインのパッチ適用。
  • ホストプロセスの終了を回避するための終了関連 API のパッチ適用。
  • 複数の出力形式: C、Ruby、Python、PowerShell、Base64、C#、16進数、UUID 文字列。

Linux および Windows 向けの動的ライブラリと静的ライブラリがあり、独自のプロジェクトに統合できます。また、Python モジュールもあり、詳細は Python 拡張のビルドと使用 をご覧ください。

2. 動作の仕組み

Donut には、サポートされている各ファイルタイプ用の個別のローダーが含まれています。dotNET EXE/DLL アセンブリの場合、Donut はアンマネージ CLR ホスティング API を使用して Common Language Runtime をロードします。CLR がホストプロセスにロードされると、新しいアプリケーションドメインが作成され、使い捨ての AppDomain でアセンブリを実行できるようにします。AppDomain の準備ができると、dotNET アセンブリは AppDomain.Load_3 メソッドを介してロードされます。最後に、ユーザーが指定した EXE のエントリポイントまたは DLL のパブリックメソッドが、追加のパラメーターとともに呼び出されます。アンマネージ CLR ホスティング API のドキュメントについては、MSDN (https://docs.microsoft.com/en-us/dotnet/framework/unmanaged-api/hosting/clr-hosting-interfaces) を参照してください。CLR ホストのスタンドアロンの例については、こちらのコード を参照してください。

VBScript および JScript ファイルは、IActiveScript インターフェースを使用して実行されます。Windows Script Host (wscript/cscript) が提供する一部のメソッドの最小限のサポートもあります。スタンドアロンの例については、こちらのコード を参照してください。詳細な説明については、JavaScript、VBScript、JScript、XSL のメモリ内実行 をお読みください。

アンマネージまたはネイティブの EXE/DLL ファイルは、遅延インポート、TLS、コマンドラインのパッチ適用をサポートするカスタム PE ローダーを使用して実行されます。リロケーション情報があるファイルのみがサポートされています。詳細は DLL のメモリ内実行 をお読みください。

ローダーは、AMSI と WLDP を無効にして、メモリ内で実行される悪意のあるファイルの検出を回避するのに役立ちます。詳細については、レッドチームが .NET 動的コードの AMSI と WLDP をバイパスする方法 をお読みください。また、aPLib または RtlDecompressBuffer API を使用したメモリ内ファイルの解凍もサポートしています。詳細については、データ圧縮 をお読みください。

バージョン 1.0 以降、ETW もバイパスされます。AMSI/WLDP と同様に、これはモジュール式のシステムであり、デフォルトのバイパスを独自のものに交換できます。デフォルトのバイパスは XPN の研究に基づいています。詳細については、.NET の隠蔽 - ETW をお読みください。

デフォルトでは、ローダーはアンマネージ PE の PE ヘッダー(ベースアドレスから `IMAGE_OPTIONAL_HEADER.SizeOfHeaders` まで)を上書きします。デコイモジュールが使用されない場合(モジュールオーバーロード)、PE ヘッダーはゼロ埋めされます。デコイモジュールが使用される場合、デコイモジュールの PE ヘッダーがペイロードモジュールのものを上書きするために使用されます。これは、メモリ内のモジュールの PE ヘッダーをディスク上のファイルと比較する検出を防ぐためです。ユーザーは、すべての PE ヘッダーを元の状態のまま保持するように要求できます。これは、ペイロードモジュールが埋め込み PE リソースを検索する場合など、PE ヘッダーにアクセスする必要があるシナリオで役立ちます。

ジェネレーターの詳細なチュートリアルと、Donut がトレードクラフトにどのように影響するかについては、Donut - .NET アセンブリをシェルコードとしてインジェクトする をお読みください。ローダーの詳細については、.NET アセンブリをメモリからロードする をお読みください。

内部についてさらに詳しく知りたい方は、開発者向けノート を参照してください。

3. ビルド

ビルドには2種類あります。Donut をデバッグしたい場合は、こちらのドキュメント を参照してください。そうでない場合は、リリースビルドについて以下をお読みください。

クローン

Windows コマンドプロンプトまたは Linux ターミナルから、リポジトリをクローンします。

 
  git clone http://github.com/thewover/donut.git

次のステップは、使用するオペレーティングシステムとコンパイラによって異なります。現在、Donut のジェネレーターとローダーテンプレートは、Microsoft Visual Studio 2019 と MinGW-64 の両方で正常にコンパイルできます。独自の C/C++ プロジェクトでライブラリを使用するには、こちらにある例 を参照してください。

Windows

ローダーテンプレート、動的ライブラリ donut.dll、静的ライブラリ donut.lib、ジェネレーター donut.exe を生成するには、x64 の Microsoft Visual Studio 開発者コマンドプロンプトを起動し、Donut リポジトリをクローンしたディレクトリに移動して、以下を入力します。

  nmake -f Makefile.msvc

Windows または Linux で MinGW-64 を使用して同様のことを行うには、Donut リポジトリをクローンしたディレクトリに移動し、以下を入力します。

  make -f Makefile.mingw

Linux

動的ライブラリ donut.so、静的ライブラリ donut.a、ジェネレーター donut を生成するには、Donut リポジトリをクローンしたディレクトリに移動し、単に make と入力します。

Python モジュール

Donut は Python モジュールとしてインストールして使用できます。ソースからインストールするには、Python3 用の pip が必要です。まず、古いバージョンの donut-shellcode がインストールされていないことを確認するために、Linux ターミナルまたは Microsoft Visual Studio コマンドプロンプトで次のコマンドを発行します。

  pip3 uninstall donut-shellcode

古いバージョンがインストールされていないことを確認したら、次のコマンドを発行します。

  pip3 install .

また、PyPi リポジトリから Donut を Python モジュールとしてインストールすることもできます。

  pip3 install donut-shellcode

詳細については、Python 拡張のビルドと使用 を参照してください。

Docker

Docker コンテナのビルド。

  docker build -t donut .

Donut の実行。

  docker run -it --rm -v "${PWD}:/workdir" donut -h

サポートツール

Donut には、個別にビルドできる他のいくつかの実行可能ファイルが含まれています。これには、"hash.exe"、"encrypt.exe"、"inject.exe"、"inject_local.exe" が含まれます。最初の2つはシェルコード生成で使用されます。後者の2つは、donut シェルコードのテストを支援するために提供されています。"inject.exe" は、生のバイナリファイル(loader.bin)を PID またはプロセス名でプロセスにインジェクトします。"inject_local.exe" は、生のバイナリファイルを自身のプロセスにインジェクトします。

これらのサポート実行可能ファイルを個別にビルドするには、MSVC makefile を使用できます。たとえば、"inject_local.exe" をビルドして donut シェルコードをテストするには、次のように実行します。

  nmake inject_local -f Makefile.msvc

リリース

ツールをダウンロード