使用CE破解并修改单机游戏数据

使用CE破解并修改单机游戏数据

本章是作弊器的基本工作原理之一,涉及较高级的C语言知识。

CE修改单机游戏数据的原理是利用C语言代码,找到游戏的窗口,通过游戏窗口找到进程id,再通过进程id打开进程获取子数据,最后找到该子数据地址所对应的内存单元,对该数据进行修改。

软件介绍

Cheat Engine是一款专注于游戏的修改器。它可以用来扫描游戏中的内存,并允许修改它们。它还附带了调试器、反汇编器、汇编器、变速器、作弊器生成、Direct3D操作工具、系统检查工具等。

内存扫描是Cheat Engine的最主要功能之一,它可以扫描指定数值的内存地址,通过修改这些数值来达到修改游戏数据的目的,从而达到诸如无限生命、时间或弹药等优势。

vs查看内存地址

每个值在内存中都有唯一的地址,vs编辑器中,C语言定义的变量也不例外。

查看地址方法:

实现利用代码打印变量x的十六进制地址:

printf("%#x",&x);

编辑器菜单栏-窗口-内存-内存1(1),在地址处粘贴x的十六进制地址,在产生的十六进制数据处右键选择转换为“4字节整数”,如果x=1000,则可以看到000003e8的十六进制数据。

使用ce获取游戏内数据(阳光、金币)的内存地址

这里以红警2原版为例,目的是修改金钱。

打开并进入游戏,单人对抗电脑即可。

设置一个区分度较高的金钱数值,如4546。

打开ce,点击ce左上角的小计算机图标,弹出进程列表,选中红警2的Game.exe进程(注意不是Ra2.exe!否则无效),选中它,点击OPEN。

在value里填入当前金钱值4656,由于是整形,故选择Exact Value和4字节。点击上方New Scan,左侧显示以下内容:

Address Value Previous

001BB7E8 4546 4546

001BBC14 4546 4546

77647CC8 4546 4546

...

由于不确定真正的内存,需要改变值进行筛选。在游戏内修改金钱数,比如买掉矿场获得300金钱,值变为4846,则左侧内容可能显示为:

Address Value Previous

001BB7E8 4546 4546

001BBC14 4546 4546

77647CC8 4846 4546

...

由于地址可能产生很多,但筛选后值跟随改变的不多,便可逐一试地址,最终找到金钱值对于的内存地址77647CC8。

C语言实现红警金钱修改器

#define _CRT_SECURE_NO_WARNINGS 1

#include

#include

int main()

{

int x;

scanf("%d", &x); //输入希望修改后的值

DWORD pid; //定义一个进程id,变量名为pid

HWND hwnd = FindWindow(NULL, L"Red Alert 2"); //通过窗口名称获取窗口句柄

GetWindowThreadProcessId(hwnd, &pid); //通过窗口句柄找到进程id

HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, pid); //相当于取得进程子程序的控制权,如金钱的修改权

WriteProcessMemory(hProcess, (LPVOID)0x77647CC8, (LPVOID)&x, sizeof(x), &pid); //修改进程对象子程序金钱的值,修改结果为x

return 0;

}

之后生成.exe可执行文件,打开输入修改后的值即可,在游戏中就可看到修改后的结果4846。

注:

1. 窗口句柄是一个指针类型数据,简单来讲,可以通过它取得一个窗口对应的内核文档接口。

2. (LPVOID)0x77647CC8就指定了所需要的内存单元。

相关作品

乐视VR技术怎么样?体验效果如何?
日博365客服电话

乐视VR技术怎么样?体验效果如何?

📅 06-29 👀 9393
电影节列表
(0755) 3656 3788

电影节列表

📅 07-14 👀 2822
如何计算均值、标准差和标准误差
(0755) 3656 3788

如何计算均值、标准差和标准误差

📅 07-25 👀 7167