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

时间:2019-09-28 18:07:06

标签: c++ dll inject dll-injection

因此,我试图作弊(出于学习目的),并且我将Counter Strike Global Offensive用作目标,并且使用了-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;
}

2 个答案:

答案 0 :(得分:0)

  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)。

答案 1 :(得分:0)

好吧,这是我的一个非常非常愚蠢的错误。我写的所有内容实际上都在工作,但是我的签名被弄乱了DllMain是用大写D和M编写的,其他所有小写字母都由我写成有大写字母L的...我觉得很蠢...