2016-11-16 7 views
0

Deviare2はMS WindowsのプロフェッショナルなAPIフックライブラリです。使いやすく強力ですが、C#ダミーライターを使用してWrtieFileをフックしたい場合は、WriteFileを2回フックしました。フックダミーライターにAPIモニターを提訴しようとすると、私はAPIモニターが各書き込みコールのフックを見つけたことを発見しました。それは有線です!Deviare2フックWriteFile APIを1回だけ書き込む

フックコード:

spyMgr = new NktSpyMgr(); 

NktProcess _process = GetProcess("DummyWriter.exe"); 

while (_process == null) 
{ 
    Console.WriteLine("wait for process start..."); 
    System.Threading.Thread.Sleep(10); 
    _process = GetProcess("DummyWriter.exe"); 
} 

hookDllGetClassObj = spyMgr.CreateHook("kernel32.dll!WriteFile", (int)(eNktHookFlags.flgOnlyPreCall)); 

hookDllGetClassObj.Attach(_process, true); 

hookDllGetClassObj.Hook(true); 
hookDllGetClassObj.OnFunctionCalled += OnDllGetClassObjectCalled; 

ダミーライト:

string key = ""; 

Task.Factory.StartNew(() => { 
    int index=1; 
    while (key == "") 
    { 
     using (StreamWriter sw = new StreamWriter("d:\\dummy.txt",true)) 
     { 
      string str = string.Format("{0}:oh gotcha!", index); 
      Console.WriteLine(str); 
      sw.WriteLine(str); 
      index++; 
     } 

     Thread.Sleep(500); 
    } 
}); 

key = Console.ReadLine(); 

答えて

0

APIは二回引っ掛かっていないが、コールバックが2回呼び出されます。元のAPIが呼び出される前と後で1つ。

パラメータNktHookCallInfoをチェックして、パラメータや結果を変更できるように、preまたはpostCallにいるかどうかを確認する必要があります。

BTW:Deviare InProcは、より古典的なフッキングスタイルを実行するエンジンです。

+0

フックを作成するときにeNktHookFlags.flgOnlyPreCallフラグを追加しました。hookDllGetClassObj = spyMgr.CreateHook( "kernel32.dll!WriteFile"、(int)(eNktHookFlags.flgOnlyPreCall));フックコールバックで再度チェックする必要がありますか? –

+0

私はそれをチェックしました、二度フックされたのはすべてpreCallです –

関連する問題