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

When I inject the DLL into an existing process, DLLMain doesn't do anything

所以我正在尝试制作游戏作弊(用于学习目的)并且我正在使用 Counter Strike Global Offensive 作为目标并且我正在使用 -insecure 启动选项,它不允许我去任何安全服务器,因此我只能在单人游戏中使用作弊,以免破坏其他人的游戏。

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

我尝试注入,但是当我为了测试目的注入 DLL 时,我添加了 MessageBox() 以在注入后显示,但没有显示。确切地说,没有任何反应,但 dll 被注入并且我确定,因为当我尝试使用不同的注入器时,另一个注入器给出了这个 dll 已经被注入的错误(给出占用内存的错误代码 space)

这是我得到的代码:

#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做的...我觉得很蠢...