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

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

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

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

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
moonwalk — PEB WALKを使用せずにDLLのベースアドレスを検出する | Kitploit
ツール/GitHubGitHub/teach2breach/moonwalk
ポストエクスプロイトバイナリ解析学習と教育レッドチーミングペイロード開発
GitHubteach2breach/moonwalk

moonwalk

PEB WALKを使用せずにDLLのベースアドレスを検出する

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

人気

すべて見る →

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

すべてのツールを探索

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

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

moonwalk: DLL ベースアドレスファインダー

この Rust ライブラリおよび CLI ツールは、プロセス環境ブロック (PEB) ウォークを使用せずに、読み込まれた DLL のベースアドレスを検出する代替手法を示します。この手法は、PEB ウォークが検出またはブロックされる可能性があるシナリオで特に有用です。

ブランチの違い

このリポジトリには、異なるアプローチを持つ 2 つのブランチが含まれています:

メインブランチ

  • メモリ検証に winapi クレートと VirtualQuery を使用
  • ライブラリ関数 (lib.rs) には、クリーンな統合のための print ステートメントなし
  • CLI ツール (main.rs) には、概念実証のためのデバッグ出力が含まれる
  • この手法の学習と理解に最適

OPSEC ブランチ

  • 外部依存関係なし - 完全に自己完結型
  • Windows API 呼び出しなし - VirtualQuery の代わりに例外処理を伴う直接メモリアクセスを使用
  • ライブラリ関数に print ステートメントなし
  • ステルス性の向上 - API 呼び出しを行わない
  • インプラント/ツールに最適 - 残す痕跡が少なく、検出がより困難

どちらのブランチも安全に使用できますが、OPSEC ブランチは、API 呼び出しが監視またはブロックされる可能性があるシナリオに対して、追加の運用セキュリティ上の利点を提供します。

仕組み

このプログラムは、スタックウォーキング方式を使用して DLL を特定します:

  1. スレッド環境ブロック (TEB) へのアクセス:

    • インラインアセンブリを使用して GS セグメントレジスタ (GS:[0x30]) から TEB ポインタを読み取る
    • TEB からスタックベース (GS:[0x08]) とスタックリミット (GS:[0x10]) を取得する
  2. スタックウォーキング:

    • 現在のスタックポインタ (RSP) から開始する
    • リターンアドレスを探しながらスタックを上方向に走査する
    • 各アドレスが実行可能メモリを指しているか確認する
    • メインブランチ: VirtualQuery を使用してメモリ領域を検証する
    • OPSEC ブランチ: 例外処理を伴う直接メモリアクセスを使用する
  3. モジュールの特定:

    • 潜在的な各リターンアドレスについて、実行可能メモリを指しているか確認する
    • 実行可能メモリが見つかった場合、逆方向に走査して PE ヘッダーを見つける
    • 以下を確認してモジュールを検証する:
      • MZ シグネチャ (DOS ヘッダー)
      • PE シグネチャ
      • DLL 特性
      • 64 ビットアーキテクチャ
      • エクスポートディレクトリからのモジュール名
  4. 検証:

    • エクスポートディレクトリ内の名前を確認することで、モジュールが対象の DLL であることを検証する
    • すべての PE ヘッダー構造が有効であることを確認する

なぜこのアプローチなのか?

DLL を検出する従来の方法では、多くの場合 PEB のモジュールリストを走査します。効果的ではありますが、このアプローチは以下の可能性があります:

  • セキュリティソフトウェアに検出される
  • 特定の環境でブロックされる

このスタックウォーキング方式は、以下の代替手段を提供します:

  • PEB に依存しない
  • PEB ウォーキングがブロックされている環境でも動作する
  • OPSEC ブランチ: API 呼び出しを行わない

要件

  • Rust (ナイトリーツールチェーン)
  • Windows x64
  • メインブランチ: winapi クレート
  • OPSEC ブランチ: 外部依存関係なし

使用方法

ライブラリとして

Cargo.toml に追加します:

メインブランチ:

root@kitploit:~
[dependencies]
moonwalk = { git = "https://github.com/Teach2Breach/moonwalk.git" }

OPSEC ブランチ:

root@kitploit:~
[dependencies]
moonwalk = { git = "https://github.com/Teach2Breach/moonwalk.git", branch = "opsec" }

コードでの使用例:

root@kitploit:~
use moonwalk::find_dll_base;

fn main() {
    // Find ntdll.dll
    if let Some(ntdll_base) = find_dll_base("ntdll.dll") {
        println!("ntdll.dll base: 0x{:X}", ntdll_base);
    }

    // Case-insensitive, .dll extension optional
    if let Some(kernel32_base) = find_dll_base("KeRNEl32") {
        println!("kernel32.dll base: 0x{:X}", kernel32_base);
    }
}

CLI ツールとして

ビルド:

root@kitploit:~
cargo build --release

実行:

root@kitploit:~
# Find ntdll.dll (default)
cargo run --release

# Find specific DLL (case insensitive, .dll extension optional)
cargo run --release kernel32.dll
cargo run --release KeRNEl32
cargo run --release USER32

例

print ステートメントは含まれなくなりました。この画像は教育目的で含まれています。

Moonwalk DLL ベースアドレスファインダーのデモ

注記

  • DLL 名は大文字と小文字を区別せず、.dll 拡張子は省略可能です
  • コールスタック内にある DLL でのみ動作します
  • メインブランチ: 安全なメモリアクセス検証に VirtualQuery を使用します
  • OPSEC ブランチ: 最大のステルス性を実現するため、例外処理を伴う直接メモリアクセスを使用します
  • 両ブランチとも、デバッグ出力のないクリーンなライブラリインターフェースを備えています
ツールをダウンロード