当我将 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做的...我觉得很蠢...
所以我正在尝试制作游戏作弊(用于学习目的)并且我正在使用 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做的...我觉得很蠢...