問題タブ [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 投票する
2 に答える
785 参照

windows - カーネル ドライバーを使用して自分のドライバーが最初に読み込まれるライブラリであることを確認した場合、DllMain から LoadLibrary を呼び出しても安全ですか?

私は、ライブラリを特定のプロセスに選択的にロードし、特定のネイティブ API 関数を (Detours を使用して) フックするフック コードを見てきました。イベントのチェーンは次のようになります。

  • カーネル ドライバーは、すべてのプロセスにA.dllを読み込みます。
  • A.dll ::は、実際の Detours フックを含むB.dll ( )DllMain()をロードするかどうかを決定します。LoadLibraryEx
  • B.dllは、上記の関数をフックするプロセスの間実行されます。

ここの 2 番目の箇条書きは、ここで指定されている DllMain の規則に違反しているように見えますが、ドライバーの読み込み方法A.dllが制限を回避できるかどうかを調べようとしています。具体的には、カーネル ドライバーはPsSetLoadImageNotifyRoutine、各プロセスの開始時に通知を取得するために使用し、APC を呼び出しLoadLibraryExてキューに入れますA.dll。これは、プロセスの開始時に最初にロードされる DLL であることを意味します。LoadLibraryこれにより、内での呼び出しに関する問題が回避されますDllMainか?

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

c++ - Dll インジェクションは、Visual Studio から開始されていない場合にのみ機能します

CreateRemoteThread を使用して既存のプロセスに DLL を挿入しようとしています。問題は、アプリケーションが Visual Studio 2010 内から開始されたときに、単純に機能しないことです。

DLL インジェクションは次のように機能します。

  1. 手動で起動する場合(エクスプローラーから)

  2. 手動で開始し、インジェクションの前に VS 2010 デバッガーを接続する場合。

Visual Studio 2010 でデバッグ開始 (F5) を選択すると、CreateRemoteThread が OK を返します。挿入されたプロセスで LoadLibraryA にブレークポイントを配置したところ、ヒットしました。したがって、スレッドは開始されますが、DllMain 関数には到達しません。LoadLibraryA は実行されますが、モジュールはロードされません。

注入コード:

そして DllMain コード:

手伝ってくれてありがとう!

編集:

LoadLibraryA にブレークポイントを配置するために ollyDbg を使用しました。アセンブリ命令 "ret" を GetLastError の呼び出しに置き換えたところ、EAX レジスタに次の値が得られました: 126. MSDN からのシステム エラー コード 126 は、ERROR_MOD_NOT_FOUND (指定されたモジュールが見つかりませんでした) を意味します。Visual Studio がインジェクション アプリを実行しているときにのみ発生するのは非常に奇妙です。

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

crash - win7 での ring0 APC DLL インジェクション クラッシュ ターゲット プロセス

ring0 dll インジェクター ドライバーを実装し、APC インジェクションで実装しようとしています。コードはwin XPで完全に機能します。win7 では、ターゲット プロセスがクラッシュし続けます。

コードは次のとおりです。

injectDll は、DeviceIoControl サービス ルーチンによって呼び出されます。

これは、ターゲット プロセスのクラッシュ スタック トレースです。

何か案が?

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

directx - DirectX へのインターセプト コールを停止する方法

Intercept Calls to DirectX with a Proxy DLLというタイトルの記事を読みました。これは DLL プロキシ インターセプト コールを使用し、DirectX のオーバーレイを取得できます。

私はいくつかの DirectX アプリケーションを作成していますが、他の人がこの方法で変更することを望んでいません。どうすればこれを防ぐことができますか?

元の DLL を確認することでそれを行うことができますか?また、その方法は?

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

windows-7-x64 - CreateRemoteThreadがERROR_ACCESS_DENIEDで失敗する

dllインジェクションの基本を学ぼうとしているので、オンラインで見つけたコードに基づいて、非常に単純なhello-worldタイプのDLLとインジェクターを作成しました。箱から出してすぐに使えるものを見つけることができなかったので、いくつかの調整を行う必要がありました。

インジェクションコードDLLコード

私はこれらを64ビットウィンドウで実行しています。Visual Studio 2010でコンパイルしています。インジェクターはwin32コンソールアプリであり、dllもwin32です。コードを既存のメモ帳プロセス(これも32ビット)に挿入しようとしています。これらはすべてWindows7x64で実行されています。

インジェクターを実行すると、毎回失敗しCreateRemoteThreadGetLastError5(つまり)が返されERROR_ACCESS_DENIEDます。dllパスが正しいことを確認し(偽のパスに変更しても同じ動作が得られます)、CheatEngineを使用してパスがメモ帳のメモリの正しいアドレスに書き込まれていることを確認しまし。問題をさらにデバッグする方法がわからないため、これに苦労しています。

CreateRemoteThreadが失敗する原因は何ですか?

0 投票する
0 に答える
429 参照

c# - インジェクトされたプロセスをデバッグする

VC++ DLL を介して WPF アプリケーションに挿入される DLL のデバッグに問題があります。注入はうまくいきます。最初から問題までのガイド:

  1. WPF テストアプリケーション (.Net 4.0 / x86) のデバッグを開始します。
  2. 開始後ButtonClickEvent、小さな ConsoleApplication が開始され、C++ 関数を介して注入が開始されます。 3. テスト目的で、プログラムはDebugger.Break()呼び出しで停止します。ここまでは大丈夫。
  3. 前に進めようとすると、まだ機能していforeachますが、注入された DLL によって管理されるループまたは別のクラスへの呼び出しに到達すると、デバッガーはすぐに動作を停止し、WPF アプリケーションは閉じられます。

BreakPoint で停止せずにこれらのコードを実行すると、エラーは発生しません。何が原因なのかわからないので、解決策を教えていただければ幸いです。

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

c++ - dll インジェクション用の Win32 フォーム

フォームを含む dll を作成しました。dll を挿入すると、フォームが開きます。しかし、私がそれを行うときの問題は、私が注入したプロセスが行き詰まり、彼に気付かれません.

ここで私がしたこと。

そして注射:

@レミー・ルボー:

0 投票する
3 に答える
1122 参照

c++ - DLLインジェクション| GetProcAddressはNULLを返します

了解しました。早くするようにします。別のプロセスでDLLを挿入する方法を学習しようとしています。現時点では、電卓を開いたときにメッセージを出力するタイミングを検出しようとしています。私は次のDLLを作成しました:

そして、これが私のインジェクターです(まあ...それは現時点でDLLをロードしようとしているだけです)。

何か案は?

編集:これはコードの100%ではありません。DLLMainのような明らかなものや、問題と直接相互作用しないものをすべて取り出しました。

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

c - DLL インジェクターが機能しない (64 ビット コンパイラ)

私はまだ同じプロジェクトに取り組んでいます (なぜ私がそんなに多くの質問をするのか不思議に思っているかもしれません)。

プロジェクトはエラーなしで正常にコンパイルされますが、インジェクターはエラーなどを発生させることなく機能しません。ソースは次のとおりです。

私もデバッグしましたが、奇妙な値は得られませんでした:

別の DLL インジェクター (インターネットから) で正常に動作するため、DLL に問題はありません。

編集:ダミー/テストアプリケーションでは正常に機能しますが、たとえばメモ帳では機能しません(サードパーティのインジェクターを使用すると機能します)。

うまくいけば、誰かが私を助けてくれます、よろしく

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

c++ - cout と printf はリリースされていないデバッグに組み込まれた Dll で動作します

通常は SetWindowHookEx を介してコンソール アプリケーションに挿入される DLL を作成しました。私が std::cout で行ってきた情報を DLL がコンソールに出力することは重要です。すべての cout 行が役に立たなくなるリリース モードで DLL をビルドしようとするまで、DLL は完成に近づいていました。dllmain 関数でプログラムをクラッシュさせる単純な null 逆参照を行うことで、DLL が挿入され、実行されていることを確認しました。std::printf と同じ話です。

この問題にアプローチする方法が本当にわかりません。リリース リンカーは何らかの形で依存関係を除外していますか?

MSVS 2010 とデフォルトのリリース/デバッグ構成セットアップを使用しています。デバッグ dll は約 5,137kb で、リリース dll はわずか 23kb です。