c_cpp 游戏代码注入

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c_cpp 游戏代码注入相关的知识,希望对你有一定的参考价值。

#include <windows.h>
// 远程注入dll函数,启动该程序,则自动把自己写的dll注入到线程中去
void Inject(int pID, char* Path) {

    // 通过进程ID,获取进程句柄
    HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, pID);

    // 申请一块内存给DLL路径,需要制定在哪个线程中创建内存并且内存大小的长度
    LPVOID pReturnAddress = VirtualAllocEx(hProcess, NULL, strlen(Path) + 1, MEM_COMMIT, PAGE_READWRITE);

    // 写入路径到上一行代码申请的内存中
    WriteProcessMemory(hProcess, pReturnAddress, Path, strlen(Path) + 1, NULL);

    // 获取注入函数 LoadLibraryA函数的地址
    HMODULE hModule = LoadLibrary("KERNEL32.DLL"); // 先来获取模块句柄
    LPTHREAD_START_ROUTINE lpStartAddress = (LPTHREAD_START_ROUTINE)GetProcAddress(hModule,"LoadLibraryA");

    // 创建远程线程,
    HANDLE threadingHandle =  CreateRemoteThread(hProcess, NULL, 0, lpStartAddress, pReturnAddress, 0, NULL);
    
    // 等待线程事件,防止多线程切换,有多少时间等多少时间,才去做别的
    WaitForSingleObject(threadingHandle, 2000); // 等 2s

    // 防止内存泄漏
    CloseHandle(threadingHandle);
    CloseHandle(hProcess);
}


int main() {

    // 需要注入的dll的地址
    const char* a = "C:\\Users\\Top\\source\\repos\\Dll1\\Debug\\DLL1.dll";
    
    // 执行注入程序,PID先自己查询
    Inject(23192, (char *)a);
    return 0;
}
// dll函数代码
// dllmain.cpp : 定义 DLL 应用程序的入口点。
    #include "pch.h"

    // C 编写 ccc 导出函数,声明
        extern "C" __declspec(dllexport) void ccc();

        // 用作导出函数的函数:接口
        //void ccc() {
        //	MessageBox(NULL, "导出函数被调用成功!", "信息:", MB_OK);
        //}
        //
        //void aaa() {
        //	MessageBox(NULL, "加载成功!", "信息:", MB_OK);
        //}
        //
        //void capigu() {
        //	MessageBox(NULL, "卸载成功!", "信息:", MB_OK);
        //}

        BOOL APIENTRY DllMain( HMODULE hModule,
                            DWORD  ul_reason_for_call,
                            LPVOID lpReserved
                            )
        {
            switch (ul_reason_for_call)
            {
            case DLL_PROCESS_ATTACH:
                SetWindowTextA(FindWindowA(NULL,"口袋西游"),(char*)"辅助修改v1.0版本");
            case DLL_THREAD_ATTACH:
            case DLL_THREAD_DETACH:
            case DLL_PROCESS_DETACH:
                
                break;
            }
            return TRUE;
        }
        ```
/******************************************************************************/
// 注入函数代码
       ``` c++
    #include <windows.h>
    // 远程注入dll函数,启动该程序,则自动把自己写的dll注入到线程中去
    void Inject(int pID, char* Path) {

        // 通过进程ID,获取进程句柄
        HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, pID);

        // 申请一块内存给DLL路径,需要制定在哪个线程中创建内存并且内存大小的长度
        LPVOID pReturnAddress = VirtualAllocEx(hProcess, NULL, strlen(Path) + 1, MEM_COMMIT, PAGE_READWRITE);

        // 写入路径到上一行代码申请的内存中
        WriteProcessMemory(hProcess, pReturnAddress, Path, strlen(Path) + 1, NULL);

        // 获取注入函数 LoadLibraryA函数的地址
        HMODULE hModule = LoadLibrary("KERNEL32.DLL"); // 先来获取模块句柄
        LPTHREAD_START_ROUTINE lpStartAddress = (LPTHREAD_START_ROUTINE)GetProcAddress(hModule, "LoadLibraryA");

        // 创建远程线程,
        HANDLE threadingHandle = CreateRemoteThread(hProcess, NULL, 0, lpStartAddress, pReturnAddress, 0, NULL);

        // 等待线程事件,防止多线程切换,有多少时间等多少时间,才去做别的
        WaitForSingleObject(threadingHandle, 2000); // 等 2s

        // 防止内存泄漏
        CloseHandle(threadingHandle);
        CloseHandle(hProcess);
    }


    int main() {

        // 需要注入的dll的地址
        const char* a = "C:\\Users\\Top\\source\\repos\\Dll1\\Debug\\DLL1.dll";

        // 执行注入程序,PID先自己查询
        Inject(1608, (char*)a);
        return 0;
    }

以上是关于c_cpp 游戏代码注入的主要内容,如果未能解决你的问题,请参考以下文章

c_cpp AppInit_DLLs注入

如何将代码注入现有的 Apk?

c_cpp UVa 1292 - 战略游戏

launchersu注入器怎么用

游戏辅助 -- 获取人物属性代码编写

c_cpp 【动态规划】多边形游戏【3.6】