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

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

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

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

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
rustdllproxy — Generate Proxy DLLs in Rust | Kitploit
ツール/GitHubGitHub/johnswiftc/rustdllproxy
Payload GenerationPersistence MechanismsPost-ExploitationPenetration TestingRed TeamingPayload Development
GitHubjohnswiftc/rustdllproxy

rustdllproxy

Generate Proxy DLLs in Rust

リポジトリを見る
5642ヶ月前Kitploit レビュー済み

人気

すべて見る →

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

すべてのツールを探索

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

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

rustdllproxy


Windowsアプリケーション向けのプロキシDLLを簡単に生成・開発するためのRustクレートユーティリティ。

インストール

root@kitploit:~
cargo install rustdllproxy

互換性

このクレートは現在、標準のDLL PE形式のみをサポートしています。

現在の制限事項

  • カスタムコードで関数をフックする場合、関数シグネチャを把握している必要があります
    • これは、Ghidra などの逆アセンブラやリバースエンジニアリングツールを使用して確認できます。

コマンド

Rustdllproxy には2つのサブコマンドが用意されています:

CommandPurpose
rustdllproxy new1つ以上の既存DLLから新しいプロキシ cdylib クレートを生成します。
rustdllproxy build.def ファイルを src/lib.rs と同期させ、クレートをビルドします。
root@kitploit:~
rustdllproxy --help        # top-level help
rustdllproxy new --help    # generation flags
rustdllproxy build --help  # build flags

新しいクレートの作成

戦略に関する簡単な注意

クレートを生成する前に、プロキシをどのように動作させるかを決めてください。典型的なパターンは検索順序ハイジャックです。まず対象DLLを target_.dll のようにリネームし、次にコンパイルされたプロキシを target.dll として使用します。これにより、binary -> target.dll -> target_.dll のようなフローが生まれます。

ユースケースに応じて、複数の進め方があります。ただし、プロキシ対象の基盤となるDLLをリネームする必要がある場合は、生成された .def ファイルをそれに合わせて更新してください。


root@kitploit:~
rustdllproxy new -p path/to/target_.dll -n my_proxy

ヒント: rustdllproxy は clap を使用したCLIとして構築されています。すべてのオプションとフラグを確認するには rustdllproxy --help を実行してください。

フックの作成

マクロライブラリは、prehook、posthook、fullhook の3つの主要なフックタイプをサポートしています。

フック実装の手順

  1. #[no_mangle] ディレクティブをフックマクロに置き換えます(末尾の //<dllname>.dll コメントはそのままにしておきます)。

    root@kitploit:~
    #[prehook("dllbeingproxied.dll", "function_name")] //dllbeingproxied.dll
    
  2. 関数シグネチャを記入します(変更する入力は mut として宣言します)。

  3. rustdllproxy build でビルドします。

フックタイプ

prehook

元の関数の前にコードを実行します。機能を追加したり、入力変数を変更したりできます。

root@kitploit:~
#[prehook("target.dll", "my_function")] //target.dll
fn my_function(mut param1: i32, mut param2: &str) {
    // Your code here - executes before original function
    param1 *= 2;  // Modify parameters if needed
}

posthook

元の関数の後にコードを実行します。特別な ret 変数を使用して戻り値を確認および編集します。

root@kitploit:~
#[posthook("target.dll", "calculate")] //target.dll
fn calculate(input: i32) -> i32 {
    // Original function executes first
    // Then your code runs with access to 'ret'
    ret = ret * 2;  // Modify return value
}

注: ret 変数は自動的に mutable として定義されます。不要な場合は参照する必要はありません。

fullhook

関数の実行に対する完全な制御を提供します。戻り値と関数呼び出しを手動で管理します。

root@kitploit:~
#[fullhook("target.dll", "do_multi_add")] //target.dll
fn do_multi_add(mut a: i32, mut b: i32, mut c: i32) -> i32 {
    // Pre-processing
    a += 10;
    b += 20;

    // Call original function with magic func()
    let mut return_value: i32 = func(a, b, c);

    // Post-processing
    return_value *= 2;

    // Must explicitly return the value
    return_value
}

クレートのビルド

プロキシクレートのディレクトリから実行します(または最初の引数として渡します):

root@kitploit:~
rustdllproxy build [PATH] [--profile <name>] [--no-build] [-- <extra cargo args>]

注意事項

  • .def ファイルはビルドのたびに完全に再生成され、手動での変更は上書きされます。rustdllproxy のビルド方法に対して手動で変更を加える必要がある場合、cargo を使用してこれを実現できます。
  • ビルドシステムは、ビルド前に基盤となるDLLの名前を取得するために、生成されたコメント、.defエクスポート、フック名に依存しています。情報が十分でない場合、エラーがスローされ、どのように回復できるかが説明されます。

サンプルワークフロー

DLL検索順序ハイジャックを使用して、オフィスソフトウェアで使用される office.dll を変更したいとしましょう:

ステップ1: 元のDLLを準備する

root@kitploit:~
# Rename the original DLL
mv office.dll office_.dll

ステップ2: プロキシクレートを生成する

root@kitploit:~
rustdllproxy new -p office_.dll -n office_proxy

ステップ3: フックを実装する

root@kitploit:~
#[prehook("office_.dll", "open_window")] //office_.dll
fn open_window() {
    // Your custom code here...
    println!("Window is about to open!");
}

ステップ4: ビルドして配置する

root@kitploit:~
cd office_proxy
rustdllproxy build

ビルドファイルは /target にあります。

DLLバンドリングに関する考慮事項

単一のクレートで複数のターゲットDLLをプロキシすることが可能です。この機能はほとんど使用されず、いくつかの重要な注意点があります。

複数のDLLをバンドルする場合:

  • エクスポートの順序により、関数の序数が変更される可能性があります
  • 最新のソフトウェアは互換性のためにエクスポート名を使用するため、これが問題になることはほとんどありません。
  • 主に分析やカスタムアプリケーション開発に役立ちます。

変更履歴

リリースノートは CHANGELOG.md にあります。

貢献

貢献は歓迎します!お気軽に issue や pull request を送ってください。

ツールをダウンロード
FlagDefaultEffect
PATH.プロキシクレートのルートへのパス。
--profile <name>releaseCargoビルドプロファイル(release、dev、カスタム)。
--no-buildoff.def ファイルを再生成しますが、cargo build はスキップします。
-- <args>—cargo build にそのまま転送されます。