当我将 DLL 注入现有进程时,DLLMain 不执行任何操作



所以我正在尝试制作游戏作弊(出于学习目的(,我使用反恐精英全球攻势作为目标,我正在使用 -insecure 启动选项,它不允许我去任何安全的服务器,因此我只能在单人游戏中使用作弊来不破坏他人的游戏。

我使用GuidedHacking的注入器(GH_Injector(将我的DLL注入游戏进程。作弊是内部的(直接修改内存(

我尝试注入,但是当我注入 DLL 以进行测试时,我添加了 MessageBox(( 以在注入后显示,但没有显示。确切地说,什么都没有发生,但是dll被注入并且我确定,因为当我尝试使用不同的注入器时,另一个注入器发出错误,该dll已被注入(给出占用内存空间的错误代码(

这是我得到的代码:

#include "stdafx.h"
BOOL WINAPI ATTACH() {
MessageBox(NULL, "test", "test", MB_OK); // This here doesnt show up ever.. But it should
DWORD dwClient = (DWORD)GetModuleHandle("client_panorama.dll"); // gets the base address of the module (dll) i want
Beep(750, 100); // used for testing
while (!GetAsyncKeyState(VK_DELETE)) {
*(BYTE*)(dwClient + hazedumper::signatures::dwForceJump) = 6; // should jump ingame
}
FreeLibraryAndExitThread(NULL, 0); // want to make "uninject" but idk how and im testing
Beep(750, 500); // used for testing
return 0;
}
BOOL WINAPI DLLMain(HMODULE hInstanceDLL, DWORD fdwReason, LPVOID lpvReserved) {
switch (fdwReason) {
case DLL_PROCESS_ATTACH:
CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)ATTACH, NULL, 0, NULL);
break;
case DLL_PROCESS_DETACH:
break;
case DLL_THREAD_ATTACH:
break;
case DLL_THREAD_DETACH:
break;
}
return TRUE;
}
bool __stdcall DllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID lpReserved)
{
if (dwReason == DLL_PROCESS_ATTACH) {
DisableThreadLibraryCalls(hInstance);
CreateThread(nullptr, 0, reinterpret_cast<LPTHREAD_START_ROUTINE>(ATTACH), hInstance, 0, nullptr);
}
if (dwReason == DLL_PROCESS_DETACH) {
}
return true;
}

CreateThread中,您将使用NULL作为DllMain的参数,而不是解析实例,在本例中为hInstance

好吧,我犯了一个非常愚蠢的错误。我写的所有东西实际上都在工作,但我的签名搞砸了 DllMain 是用大写的 D 和 M 写的,其他所有东西都是小写的,我用大写的 L 写的......我觉得很笨...

最新更新