#include <Windows.h>
PVOID HookAPI(PBYTE pbModule, PCSTR pszName, PVOID pvOrg, PVOID pvNew)
{
PIMAGE_THUNK_DATA r;
PIMAGE_NT_HEADERS p;
PIMAGE_IMPORT_DESCRIPTOR q;
p = (PIMAGE_NT_HEADERS) (pbModule + ((PIMAGE_DOS_HEADER) pbModule)->e_lfanew);
q = (PIMAGE_IMPORT_DESCRIPTOR) (pbModule +
p->OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_IMPORT].VirtualAddress);
for (; q->Name; q++)
{
if (lstrcmpiA(pszName, (PCSTR) (pbModule + q->Name)) == 0)
{
for (r = (PIMAGE_THUNK_DATA) (pbModule + q->FirstThunk); r->u1.Function; r++)
{
if ((PVOID) r->u1.Function == pvOrg)
{
WriteProcessMemory(GetCurrentProcess(),
&r->u1.Function, &pvNew, sizeof(PVOID), NULL);
return pvOrg;
}
}
}
}
return NULL;
}
typedef VOID (__stdcall* SleepType)(DWORD);
SleepType OldSleep;
VOID __stdcall NewSleep(DWORD dwMilliseconds)
{
OldSleep(dwMilliseconds/100);
}
int main(int argc, char* argv[])
{
OldSleep = (SleepType)
HookAPI((PBYTE)GetModuleHandle(NULL), "Kernel32.dll", Sleep, NewSleep);
Sleep(20000);
Sleep(20000);
Sleep(20000);
return 0;
}
HOOK IAT的代码与例子,备忘
最新推荐文章于 2025-03-14 09:26:36 发布
本文介绍了一种在 Windows 环境下实现 API Hook 的方法,并通过具体实例展示了如何使用 C 语言来修改 Kernel32.dll 中 Sleep 函数的行为。通过对 Import Address Table (IAT) 的操作达到 Hook 的目的。
5831

被折叠的 条评论
为什么被折叠?



