問題タブ [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 - ユーザーコール機能をフックしていますか?
VM_Create で関数のアドレス (systemCalls) を仮想マシンに渡す仮想マシンがあります。
そこで、VM_Create をフックして syscalls アドレスを盗み、それをバックアップ関数ポインターに入れます。変更した systemCalls 関数のアドレスが元の VM_Create に渡され、そこから引数を変更したり、呼び出しを追加または削除したり、backed- up syscalls 関数。ゲームの新しいリリースまで、それはうまくいきました。
私は問題を発見したと信じています:
これは、変更されていない systemCalls 関数の始まりです。
これは私の変更された syscall 関数です:
問題は、変更された関数から元の関数を呼び出すことです。
すでに失敗しています。
逆アセンブリの疑似コードからわかるように、CL_CgameSystemCalls の新しい定義は次のようです。
つまり、私が逆コンパイルを正しく解釈した場合、__usercall 属性を追加し、最初の引数をレジスタ ebx に入れることによって、関数が変更されたことを意味します。
今私の質問:
*args (args[0]) を変数に取得するにはどうすればよいですか?
そして、現在__usercallを使用している変更された関数から変更されていない関数を呼び出すにはどうすればよいですか?
これは、usercall を使用したシステムコールの逆アセンブリです。
そして、これは hexrays 逆コンパイラから作成された疑似コードです:
CL_CgameSystemCalls 関数の完全な (最新の既知の公式) ソースは、次の場所にあります (コピーして貼り付けるには多すぎます)。
http://ioqsrc.vampireducks.com/da/d3b/cl__cgame_8c-source.html
そして、これは古いバージョンの逆アセンブルで、変更された syscall から orig_syscall を呼び出すと機能しました。
c++ - C++ で GetTickCount をフックする
私は C++ が苦手で、C# と PHP の方が得意です。私はGetTickCount
、アプリケーションを使用してフックする必要があるプロジェクトを割り当てられました。何らかの理由で計画どおりに機能しないため、助けが必要です...フックのコードは次のとおりです。以前にプロジェクトで使用したことがあるため、機能することがわかっています。私がよくわからないのは、そのGetTickCount
部分だけです。私はGetTickCount64
それが私の問題の修正であると考えてみましたが(注入したものはクラッシュしませんでした)、代わりにまったく機能していなかったため、クラッシュしなかったことがわかりました。
ここに使用されるコードの残りの部分がありますGetTickCount
間違っていること、または変更する必要があることがわかりますか? どんな助けでも大歓迎です。ありがとうございました!
windows - レジストリインターセプトの代替手段を迂回する
読み取りを傍受して特定のレジストリキーにリダイレクトする方法を探しています。当然、迂回路はそれを行うことができます。しかし、商用アプリケーションにはそれが必要であり、MS$10,000のライセンス料は少し高すぎます。代替案はありますか?
windows - Where is my memory going?
We have been using Vmmap, and Processexplorer and MS Detours to analyze the memory usage in our program. Our goal was to validate our program's memory usage. For example, we know that we have X MB of data which we load from disk into memory, we want to make sure that we are not somehow using 2X MB of memory doing this.
However, we noticed the following discrepancies: - for a particular point during execution, Vmmap will report ~1310 MBs of private working set where Processexplorer will report ~1304 MBs (only 6MB off, but which one is "more" accurate...) - memory tracking with MS Detours will report ~948 MBs allocated from HeapAlloc calls, but Vmmap will say that the program is using ~1143 MBs of private heap
My question is, barring errors in our tracking code, and memory being mapped by drivers, can anyone explain how Vmmap and Processexplorer can capture more memory data than our MS Detours hooks?
Other notable calls which we have hooked into are: - VirtualAlloc - ZwAllocateVirtualMemory - RtlAllocateHeap - MapViewOfSection
Many thanks in advance!
.net - 回り道でVB6ボタンクリックイベントをインターセプト
ボタンのデフォルトのクリック動作をオーバーライドするために、独自の DLL を VB6 プロセスに挿入したいと考えています。目標は、私のメソッドを呼び出し、クリック イベント ハンドラーで元の VB6 コードを呼び出さないことです。
Microsoft Detours API が役立つようです。サンプルは、実行中のプロセスに DLL を挿入する方法を示しています。しかし、迂回すべき機能がわかりません。
Detours API の .Net ラッパーがあれば理想的です。
どんな助けでも大歓迎です。
c++ - C++/Windows API - CreateWindow が見つかりません
Visual C++ 2010 Express での私のプログラムの開始点は次のとおりです。
Visual C++ の IntelliSense は、見つからないことを示していますCreateWindowW
(Winuser.h の #define を見て、F12 キーを押して関数定義に移動できるにもかかわらず)。それもコンパイルされません。
何が起こっているのか分かりますか?
ありがとう、
マイク
c++ - 実行時に別の関数に基づいて関数を作成できますか?
私はMicrosoftのDetoursを使ってAPIをフックしています。たとえば、次のようにMessageBoxA
呼び出されたときに何が起こるかを変更できます。
したがって、を呼び出すときMessageBoxA
は、実際にを呼び出していMyMessageBoxA
ます。ここで、実行時に上記のコードが実行することを実行
する関数を作成します。Hook()
たとえば、関数ポインタMessageBoxA
を関数に渡すと、上記のコードとまったく同じように動作します。
もちろん、他の関数ポインタを渡すこともできます。
次に、で関数ポインターを取得するときに、指定された関数(この場合はto )とHook
同じ戻り値とパラメーターを使用して関数を定義し、関数の関数本体を埋めるにはどうすればよいですか?MessageBoxA
int WINAPI MyMessageBoxA(HWND hWnd, LPCTSTR lpText, LPCTSTR lpCaption, UINT uType)
c# - オリジナルの関数呼び出しを持つ EasyHook
EasyHook ライブラリを使用して目的のプロセスにコードを挿入し、特定の dll からの呼び出しをインターセプトするアプリケーションを開発しています。私の場合、ライブラリは Oracle Call Interface、OCI.dll です。クライアント側で SQL クエリ ログを作成するために、実行された SQL ステートメントをインターセプトしたいと考えています。以前は Microsoft detours (バージョン 2.1) を使用していましたが、ライセンス上商用利用が許可されておらず、バージョン 3.0 は高額です。EasyHook ライブラリを使い始めました。配布された例のコードを変更して、kernel32.dll から関数 CreateFileW をインターセプトし、oci.dll の関数 OCIStmtFetch2 で動作するように調整しました。
ヘッダー ファイルまたは oci ライブラリを持っているので、関数のパラメーターと戻り値の型を正確に知っています。ヘッダーファイルによると、署名は次のとおりです。
剣 OCIStmtFetch2 ( OCIStmt *stmtp, OCIError *errhp, ub4 nrows, ub2 向き, ub4 scrollOffset, ub4 モード);
Oracle から提供された他のヘッダー ファイルによると、OCIStmt は構造体であり、OCIError はエラー関数のハンドルです。ub2 と ub4 は、unsigned short (16 ビット) と unsigned int (32 ビット) の typedef です。Sword は、signed int (同じく 32 ビット) への typedef です。
ご覧のとおり、ub4 を UInt32 に、ub2 を UInt16 に、sword を Int32 にマッピングしました。最初はポインター (最初の 2 つのパラメーター) に IntPtr を使用しましたが、コードが正しく動作しませんでした。挿入された dll インターセプト関数呼び出しは完全に、元の関数の前にコードを実行でき、元の関数を呼び出すことができ、期待値を返しますが、return E が実行されると、ターゲット アプリケーションでメモリ違反例外が発生して終了します。コードでわかるように、void* ポインターと unsafe キーワードを使用して、C# でポインターを操作できるようにしましたが、結果は同じでした。Detours ライブラリを使用したコードと比較すると、デバッガーを使用して確認できるパラメーターとポインター値は両方のライブラリーで同じであるため、型マッピングは適切に見えます。それにもかかわらず、DOCIStmtFetch2_Hooked から戻るとコードが壊れます。
誰が何が間違っているのか知っていますか? タイプマッピングは問題ないと思いますが、エラーのせいにしています。
よろしく。
ソースを短くするためにロック部分を外しました。キューをロックするかどうかに関係なく、問題は残ります
c++ - MS迂回で複数のDLLを注入することは可能ですか?
C++ では、複数の dll をプロセスにフックしたいと考えています。現在、一度にCreateProcesswithdll()
1 つの API しかフックできないものを使用しています。複数の dll を挿入するにはどうすればよいですか?
MS detours では、API 呼び出しを適切に迂回するために、カスタム dll に元の dll と同じ名前を付ける必要があるため、この問題に遭遇しました。したがって、作成した同じ迂回 DLL で異なる API 呼び出しを処理することはできますが、異なる API からの呼び出しをフックするには、異なる名前を付ける必要があります。つまり、異なる迂回 Dll が必要です。これは、さまざまな DLL を挿入する必要があることも意味します。私は正しいですか?
不明な点がある場合は、より明確に提示しようとします:D
ありがとう!
PS:私の問題をより明確にするためです。同じプロセスに複数の dll を挿入する必要があります。CreateProcesswithdll()
スレッドがスリープ状態の新しいプロセスを作成します。これは、回り道が dll の注入とフックの設定を完了した後に起こされます。複数のdllを注入したい場合、明らかに繰り返し呼び出すことはできませんCreateProcesswithdll()
それで、私は何をしますか?? またはこれのいくつかの側面についての私の理解は間違っていますか?
c++ - MS Detours 2.1 - Unresolved externals
I'm using MS Detours 2.1 Library and VS 2010. I'm trying to detour PlaySoundW function.
I can't compile that code and I'm getting these errors:
Error 2 error LNK1120: 1 unresolved externals (...)\detoursLearning.dll detoursLearning
Error 1 error LNK2001: unresolved external symbol __imp__PlaySoundW@12 (...)\detoursLearning\main.obj detoursLearning
My code:
#xA;One more thing, can you explain me this:
#xA;