問題タブ [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.
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
か?
c++ - Dll インジェクションは、Visual Studio から開始されていない場合にのみ機能します
CreateRemoteThread を使用して既存のプロセスに DLL を挿入しようとしています。問題は、アプリケーションが Visual Studio 2010 内から開始されたときに、単純に機能しないことです。
DLL インジェクションは次のように機能します。
手動で起動する場合(エクスプローラーから)
手動で開始し、インジェクションの前に 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 がインジェクション アプリを実行しているときにのみ発生するのは非常に奇妙です。
crash - win7 での ring0 APC DLL インジェクション クラッシュ ターゲット プロセス
ring0 dll インジェクター ドライバーを実装し、APC インジェクションで実装しようとしています。コードはwin XPで完全に機能します。win7 では、ターゲット プロセスがクラッシュし続けます。
コードは次のとおりです。
injectDll は、DeviceIoControl サービス ルーチンによって呼び出されます。
これは、ターゲット プロセスのクラッシュ スタック トレースです。
何か案が?
directx - DirectX へのインターセプト コールを停止する方法
Intercept Calls to DirectX with a Proxy DLLというタイトルの記事を読みました。これは DLL プロキシ インターセプト コールを使用し、DirectX のオーバーレイを取得できます。
私はいくつかの DirectX アプリケーションを作成していますが、他の人がこの方法で変更することを望んでいません。どうすればこれを防ぐことができますか?
元の DLL を確認することでそれを行うことができますか?また、その方法は?
windows-7-x64 - CreateRemoteThreadがERROR_ACCESS_DENIEDで失敗する
dllインジェクションの基本を学ぼうとしているので、オンラインで見つけたコードに基づいて、非常に単純なhello-worldタイプのDLLとインジェクターを作成しました。箱から出してすぐに使えるものを見つけることができなかったので、いくつかの調整を行う必要がありました。
私はこれらを64ビットウィンドウで実行しています。Visual Studio 2010でコンパイルしています。インジェクターはwin32コンソールアプリであり、dllもwin32です。コードを既存のメモ帳プロセス(これも32ビット)に挿入しようとしています。これらはすべてWindows7x64で実行されています。
インジェクターを実行すると、毎回失敗しCreateRemoteThread
、GetLastError
5(つまり)が返されERROR_ACCESS_DENIED
ます。dllパスが正しいことを確認し(偽のパスに変更しても同じ動作が得られます)、CheatEngineを使用してパスがメモ帳のメモリの正しいアドレスに書き込まれていることを確認しました。問題をさらにデバッグする方法がわからないため、これに苦労しています。
CreateRemoteThreadが失敗する原因は何ですか?
c# - インジェクトされたプロセスをデバッグする
VC++ DLL を介して WPF アプリケーションに挿入される DLL のデバッグに問題があります。注入はうまくいきます。最初から問題までのガイド:
- WPF テストアプリケーション (.Net 4.0 / x86) のデバッグを開始します。
- 開始後
ButtonClickEvent
、小さな ConsoleApplication が開始され、C++ 関数を介して注入が開始されます。 3. テスト目的で、プログラムはDebugger.Break()
呼び出しで停止します。ここまでは大丈夫。 - 前に進めようとすると、まだ機能してい
foreach
ますが、注入された DLL によって管理されるループまたは別のクラスへの呼び出しに到達すると、デバッガーはすぐに動作を停止し、WPF アプリケーションは閉じられます。
BreakPoint で停止せずにこれらのコードを実行すると、エラーは発生しません。何が原因なのかわからないので、解決策を教えていただければ幸いです。
c++ - dll インジェクション用の Win32 フォーム
フォームを含む dll を作成しました。dll を挿入すると、フォームが開きます。しかし、私がそれを行うときの問題は、私が注入したプロセスが行き詰まり、彼に気付かれません.
ここで私がしたこと。
そして注射:
@レミー・ルボー:
c++ - DLLインジェクション| GetProcAddressはNULLを返します
了解しました。早くするようにします。別のプロセスでDLLを挿入する方法を学習しようとしています。現時点では、電卓を開いたときにメッセージを出力するタイミングを検出しようとしています。私は次のDLLを作成しました:
そして、これが私のインジェクターです(まあ...それは現時点でDLLをロードしようとしているだけです)。
何か案は?
編集:これはコードの100%ではありません。DLLMainのような明らかなものや、問題と直接相互作用しないものをすべて取り出しました。
c - DLL インジェクターが機能しない (64 ビット コンパイラ)
私はまだ同じプロジェクトに取り組んでいます (なぜ私がそんなに多くの質問をするのか不思議に思っているかもしれません)。
プロジェクトはエラーなしで正常にコンパイルされますが、インジェクターはエラーなどを発生させることなく機能しません。ソースは次のとおりです。
私もデバッグしましたが、奇妙な値は得られませんでした:
別の DLL インジェクター (インターネットから) で正常に動作するため、DLL に問題はありません。
編集:ダミー/テストアプリケーションでは正常に機能しますが、たとえばメモ帳では機能しません(サードパーティのインジェクターを使用すると機能します)。
うまくいけば、誰かが私を助けてくれます、よろしく
c++ - cout と printf はリリースされていないデバッグに組み込まれた Dll で動作します
通常は SetWindowHookEx を介してコンソール アプリケーションに挿入される DLL を作成しました。私が std::cout で行ってきた情報を DLL がコンソールに出力することは重要です。すべての cout 行が役に立たなくなるリリース モードで DLL をビルドしようとするまで、DLL は完成に近づいていました。dllmain 関数でプログラムをクラッシュさせる単純な null 逆参照を行うことで、DLL が挿入され、実行されていることを確認しました。std::printf と同じ話です。
この問題にアプローチする方法が本当にわかりません。リリース リンカーは何らかの形で依存関係を除外していますか?
MSVS 2010 とデフォルトのリリース/デバッグ構成セットアップを使用しています。デバッグ dll は約 5,137kb で、リリース dll はわずか 23kb です。