1

Deviare2 は、MS Windows 上のプロフェッショナルな API フック ライブラリです。それは使いやすく、強力です。しかしWriteFile、C# ダミー ライターを使用してフックしようとすると、2 回フックされることがわかりましたWriteFile。API Monitor を使用してダミー ライターをフックしようとしましたが、API Monitor はすべての書き込み呼び出しに対して 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();
4

1 に答える 1

0

API は 2 回フックされませんが、コールバックは 2 回呼び出されます。元の API が呼び出される前に 1 つ、その後に 1 つ。

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

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

于 2016-11-16T14:18:01.380 に答える