問題タブ [dll-injection]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
1875 参照

c# - dll インジェクション後にメッセージ ボックスが表示されないのはなぜですか?

私は単純なdllコードを持っています:

そして、dll を別のプロセスに注入するための python コード:

一部のプロセスでは、注入が機能します。たとえば、gvim で動作します。メッセージボックスが見えます。しかし、C# で簡単なアプリケーションを作成しました。そして、私のdllをこのアプリケーションに注入しようとした後、何も起こりません。

OpenProcessPython インジェクターは、 orCirtualAllocExおよび returnでエラーを報告しませんc_ulong(3968L)。では、なぜメッセージボックスが表示されないのでしょうか?

編集:

私のオペレーティング システム: Windows XP Professional SP3 32 ビット。

編集2:

Cコードで同じことをしたところ、同じ結果が得られました。インジェクションは、たとえば gvim で機能します。しかし、C# での私のプロセスではありません。デバッガーで確認したところ、DllMain 関数が実行されていないようです。

0 投票する
2 に答える
1462 参照

c# - 同じプロセスにロードされた 2 つの .NET CLR はどのように相互に通信できますか?

同じボックスで 2 つの CLR を実行できるようになりましたが、どうすれば相互に「対話」できるでしょうか?

GUI が .NET 2.0 CLR で実行されており、スクリプトが .NET 4.0 CLR で実行されているとします。たとえば、4.0 環境から 2.0 ベースの GUI を変更する方法はありますか?

この手法を使用して .NET C# REPL 環境を別の .net プロセスに挿入すると、まさにこの問題が発生します:ビデオ: Injecting C# DLLs into Managed (C#) and Unmanaged (C++) processes


注: Reddit で同様の質問をしましたが、そのバージョンには多数の参照が含まれており、Side-by-Side 実行と CLR ホスティングのトピックに興味がある場合に役立ちます。

0 投票する
1 に答える
1837 参照

c++ - インジェクションされたDLLからプログラムウィンドウを取得するにはどうすればよいですか?

プログラムにDLLを挿入して、アプリケーションのメインウィンドウにチャットUIを実装しました。アプリケーションのメインウィンドウハンドルを取得し、次にDCを取得して、そこに描画できると考えました。ウィンドウには予測可能なタイトルがあります。これはFindWindow、ハンドルを取得するために使用できることを意味します。唯一の問題は、プロセスの開始時にDLLが挿入されることです。その時点では、ウィンドウは作成されていません。つまりFindWindow、何も見つかりません!

これに対するいくつかの解決策は何ですか?DLLにスレッドを作成し、ウィンドウが作成されたことがわかるまでしばらくスリープできますか?これは非常に不安定なようですので、やりたくありません。

私がやろうとしたSetWindowsHookExのは、DLLでグローバルWndProcをフックするために使用することでした。ウィンドウからメッセージが見つかるまで(つまり、メッセージが作成されるまで)メッセージをスキャンできました。次に、ハンドルを保存してプログラムを続行できます。一度に同じ名前のウィンドウが複数あることについてはあまり心配していません。唯一の問題は、私のフックが呼び出されないことです。

私は次のようにフックを作成します:

これは有効なフックを返します。WndProcは次のようになります。

しかし、「WNDPROC」メッセージはログファイルに記録されません...以前は、ログのMessageBox代わりにログが機能するかどうかを確認していましたが、これはひどい考えでした。「OK」をクリックするのを待っていたため、すべてのプログラムがフリーズし、ハードリセットを実行する必要がありました...コンピュータの電源を入れ直してMessageBoxログコマンドに置き換えたところ、機能しませんでした。ただし、ログは他のすべての場所で機能するため、ログが機能することはわかっています。私はこれで何が起こっているのか非常に混乱しています。

メインウィンドウを取得する他の方法はありますか(できれば作成時に)?または、私のフックメソッドは良いのですが、実行が間違っていますか?フィードバックありがとうございます。

0 投票する
1 に答える
376 参照

c++ - explorer.exe で NotifyIcon のコンテキスト メニューを変更するにはどうすればよいですか?

デフォルトの Speakers 通知 (トレイ アイコン) の右クリック コンテキスト メニューを新しい項目で拡張したいと考えています。また、C++ を使用してマウスクリックを処理したいと考えています。

ここに画像の説明を入力

私がこれまでに知っていること

CreateRemoteThread()を使用して dll を注入する方法を学びました。私の問題は: 挿入された dll 内で何をすべきか? たとえば、NotifyIcon オブジェクトにアクセスする方法は?

単純な Windows API 呼び出しで可能かもしれませんが、私はそれに慣れていません。

0 投票する
1 に答える
1328 参照

c++ - dllの挿入がWindowsXPで機能しない

だから、ゲームクライアントをフックするために使用する私のdllを注入するインジェクターを作ろうとしていDetoursます、それは簡単です、しかし私はそれがうまくいくのに何が間違っているのかわからないという問題がありWindows Vista+ます...これが私のコード

どちらもVC++2010で構築されているため、動作するはずですが、Windows XPではゲームを起動しますが、dllが挿入されていません。Idkここで何が問題になっていますか。

編集:それは私のXPにMSVCR100D.DLLがないためだと思いますが、dllがそれに依存しないようにする方法はありますか?

0 投票する
1 に答える
9485 参照

c++ - 実行時に読み込まれる DLL のインポート アドレス テーブルを変更する方法

