【问题标题】:When I inject the DLL into an existing process, DLLMain doesn't do anything当我将 DLL 注入现有进程时,DLLMain 不执行任何操作
【发布时间】:2020-01-28 15:15:02
【问题描述】:

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

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

我尝试注入,但是当我出于测试目的注入 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;
}

【问题讨论】:

  • @RichardCritten 不,我的问题完全不同
  • 那是一个很长的答案/讨论CreateThread(在DLLMain),这正是你正在做的。

标签: c++ dll inject dll-injection


【解决方案1】:
  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

【讨论】:

  • 我试过了,但还是不行。注入后我的 MessageBox 不显示
  • 第 4 个参数实际上是一个变量,用于传递给将要运行该线程的函数,至少文档是这么说的。
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-03
    • 1970-01-01
    • 2011-08-03
    • 2018-11-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多