2011-07-03 12 views
1

私はC++ DLLのソースコードを持っています。このDLLは、アプリケーションの一部です。私は、私のフック関数は、元の関数の代わりに他のすべてのDLLによって呼び出されるように、別のDLLによってメモリに読み込まれた関数をフックしたい。私は私のコードにこのコードを置く:DLLのソースコード内のC++関数フック

#include <windows.h> 
#include "detours.h" 
#pragma comment(lib, "detours.lib") 

//Function prototype 
int (__stdcall* OriginalFunction)(); 

//Our hook function 
int FunctionHook() 
{ 
    //Return the real function 
    return OriginalFunction(); 
} 

//On attach set the hooks 
OriginalFunction = (int (__stdcall*)())DetourFunction((PBYTE)0x0100344C, (PBYTE)FunctionHook); 

質問です:私は、オフセットとオフセットこれにより、機能にパッチを適用するためにONE DLLで検索した場合(私はだから、それはより複雑だ、それは間違ってないと思います別のDLLで、すべてのDLLの関数をフックしたいですか?)ところで、誰かがIDA PROの標準(fx。0x0100344C)オフセットを得る方法を知っていますか?

答えて

0

WindowsプラットフォームのフックシステムであるMicrosoftの迂回路を使用しようとしているようです。 Detoursは「トランプラインフック」を使用しています。簡単に言えば、関数のフロントのいくつかのASM命令を「書き直し」、実際の呼び出しを特定の関数にリダイレクトしようとします。 Detoursはこれらの詳細を処理するのに役立ちます。しかし、私は迂回路に関するコードはありませんので、基本的な迂回路に関する迂回路に関するドキュメンテーションを学ぶ必要があると思います。


OriginalFunctionは特定のアドレスへの単なる可変ポイントです。この変数を書き換えても、実際の呼び出しには影響しません。あなたはプログラムが元のアドレスを使用して依然として呼び出すので、内部プログラムではなく変数を変更するだけです。
Windows NTのプログラムが実際のメモリアドレスではなく仮想アドレスを使用しているため、メモリーをフック関数に書き換えると、この通常の処理は現在のプロセスに影響します。

+0

すべてのDLLは1つの進捗状況にあり、DedicatedServer.exeです。メモリを上書きすることによって関数をフックする方法は? –

+0

[http://xulrunner-1.9.2.sourcearchive.com/documentation/1.9.2.13plus-pbuild1plus-pnobinonly/nsWindowsDllInterceptor_8h-source.html]を参照してください。これは、 "trampline hook"を使用するmozillaソースコードです。 。ただし、Detourを使用できる場合は、自分でコードをハックすることはお勧めしません。 – winterTTr

+0

この参照は、構文のハイライト[https://bitbucket.org/MeeGoAdmin/mozilla-central/src/ace9b0ca623c/toolkit/xre/nsWindowsDllInterceptor.h]でより明確になると思われます。 – winterTTr

関連する問題