使用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 <stdio.h>
#include <Windows.h>
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就指定了所需要的内存单元。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构