問題タブ [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.
delphi - TSemaphor コントロールの色の変化を検出するには?
システムの準備ができているかどうかを示すフレームで囲まれた小さなテキスト ボックスがあるアプリケーション A があります。テキストとフレームは、DelphiTSemaphor
コントロール内にあります。
- 初期化中、フレームは黄色です。
- 初期化が完了し、システムの準備が整うと、フレームが緑色に変わります。
別のアプリケーション B では、アプリケーション A が初期化されて準備が整ったことを検出する必要があります。
アプリケーションAでこれを行うにはどうすればよいですか(フレームの色の変化を検出する)、最小限の労力で、次の制約の下で
- アプリケーション A は変更できません (ソース コードがありません)。
- アプリケーション A には自動化インターフェースがなく、
- アプリケーション A の準備が整ったときに発生する唯一の変化は、色の変化です。
?
私が知っているこの問題を解決するには、次のアプローチがあります。
- 画像認識を使用する (http://sikuli.org/)
- それぞれの位置にあるピクセルの色を見つけます。
- 挿入された DLL を使用して、TSemaphore 属性にアクセスします。
delphi - 64 ビット dll から 64 ビット プロセスへの Delphi xe3 dll インジェクションが機能しない
このコードを使用して、64 ビット dll を Windows 7 64 ビットの 64 ビット プロセスに挿入しています。CreateRemoteThread は 200 を返しますが、それでも dll は挿入されません。別のソースで dll をテストしたところ、問題なく動作しました。Process Explorer は、私のコードが動作しません。このコードの何が問題なのですか。私は Delphi XE3 を使用しており、64 ビット ターゲット プラットフォームでコードをコンパイルしました。
winforms - P/Invoked ShowCursor returns to 0
An application I'm writing needs to send a message to another application to make the cursor visible. The vast majority of my experience in programming is in C#, and I've managed to write a DLL Injector that allows me to inject managed code using CreateRemoteThread. Inside the DLL I'm injecting is a P/Invoked call to ShowCursor. This seems to have no effect however, and using a StreamWriter to check the value of what ShowCursor returns shows that while the function is successful and the display counter increments, at some other point the counter returns to 0. (Which should be displaying the cursor anyway, now that I think about it.)
What important piece of information am I missing? Do Windows Forms have some functionality that prevents me from changing the cursor like this? Is ShowCursor tied to the thread it's running in, so it reverts upon completion? Or is it something completely different?
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 を挿入すると、フォームが開きます。しかし、私がそれを行うときの問題は、私が注入したプロセスが行き詰まり、彼に気付かれません.
ここで私がしたこと。
そして注射:
@レミー・ルボー: