問題タブ [detours]
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.
c++ - 注入されたプロセスからのHDCの追跡
私はかなりのジレンマに直面しています。DLLを他のプロセスに挿入し、そこからいくつかのWinAPI呼び出し、具体的にはExtTextOutW @ GDI32、DrawTextExW @ GDI32、AlphaBlend@Msimg32をフックしました。さて、問題は、他のアプリケーションがこれら2つのGDI32関数を使用して何かを書き込んだときに、それが表示される正確な場所がわからないことです。これは、テキストを含むDCがAlphaBlendで処理され、最終的にウィンドウのDCに配置されるためです。
では、どうすれば特定のHDCを追跡できますか?擬似コードでは、他のアプリケーションが画面にテキストを描画する方法は次のとおりです。
私が言ったように、AlphaBlendの前にストリングが新しいDCを取得するので、元のhでトラックを失います。任意のアイデア、特定の文字列を含むh> h2から接続を確立するにはどうすればよいですか?
問題をきちんと説明できたかどうかわかりませんが、ご不明な点がございましたらお問い合わせください...
c++ - c++d3dフッキング-COMvtable
Frapsタイプのプログラムを作成しようとしています。失敗する場所についてはコメントを参照してください。
c++ - DetourAttach(&(PVOID &)BindKeyT, BindKeyD); とは何ですか? 平均?メモリアドレスに迂回を付ける
これは簡単な質問です。私は、メモリ内のサブルーチンへのアドレスDetourAttach(&(PVOID &)BindKeyT, BindKeyD);
がどこにBindKeyT
あるかを使用して、サブルーチンのメモリアドレスに接続するもののソースを読んでいます。興味があるのですが(&(PVOID &)
、英語で正確には何を意味するのでしょうか? それが void ポインターであることは理解してPVOID
いますが、これはどのようにして迂回を追加するために使用できる関数に変換されるのでしょうか?
c++ - 迂回した関数から元の関数を呼び出す必要がある
Detours を使用して実行可能ファイルのメッセージ関数にフックしていますが、独自のコードを実行してから元のコードを呼び出す必要があります。私が Detours のドキュメントで見たものからすると、それは間違いなく自動的に行われるように思えます。元の関数は画面にメッセージを出力しますが、迂回を追加するとすぐにコードの実行が開始され、出力が停止します。
元の関数コードは大まかに次のとおりです。
私の機能は次のとおりです。
元の関数が存在するメモリ位置を知っているので、次を使用します。
関数に私を取得します。このコードはほぼ完全に機能します。関数は適切なパラメーターで呼び出されます。ただし、実行は関数を離れ、元のコードは呼び出されません。jmping を再試行しましたが、プログラムがクラッシュします (フックに合わせて Detours が移動したコードがクラッシュの原因であると想定しています)。
編集:プログラムの実行に戻ることなく、最初の問題を修正できました。OrigPos 値を関数として呼び出すことで、「トランポリン」関数に移動し、そこから元のコードに移動できます。ただし、どこかでレジスタが変更されているため、元のコードに戻るとすぐにプログラムがセグメンテーション違反でクラッシュします。
Edit2:最終的な作業コード:
DetourAttach の最初のパラメーターに TrueAddr を使用します。
c++ - Microsoft Detours - DetourUpdateThread?
Microsoft Detours Library についていくつか簡単な質問があります。以前に(成功して)使用したことがありますが、この機能について考えただけです:
LONG DetourUpdateThread(HANDLE hThread);
この関数は、トランザクションが完了するまで実際にスレッドを中断することを他の場所で読みました。ほとんどのサンプル コードが次のように呼び出しているため、これは奇妙に思えます。
DetourUpdateThread(GetCurrentThread());
とにかく、どうやらこの関数はスレッドを「登録」して、トランザクションがコミットされたとき (および迂回が行われたとき) に、それらの命令ポインターが「ターゲット関数またはトランポリン関数のいずれかの書き換えられたコード内」にある場合に変更されるようにします。
私の質問は次のとおりです。
トランザクションがコミットするとき、現在のスレッドの命令ポインターは DetourTransactionCommit 関数内にあるでしょうか? もしそうなら、なぜそれを更新するためにわざわざ参加させる必要があるのでしょうか?
また、参加しているスレッドが中断されている場合、現在のスレッドはどのようにして実行を継続できますか (ほとんどのサンプル コードが DetourUpdateThread(GetCurrentThread()); を呼び出すと仮定すると)?
最後に、現在のプロセスのすべてのスレッドを一時停止して、競合状態を回避できますか (スレッドはいつでも作成および破棄される可能性があることを考慮して)。おそらく、これはトランザクションの開始時に行われますか? これにより、スレッドをより安全に列挙することができます (新しいスレッドが作成される可能性は低いと思われるため) が、CreateRemoteThread() はどうでしょうか?
ありがとう、
ポール
参考までに、簡単なサンプルからの抜粋を次に示します。
detours - C/C++ Detours ライブラリ - どこにありますか?
「HookEngine/CDetours.hpp」を含むコードにたどり着き、少しの情報を検索して、それが Microsoft Project であることに気づきましたが、探しているものが見つかりません。Express Edition をダウンロードしましたが、この Edition には HookEngine が含まれていません。
c++ - Dev-C++ と Detours のコンパイル エラー
タイトルにあるように、Dev-C++ で Detours を使用して単純な DLL をコンパイルしようとしていますが、次のエラーが発生します。
この行で:
完全なコードは
.net - 実行時に .NET メソッド呼び出しを新しいメソッドにリダイレクトできますか?
次の .NET クラスがあるとします。
と
これら 2 つのクラスは、異なるアセンブリ内の異なる名前空間に存在します。へのすべての呼び出しをC.M()
自動的に「リダイレクト」する方法はありD.N()
ますか? したがって、呼び出し元のメソッドは invokingを処理しますC.M
が、実際にD.N
は、実際に呼び出されるのは、取得したパラメーターを使用しC.M
てです。これがクラスのすべてのインスタンス化で発生するか、特定の 1 つのオブジェクトだけで発生するかは問題ではありません。
MS Research には、通常の Win32 DLL エクスポートと非常によく似た処理を実行できるDetours Libraryがあります。.NET メソッドでこれを行う方法を探しています。
c++ - メモ帳での書き込みテキストのフックに回り道を使用する
メモ帳などでテキスト出力をフックするために回り道を使用しようとしています。
次のコードを書きました。すべてのコードをここに記載するわけではありませんが、最も重要な部分を記載します。
DLL 部分:
クライアント部分:
問題は、テキストを描画する 4 つの関数すべてがフックされていないことです。私は何を間違っていますか。回り道の勉強を始めましたが、ドキュメントで私の質問に対する答えが見つかりませんでした。
コードの他の部分が必要な場合は、後でここに配置します。
c - C - エクスポートされた関数なしで外部プロセスから関数を呼び出す
関数をエクスポートせずに呼び出す方法を見つけようとしています。
さて、「add」が定義されたexeファイルがあります。このexeはwin32コンソールアプリケーションで、DLLをロードします。DLL は、exe ファイルから追加機能を使用することも目的としています (エクスポートなし)。
これが私のメインの win32 コンソール アプリケーション ファイルです。
hook.dll のコードは次のとおりです。
add 関数のアドレスを見つけるために、win32 コンソール アプリケーションを逆アセンブルしました。
問題は、LoadLibrary を呼び出すと、エラー コード アクセス違反であると思われる 998 が返されることです。そのメモリ領域はおそらく保護されているので、これは理にかなっていると思います。
任意のヒント?
(また、私が使用した逆アセンブラは Ida Pro フリー版で、迂回ライブラリは Microsoft から提供されています。)