1

私はまだフックとイージーフックの仕組みを完全に理解しようとしています. 簡単な例を書きました: webbrowser 要素を含むフォームで、そこから行われた recv 呼び出しをフックしようとしています。コンパイル時に、プログラムは次のエラーを返します。

A first chance exception of type 'System.NotSupportedException' occurred in EasyHook.dll
System.NotSupportedException: STATUS_NOT_SUPPORTED:  (Code: 0)
   at EasyHook.NativeAPI.Force(Int32 InErrorCode)
   at EasyHook.RemoteHooking.InjectEx(Int32 InHostPID, Int32 InTargetPID, Int32 InWakeUpTID, Int32 InNativeOptions, String InLibraryPath_x86, String InLibraryPath_x64, Boolean InCanBypassWOW64, Boolean InCanCreateService, Object[] InPassThruArgs)
   at EasyHook.RemoteHooking.Inject(Int32 InTargetPID, InjectionOptions InOptions, String InLibraryPath_x86, String InLibraryPath_x64, Object[] InPassThruArgs)
   at Hook_Test.Form1.Run() in I:\Documents and Settings\Meme\Desktop\SimpleHook\Hook Test\Hook Test\Form1.cs:line 46

46 行目に、次のコードがあります。

            RemoteHooking.Inject(
                Process.GetCurrentProcess().Id,
                InjectionOptions.Default,
                "TestInject.dll",
                "TestInject.dll",
                ChannelName);

どこに問題があるのか​​ よくわかりません。誰か助けてもらえますか?

4

1 に答える 1

2

RemoteHooking クラスの Inject メソッドのドキュメントには、次のように書かれています。

デバッグ目的で現在のプロセスにライブラリを挿入することが技術的に可能である場合でも、例外がスローされます。これは、現在のプロセスが破損するかどうかが、注入されたライブラリに大きく依存するためです。間違った API をフックすると、あらゆる種類の通信でデッドロックが発生する可能性があります。Visual Studio の機能を使用して複数のプロセスを同時にデバッグするだけで、副作用が発生することなく現在のプロセスに挿入されたかのようにライブラリをデバッグできます。

これは仕様によるもののようです。プロジェクトを 2 つのアプリに分割するか、シェルまたはスレッドを使用して (少なくとも) 現在のプロセスの外部にあるもののインスタンスを起動する必要がある場合があります。

于 2011-01-25T09:50:57.007 に答える