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 游戏代码注入的主要内容,如果未能解决你的问题,请参考以下文章