游戏辅助工具开发思路介绍(C++游戏辅助工具原理)

现在游戏辅助开发的语言工具有很多,但老牌游戏辅助开发语言还得是C++,现在也有很多游戏辅助开发工具内嵌的就是C++,下面介绍游戏辅助工具开发思路介绍(C++游戏辅助工具原理);

大致思路介绍

获取到目标进程(指的是运行中的游戏程序)

模拟鼠标,键盘操作程序(执行一些操作,通常用于挂机脚本)

修改数据(比如子弹数量,血量,蓝量等)

关键函数介绍:

OpenProcess:

参数

    DWORD dwDesiredAccess//访问方式

    BOOL bInheritHandle//如果该值为TRUE,则由该进程创建的进程将继承该句柄。

    DWORD dwProcessId//进程ID

返回值

    HANDLE//进程句柄,句柄是元素的首地址(真不知道为什么叫句柄这种难理解的东西。)

    WriteProcessMemory:

参数

    HANDLE hProcess//进程句柄(万恶的句柄)

    LPVOID  lpBaseAddress//要写入的地址

    LPCVOID lpBuffer//要写入的数据

    SIZE_T nSize//数据大小

    SIZE_T *lpNumberOfBytesWritten//可忽略参数,该参数用于获取写入到内存的数

只用了两个关键函数就可以实现基本的数值修改操作了


查看进程ID,进程ID可以使用程序获取或者打开任务管理器查看。

aa.png

要修改的内存值,需要通过CE工具查找,目前现在大部分人是这样做的,国人对CE的依赖难以想象,尽管这软件是开源的不过还是没人愿意读一下,摆脱CE我想并不困难。

#include <windows.h>
#include <iostream>
 
using namespace std;
 
int _tmain(int argc, _TCHAR* argv[])
{
	DWORD dwPID = 0;
	HANDLE hProcess = NULL;
	BYTE bData = 0;
	DWORD dwAddress = 0;
	BOOL bMen = FALSE;
	cout << "输入流程ID" << endl;
	cin >> dwPID;
	cout << "输入内存地址(16进制)" << endl;
	cin >> hex >> dwAddress;
	cout << "输入具体的值" << endl;
	cin >> bData;
 
	while (TRUE){
		hProcess = OpenProcess(PROCESS_ALL_ACCESS, NULL, dwPID);
		cout << hex << &hProcess << endl;
		if (hProcess == NULL){
			break;
		}
		WriteProcessMemory(hProcess,(LPVOID)dwAddress,&bData,sizeof(BYTE),NULL);
		CloseHandle(hProcess);
	}
 
	
 
	cout << "按任意键结束" << endl;
 
	int retVal = 0;
	cin >> retVal;
	
	return retVal;
}