Когда я внедряю DLL в существующий процесс, DLLMain ничего не делает - PullRequest
0 голосов
/ 28 сентября 2019

Итак, я пытаюсь сделать чит-игру (для учебных целей), и я использую 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;
}

1 Ответ

0 голосов
/ 30 сентября 2019
  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.

...