実行時にロードされた DLL から呼び出される関数をフックしたいのですが、「Windows Via C/C++」という本のクラス CAPIHook を使用しました (Install System Wide フックによって行われる DLL インジェクションと、Modify IAT によるフック) が、これはコードは、実行可能ファイルの IAT に DLL 名/シンボルが存在する場合にのみ機能します。(つまり、暗黙的な DLL リンクの場合)

これは DLL コードです:

これはフック関数です:

IAT の交換方法:

作成者はこの機能を追加するためにコメントを追加しましたが、その方法がわかりません

注: 関数は、エクスポート モジュールが既に読み込まれている場合にのみフックできます。解決策は、関数名をメンバーとして保存することです。次に、フックされた LoadLibrary* ハンドラーで、CAPIHook インスタンスのリストを解析し、pszCalleeModName がロードされたモジュールの名前であるかどうかを確認して、そのエクスポート テーブルをフックし、ロードされたすべてのモジュールのインポート テーブルを再フックします。

彼はこれも本に書いていますが、どうすればいいのかわかりません

考えられる解決策は、フックされた LoadLibrary* 関数を使用して、モジュールがパッチが適用されていないフックされた関数をエクスポートしていることを検出し、次に 2 つのアクションを実行することです。

GetProcAddress を呼び出して、フックする関数の元の実装へのポインターを取得できるようになったため、既に読み込まれているモジュールのインポート テーブルを再度フックします。関数の名前をクラス メンバーとして格納し、コンストラクターで設定する必要があることに注意してください。

ReplaceEATEntryInOneMod 関数の実装によって示されるように、エクスポート モジュールのエクスポート アドレス テーブルでこのフック関数を直接更新します。そうすれば、フックされた関数を呼び出すすべての新しいモジュールがハンドラーを呼び出します

DLL のロード後に IAT を変更しようとしましたが、フック関数が呼び出されませんでした

では、このコードを変更して動的ローディングケースを処理するにはどうすればよいですか?

0 投票する
1 に答える
2627 参照

c++ - Win7のリモートプロセスからPEBを取得する

仕様:Windows 7 x64、Visual C ++

目的:サンプルプログラム(calc.exeなど)からリモートPEBを取得しようとしています。proc IDを見つけ、すべての適切な権限でプロセスへのハンドルを開きました。次に、PROCESS_BASIC_INFORMATIONを使用してプロセスからPEBの場所を取得するクラスの作成に移りました。

問題: NtQueryInformationProcessがMSでたわごとに変わったことを示しているように見えるいくつかの投稿を他の場所で見つけました。ある投稿は、ntdll.dllからNtQueryInformationProcessを動的ランタイムリンクする方法を提案しています。ただし、これは長期的には不安定であり(MSは明日NtQueryInformationProcessを削除する可能性があります)、広範なエラー処理が行われないと思います。

このアイデアはこのスレッドの後半で実現され、Mike2343によって「他の方法を使用する」ことが提案されています。

質問:NtQueryInformationProcessを含まないリモートプロセスのPEBを見つける別の方法は何でしょうか?

これを見て時間を費やしてくれた人に感謝します。

0 投票する
1 に答える
1467 参照

process - Windows プロセスへのフック

アプリケーションの起動直後と終了直前にいくつかの操作を実行する必要があります (UMDH を使用したある種の自動メモリ リーク検出)。

すべてのプロセスに挿入される DLL を準備し、DLL_PROCESS_ATTACH で最初の操作を実行しています (アプリケーションの起動直後)。これで、問題のこの部分は解決されました。

問題は 2 番目の部分にあります。プロセスが終了しようとしているときに操作を実行します。

DLL_PROCESS_DETACH で試してみましたが、これでは遅すぎます。以前にフックする必要があります。

Windows フック メカニズムを使用して、WH_GETMESSAGE にフックしました。

GetMsgProc() 関数:

しかし、この方法を使用すると、WM_CLOSE メッセージのみが検出されます (「X」ボタンを使用してアプリケーションを閉じるとき)。WM_QUIT メッセージを検出しない理由がわかりません。

アプリケーションが終了しようとしているときにいくつかの操作を実行する方法はありますか?

(私は回り道について知っていますが、私のプロジェクトでは使用できません...)

0 投票する
1 に答える
4026 参照

winapi - 挿入されたDLLをターゲットプロセスからアンロードする方法、完了したらDLLからアンロードする方法は?

CreateRemoteThread/LoadLibraryメソッドを使用して自分自身を挿入するDLLがあります。

DLLのデバッグと開発時に、ターゲットアプリケーションを終了して再起動する(ロード時間は10〜20秒)のは面倒なので、コードの動作を確認したらDLLをアンロードして、再コンパイルします。 /再注入します。

上記のDLLをロードおよびアンロードするためのフレームワークを使用して新しいDLLを作成することは避けたいと思います。

これはどのように可能ですか?

0 投票する
1 に答える
171 参照

c# - フックとメインプログラムの通信

特定の機能を他のプログラムに追加したり、プログラムの動作を変更したりするためのフックの作成方法に関する情報が記載された記事が多数あります。しかし、フックからプログラムにデータを送信するにはどうすればよいかわかりません。

私の英語はあまり得意ではないので、小さな例を書きます: 私のアプリケーション (myApp) と私のアプリケーション (notMyApp) ではありません。notMyApp のチャット ウィンドウから myApp テキストにアクセスしたい。たとえば、 MHOOKを使用して notMyApp のフックを作成できます。問題は、フックから myApp にチャット テキストを送信する方法です。

パイプなどを使用する必要がありますか?

PS私はC#を使うことを好みます