2010-12-03 50 views

回答

0

和SetWindowsHookEx不会在所有帮助 - 它提供了不同的功能。

检查https://web.archive.org/web/20080212040635/http://www.codeproject.com/KB/system/RegMon.aspx是否有帮助。 SysInternals的RegMon使用一个非常复杂的内核模式驱动程序。

更新:我们公司提供CallbackRegistry产品,让您可以无忧无虑地跟踪注册表操作。顺便提一下,我们可以根据要求提供免费的非商业许可证(需要根据具体情况进行审批)。

2

阅读上DLL注入这里的理论:http://en.wikipedia.org/wiki/DLL_injection

不过,我将向您提供一个DLL注入片段在这里:http://www.dreamincode.net/code/snippet407.htm

这是很容易,一旦你做这些类型的东西在外部应用程序的记忆中,注射后,您可能也是该过程的一部分。

这里有一些叫做绕行的东西,我相信它就是你要找的东西,它只是挂钩一个函数,当它被调用时,它会执行你自己的函数。 (要确保它不会崩溃,调用函数在你的函数结束)

所以,如果你想在CreateRegKeyEx

(http://msdn.microsoft.com编写自己的功能/en-us/library/ms724844%28v=vs.85%29.aspx)

它可能是这个样子:

LONG WINAPI myRegCreateKeyEx(HKEY hKey, LPCTSTR lpSubKey, DWORD Reserved, LPTSTR lpClass, DWORD dwOptions, REGSAM samDesired, LPSECURITY_ATTRIBUTES lpSecurityAttributes, PHKEY phkResult, LPDWORD lpdwDisposition) 
    { 
      //check for suspicious keys being made via the parameters 
      RegCreateKeyEx(hKey, lpSubKey, Reserved, lpClass, dwOptions, samDesired, lpSecurityAttributes, phkResult, lpdwDisposition); 
    } 

你可以得到一个非常良好的书面绕道库调用DetourXS这里: http://www.gamedeception.net/threads/10649-DetourXS

这里是他的榜样,如何用它来建立一个弯路代码:

#include <detourxs.h> 

    typedef DWORD (WINAPI* tGetTickCount)(void); 
    tGetTickCount oGetTickCount; 

    DWORD WINAPI hGetTickCount(void) 
    { 
     printf("GetTickCount hooked!"); 
     return oGetTickCount(); 
    } 

    // To create the detour 
    oGetTickCount = (tGetTickCount) DetourCreate("kernel32.dll", "GetTickCount", hGetTickCount, DETOUR_TYPE_JMP); 

    // ...Or an address 
    oGetTickCount = (tGetTickCount) DetourCreate(0x00000000, hGetTickCount, DETOUR_TYPE_JMP); 

    // ...You can also specify the detour len 
    oGetTickCount = (tGetTickCount) DetourCreate(0x00000000, hGetTickCount, DETOUR_TYPE_JMP, 5); 

    // To remove the detour 
    DetourRemove(oGetTickCount); 

如果你看不出来,那代码段挂钩的GetTickCount()和当函数被调用时,他写道:“GetTickCount的上钩!” - 然后他执行函数GetTickCount是它的意图。

对不起,信息如此分散,但我希望这有助于。 :) - 我意识到这是一个古老的问题。 -

0

大多数winapi调用为模块间调用生成符号表条目,这使得钩住​​它们非常简单,您只需要覆盖IAT地址即可。使用诸如MSDetours之类的东西,可以通过几行代码安全地完成。 MSDetours还提供了将自定义dll注入目标进程的工具,以便您可以执行挂接操作。