windows – 为特定进程挂钩注册表访问的简单方法

是否有一种简单的方法来挂钩我的代码执行的进程的注册表访问?我知道Set
WindowsHookEx和朋友,但它太复杂了……我仍然希望有一种像Unix上的LD_PRELOAD一样简单… 最佳答案 阅读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(v=vs.85).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函数.

很抱歉信息如此分散,但我希望这会有所帮助. 🙂
– 我意识到这是一个老问题. –

点赞