gpt4 book ai didi

c++ - 使用 C++ Hook GetTickCount

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:57:37 28 4
gpt4 key购买 nike

我不太擅长 C++,更擅长 C# 和 PHP。我被分配了一个项目,要求我使用 GetTickCount 并挂接到应用程序。我需要一些帮助,因为某些原因它没有按计划工作......这是 Hook 的代码,我知道它有效,因为我以前在项目中使用过它。我唯一不太确定的是它的 GetTickCount 部分。我尝试了 GetTickCount64,认为这是解决我的问题的方法(它并没有使我注入(inject)的内容崩溃),但发现它根本不起作用,所以它没有崩溃

bool APIENTRY DllMain(HINSTANCE hDll, DWORD dwReason, LPVOID lpReserved)
{
switch(dwReason)
{
case DLL_PROCESS_ATTACH:

DisableThreadLibraryCalls(hDll);
CreateThread(0,0, (LPTHREAD_START_ROUTINE)KeyHooks, 0, 0, 0);
GetTickCount_orig = (DWORD (__stdcall *)(void))DetourFunction((PBYTE)GetProcAddress(GetModuleHandle("kernel32.dll"), "GetTickCount"), (PBYTE)GetTickCount_hooked);

case DLL_PROCESS_DETACH:
DetourRemove((PBYTE)GetProcAddress(GetModuleHandle("kernel32.dll"), "GetTickCount"), (PBYTE)GetTickCount_hooked);

break;
}
return true;
}

这是用于 GetTickCount

的其余代码
DWORD oldtick=0;
DWORD (WINAPI *GetTickCount_orig)(void);
DWORD WINAPI GetTickCount_hooked(void)
{
if(oldtick==0)
{
oldtick=(*GetTickCount_orig)();
return oldtick;
}
DWORD factor;
DWORD ret;

ret = (*GetTickCount_orig)();
factor = 3.0;
DWORD newret;

newret = ret+((oldtick-ret)*(factor-1));

oldtick=ret;
return newret;
}

您能看出不正确的地方或应该更改的地方吗?任何帮助表示赞赏。谢谢!

最佳答案

什么是“KeyHooks”线程?如果它期望调用迂回的 API,您应该在创建线程之前迂回。

是否设置了 GetTickCount_orig?

GetTickCount 可能是一个非常非常短的 API,会导致 Detours 出现问题(只是没有足够的字节来进行 Hook )。

您的 DetourRemove 是为 GetTickCount64 而不是 GetTickCount 移除。

另外,如果 Detours 不起作用,还有 mhook 库,它的许可要简单得多。

关于c++ - 使用 C++ Hook GetTickCount,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4823887/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com