使用Cheat Engine修改《Eternium》游戏数据的原理与实践

📅 2026/8/1 9:03:30 👁️ 阅读次数 📝 编程学习
使用Cheat Engine修改《Eternium》游戏数据的原理与实践

1. 项目概述与核心价值

如果你玩过《Eternium》(永恒之金)这款手游,大概率会对后期刷装备、攒金币、升技能的漫长过程感到一丝疲惫。作为一款经典的ARPG,它的核心乐趣在于Build构筑和装备获取,但重复的“刷刷刷”有时也会消磨热情。今天要聊的,就是如何利用一个老牌但强大的工具——Cheat Engine(简称CE),来对《Eternium》的单机部分数据进行一些基础的探索和修改,从而更深入地理解游戏的数据结构,甚至(在合法合规的单人模式下)调整游戏节奏,获得不一样的体验。请注意,本文所有讨论均基于学习与研究目的,旨在剖析单机游戏的数据存储机制,严禁用于任何形式的在线游戏作弊或损害他人游戏体验的行为

CE是什么?简单说,它是一款开源的内存扫描与调试工具,常被用于游戏修改、软件调试和逆向工程学习。它通过扫描程序运行时在内存中留下的数据痕迹,让你能够定位并修改特定的数值,比如生命值、金币数量、物品数量等。对《Eternium》使用CE,本质上是一次对游戏内存数据模型的“外科手术式”探查。这个过程不仅能满足一些个性化的单机游戏需求,更能让你直观地理解计算机程序(尤其是游戏)如何在内存中管理海量的动态数据——哪些是加密的,哪些是明文的,数值的存储格式是什么,指针链如何工作。这比任何教科书上的例子都来得生动。

那么,这篇“基础篇”适合谁?首先,是那些对《Eternium》有深厚感情,想深入了解其内部机制的玩家。其次,是对游戏修改、内存扫描原理感兴趣的初学者。你不需要是编程高手,但需要对计算机基础知识(如十六进制、数据类型)有最基本的了解,并且拥有一颗愿意折腾和探索的心。我们将从最基础的CE安装、附加进程开始,一步步找到并修改《Eternium》中的金币、宝石等基础资源,并解释每一步背后的原理。你会发现,这个过程就像侦探破案,充满了逻辑推理的乐趣。

2. 工具准备与环境搭建

工欲善其事,必先利其器。在开始我们的内存探险之前,需要准备好正确的工具,并理解我们即将工作的“战场”——游戏进程与内存空间。

2.1 Cheat Engine 的选择与安装

首先,你需要获取Cheat Engine。务必从其官方网站获取,以避免捆绑恶意软件。安装过程基本是“下一步”到底,但有几个关键点需要注意:

  1. 安装组件:在组件选择页面,建议取消勾选所有可选组件,尤其是那些捆绑的软件或驱动。我们只需要CE的核心功能。
  2. 语言与教程:安装过程中可能会询问是否安装教程。如果你是第一次使用,可以安装,里面自带了一些小游戏供你练习,这对理解CE的基本操作非常有帮助。
  3. 版本选择:对于《Eternium》这类游戏,通常不需要最新版的CE,一个稳定的版本(如7.4或7.5)即可。新版本可能界面有变化,但核心功能一致。

安装完成后,你可能会遇到Windows Defender或杀毒软件的警告。这是因为CE的内存扫描功能与某些恶意软件行为相似。你需要将CE的安装目录或主程序添加到杀毒软件的信任区(白名单)中,否则CE可能无法正常打开或运行。

注意:CE是一个强大的工具,请仅用于合法授权的软件或你自己拥有版权的单机游戏上进行学习和研究。滥用可能导致游戏账号封禁或法律风险。

2.2 游戏运行环境与进程识别

《Eternium》通常通过Google Play Games for PC或模拟器在电脑上运行。为了使用CE,我们需要让游戏运行在一个CE能够稳定附加的进程中。

  • 推荐环境:在Windows PC上通过官方渠道(如Google Play Games)或蓝叠雷电等安卓模拟器运行《Eternium》。模拟器会创建一个独立的安卓虚拟机进程,这个进程就是CE的目标。
  • 如何识别进程:打开CE,点击左上角的“选择进程”按钮(一个电脑图标)。在弹出的进程列表中,你需要找到《Eternium》对应的进程。如果通过模拟器运行,进程名通常是模拟器的名字,例如HD-Player.exe(蓝叠)、dnplayer.exe(雷电)。你需要将这个模拟器主进程附加到CE。有时,游戏会以独立进程运行,名字可能包含“Eternium”。如果不确定,可以打开游戏后,观察进程列表的变化,或者根据内存占用大小来判断。

成功附加进程后,CE界面下方会显示该进程的PID(进程ID)和内存范围,这意味着CE已经获得了读取和修改该进程内存空间的权限。这是我们所有操作的基础。

2.3 CE界面初识与核心概念

第一次打开CE,界面可能有些复杂。我们聚焦于最核心的几个区域和概念:

  • 地址列表:这是显示你找到的内存地址的地方。每个地址对应内存中的一个位置,保存着某个数值。
  • 扫描类型与数值类型:这是CE的灵魂。扫描前,你必须告诉CE你要找什么样的数据。
    • 数值类型:常见的有4字节(Integer,整数)、浮点数(Float,带小数点的数)、双浮点数(Double)、字符串等。《Eternium》中的金币、宝石数量通常是4字节整数,而某些比例或时间可能是浮点数
    • 扫描类型精确数值(你知道确切数值时用)、未知的初始值(你不知道数值时开始搜索)、变动的数值未变动的数值等。最常用的是精确数值未知的初始值
  • 首次扫描/再次扫描:通过多次扫描和数值变化,逐步缩小地址范围,最终定位到目标地址。
  • 十六进制:内存地址和数值常以十六进制显示。你不需要精通,但要知道像“0F”代表十进制15,“FF”代表255。CE通常会自动处理转换。

理解这些后,我们的“手术台”和“手术刀”就准备好了。接下来,我们将以《Eternium》中的“金币”为目标,进行第一次实战扫描。

3. 核心修改流程实战:以金币为例

现在,我们进入最激动人心的环节:实际动手找到并修改《Eternium》中的金币数量。这个过程是一个经典的“搜索-过滤-定位”流程,是CE使用的核心方法论。

3.1 首次扫描:确定搜索起点

  1. 启动游戏并附加进程:打开《Eternium》,进入游戏主界面或任意能显示当前金币数量的场景。然后打开CE,附加到游戏进程(或模拟器进程)。
  2. 记录初始值:在游戏中,清晰地记下你当前拥有的金币数量。假设是1500金币。
  3. 配置CE扫描参数
    • 在CE主界面的“数值”输入框中,输入你记录的金币数:1500
    • 在“扫描类型”下拉菜单中,选择精确数值
    • 在“数值类型”下拉菜单中,选择4字节(因为金币数量通常是一个整数)。
  4. 执行首次扫描:点击“首次扫描”按钮。CE会快速扫描游戏进程的整个内存空间,找出所有存储着数值1500(4字节格式)的内存地址。扫描结束后,左侧的地址列表可能会显示成千上万个结果。这很正常,因为内存中可能有无数个地方恰好存储着1500这个数字。

3.2 再次扫描:过滤与精确定位

首次扫描的结果太多,我们需要通过让游戏内的金币数量发生变化,来过滤掉无关的地址。

  1. 改变游戏内数值:回到游戏,通过任何方式改变你的金币数量。最可靠的方法是消费。比如,去商店购买一件最便宜的商品,或者升级一次技能,让金币减少。假设消费后,金币变成了1200
  2. 更新CE扫描条件
    • 在CE的“数值”输入框中,将数值更新为变化后的1200
    • 扫描类型保持为精确数值
  3. 执行再次扫描:点击“再次扫描”按钮(或“Next Scan”)。这次,CE不会重新扫描全部内存,而是在上一次扫描结果的地址中,查找哪些地址的值现在已经变成了1200
  4. 重复过滤:经过一次“再次扫描”,地址列表中的结果通常会大幅减少,可能从几万个降到几十个甚至几个。如果结果仍然较多(比如超过10个),重复步骤1-3:再次在游戏中改变金币数(比如再消费一次,变成900),然后在CE中输入新的数值900,执行“再次扫描”。

3.3 地址确认与修改测试

经过2-3次“改变数值-再次扫描”的循环,地址列表通常只会剩下1到3个地址。这些就是最有可能存储你金币真实数值的地址。

  1. 添加到地址列表:在地址列表中,用鼠标双击最有可能的地址(通常可以全选剩下的几个),它们会被移动到CE界面下方的地址列表中。
  2. 修改测试:在地址列表中,选中一个地址,在底部的“值”那一栏双击,将其修改为一个新的数值,比如99999不要按回车
  3. 激活修改:按下键盘的回车键,或者点击别处,CE会将这个新值写入内存。
  4. 验证效果:立即切换回游戏界面。如果你修改的地址是正确的,游戏画面中显示的金币数量应该会瞬间变成99999(或你输入的其他值)。如果游戏内数值没变,说明这个地址不是正确的,在地址列表中右键点击它选择“删除”,然后测试列表中的下一个地址。

实操心得:有时候,正确的地址可能不止一个(游戏可能在不同地方备份了同一个数据)。修改一个后游戏内数值变化,但进行某些操作(如切换场景)后数值又恢复了原样。这说明你修改的可能是一个“显示值”而非“存储值”。真正的“存储值”地址通常比较稳定,修改后即使重启游戏(如果不加密)也可能生效。这就需要用到更高级的“指针扫描”技术,这在基础篇暂不展开。

3.4 锁定数值与常见问题

找到正确地址并成功修改后,你可能会想保持这个数值不变(比如锁定金币无限)。

  • 锁定功能:在地址列表中,找到正确地址所在行,勾选最前面的“锁定”复选框(一个小方框)。然后双击“值”一栏,输入你想锁定的数值,如999999。这样,每当游戏尝试减少这个数值时,CE都会立刻将其写回999999,实现“无限”效果。
  • 注意:过度使用锁定功能,尤其是在进行关键任务或交易时,可能导致游戏逻辑错误甚至崩溃。建议谨慎使用,或在使用后取消锁定。

常见问题速查表:

问题现象可能原因解决方案
首次扫描结果为零或极少数值类型选错(如金币是4字节却选了浮点)尝试更换数值类型,4字节和浮点数是最常见的。
再次扫描后结果反而变多扫描类型错误;游戏数值加密或非直接存储确保扫描类型是“精确数值”;尝试“未知的初始值”扫描类型,配合“数值增加了…”等。
修改地址后游戏内无变化地址不正确;修改了“显示值”而非“存储值”继续用“再次扫描”过滤;尝试进行游戏操作(如消费)触发数值刷新。
游戏闪退或报错修改了错误的内存地址(如代码区);数值溢出仅修改明确找到的资源类数值地址;修改值不要过大(如超过21亿的4字节整数上限)。
地址每次重启游戏都变化动态地址,基址+偏移这是正常现象,需要使用指针扫描或查找访问该地址的代码来确定基址,这属于进阶内容。

通过以上步骤,你已经成功掌握了CE修改《Eternium》金币的基本方法。同样的方法论,可以应用于“宝石”、“技能点”、“材料数量”等几乎所有显示为数字的资源上。

4. 进阶定位与数据类型辨析

在成功修改金币之后,你可能会遇到一些更复杂的情况,比如扫描不到地址,或者修改后无效。这一节我们深入一些,探讨数值类型的选择和更复杂的扫描策略。

4.1 数值类型深度解析:不仅仅是4字节

在扫描时,选择正确的“数值类型”至关重要。除了最常用的4字节,还有其他可能:

  • 浮点数 (Float):如果游戏中的数值显示有小数点(比如某些游戏的“攻击速度1.5”),或者像《Eternium》中某些百分比加成的内部计算,可能会使用浮点数。浮点数在内存中的存储方式与整数完全不同。如果你用4字节扫描一个浮点数100.0,很可能找不到。CE提供了“浮点数”类型选项。
  • 双浮点数 (Double):精度更高的浮点数,在游戏中相对少见,但一些计算引擎可能会使用。
  • 8字节 (8 Byte):存储更大范围的整数。如果你的金币数超过了4字节能表示的最大值(约21.47亿),游戏可能会用8字节存储。但手游中极少出现如此巨大的数值。
  • 字符串 (String):用于扫描文本,比如物品名称、玩家名字。在《Eternium》中,直接修改字符串的风险很高,容易导致游戏崩溃。

如何判断该用哪种类型?

  1. 观察法:看游戏内数值的显示形式。纯整数无小数,优先4字节。有小数,尝试浮点数
  2. 试探法:如果用4字节扫描和过滤后,地址减少到一定程度就无法再减少(比如始终剩下几百个),可以尝试换用浮点数重新开始一次全新的扫描流程。
  3. 经验法:Unity引擎的游戏,很多基础资源数值常用4字节。一些比例、时间、进度值可能用浮点数

4.2 “未知的初始值”扫描策略

当你不知道具体的数值是多少,或者数值是加密的时候,“精确数值”扫描就失效了。这时需要用到“未知的初始值/变动的数值”扫描策略。这种方法常用于寻找血条、经验条等不显示具体数字的数值,或者加密的数据。

  1. 开始扫描:在游戏初始状态,选择扫描类型为未知的初始值,数值类型根据猜测选择(通常先试4字节),点击“首次扫描”。CE会记录下内存中所有符合该类型的数据。
  2. 改变游戏状态:在游戏中让目标数值发生变化。比如,让角色受到伤害(血条减少),或者获得经验(经验条增加)。
  3. 过滤扫描:回到CE,根据数值的变化情况选择扫描类型:
    • 如果数值减少了,选择减少的数值
    • 如果数值增加了,选择增加的数值
    • 如果不知道是增是减,可以选择变动的数值(只要变了就行)或未变动的数值(排除没变的)。
  4. 重复过滤:多次改变游戏状态(如多次受伤、多次获得经验),并配合相应的扫描类型(减少的、增加的、变动的)进行“再次扫描”。地址列表会逐渐缩小。
  5. 尝试修改:当地址减少到很少时(比如几十个),可以尝试将这些地址添加到下方列表,并尝试修改其值为一个很大的数(对于血量)或很小的数,然后观察游戏效果。如果角色突然满血或死亡,就找到了。

这种方法比“精确数值”扫描更耗时,更需要耐心,但它是破解加密数据或隐藏数据的利器。对于《Eternium》,一些不直接显示数值的进度条(如某些活动进度)可以尝试此法。

4.3 多级指针与静态地址查找基础

你可能会发现,今天找到的金币地址,明天重启游戏后再用同样的方法搜索,地址变了,之前的修改失效了。这是因为游戏数据存储在动态分配的内存中,每次启动的地址都不同。为了解决这个问题,需要找到指向这个动态地址的静态指针

  1. 什么是指针:指针本身是一个内存地址,这个地址里存放的不是资源数值,而是另一个内存地址,那个地址才存放着真正的资源数值(如金币99999)。
  2. 指针扫描:CE提供了强大的“指针扫描”功能。当你找到正确的动态地址(我们称之为“目标地址”)后,可以右键点击它,选择“指针扫描”。CE会分析内存,找出所有可能指向这个目标地址的指针链。
  3. 基址与偏移:一个指针链通常看起来像这样:["Eternium.exe"+01234568]+28。这里的"Eternium.exe"+01234568是一个静态基址(模块名+固定偏移),它每次游戏启动时都不变。+28是一个偏移。指针链的意思是:先找到Eternium.exe模块在内存中加载的基地址,加上01234568,得到地址A;读取地址A中存储的值,这个值是一个内存地址B;最后,在地址B的基础上加上28,就得到了我们存储金币的动态地址。
  4. 如何使用:找到这样的指针链后,你可以将其添加到地址列表。即使游戏重启,CE也能通过这个固定的指针链公式,自动计算出新的动态地址,从而实现“一次查找,永久有效”(除非游戏更新改变了内存结构)。

注意事项:指针扫描会生成一个巨大的文件,并且分析过程需要一定的计算机知识。对于初学者,如果只是临时修改,每次游戏都重新搜索动态地址也是完全可行的。指针扫描是通向高阶修改的桥梁,理解它需要时间和实践。

5. 实战扩展:宝石、技能点与物品数量修改

掌握了金币的修改方法后,我们可以将这套方法论应用到《Eternium》的其他资源上。不同资源在扫描时可能会有些微妙的差异。

5.1 宝石的扫描与修改

宝石在《Eternium》中是比金币更珍贵的货币。修改方法与金币几乎完全相同。

  1. 精确扫描:记录当前宝石数量(如55),使用4字节精确数值进行首次扫描。
  2. 改变数值:通过消费宝石(购买宝箱、复活等)或完成任务获得宝石来改变数量。
  3. 过滤地址:使用再次扫描配合新的宝石数量进行过滤。
  4. 测试与修改:找到地址后,修改测试。需要注意的是,宝石的数值通常较小,修改时不要过于夸张(比如改成几百万),以免超出游戏内部处理范围导致显示错误或崩溃。先从适中的数值(如5000)开始测试。

5.2 技能点的定位技巧

技能点可能有两种存储方式:一种是可分配的“自由技能点”,一种是已投入某个技能的“已用技能点”。

  • 自由技能点:这是最常修改的。它的行为和金币、宝石一样,是一个可以增减的整数。使用“精确数值”扫描法即可。先使用一个技能点,然后扫描减少后的数值。
  • 已用技能点:某个具体技能的等级。修改这个值可以直接提升技能等级。你需要记录某个技能的当前等级(如“火球术 Lv.3”),扫描数值3。然后去升级这个技能到Lv.4,再次扫描4。找到地址后,可以尝试修改为更高的等级(如Lv.10)。风险提示:直接修改技能等级可能导致技能效果异常或游戏崩溃,因为高等级技能可能需要角色等级或前置技能支持。建议谨慎操作,或优先修改自由技能点,在游戏内正常升级。

5.3 背包物品数量的修改

修改背包中某个物品的数量(比如“生命药水 x5”)是可行的,但过程可能更繁琐。

  1. 定位物品:确保该物品在背包中的数量是唯一的,或者你清楚地记得它的数量。比如,你只有5个生命药水,没有其他物品是5个。
  2. 常规扫描:扫描数值5(4字节)。然后使用或拾取一个该物品,使数量变为4或6,进行再次扫描。
  3. 挑战:背包数据可能以数组或结构体形式存储,同一个物品可能对应多个地址(比如当前数量、最大堆叠数等)。你可能需要找到正确的那个。此外,修改数量时,不要超过该物品的最大堆叠上限(比如药水通常是99),否则可能出错。
  4. 高级方法:更可靠的方法是先修改金币/宝石,然后去商店大量购买该物品,这比直接修改物品数量更安全,也更能被游戏逻辑接受。

5.4 经验值与等级修改的注意事项

修改经验值或角色等级是许多玩家感兴趣的,但这通常是风险较高的操作。

  • 经验值:可以尝试用“未知的初始值”扫描法。获得经验后扫描“增加的数值”,反复过滤。找到地址后,修改为一个很大的值可能让你瞬间升级。
  • 等级:等级本身是一个整数,可以用“精确数值”扫描。但直接修改等级可能导致:
    1. 属性错乱:角色升级获得的属性点可能没有正常添加。
    2. 任务卡住:某些任务要求达到特定等级,如果你跳级了,任务逻辑可能出错。
    3. 游戏崩溃:等级值可能关联着许多内部标志和数组索引,非法值会导致崩溃。
  • 建议:相比于直接修改等级,更安全的方式是修改经验值,让游戏自然升级。或者,寻找并修改“升级可获得的属性点”数量,这同样需要谨慎。

在所有修改过程中,一个非常重要的习惯是:频繁存档(如果游戏有手动存档功能)或备份存档文件。在尝试修改任何不确定的地址前,先备份你的游戏进度,这样一旦修改导致游戏出现问题,你可以轻松回滚到修改前的状态。

6. 内存修改的底层原理与安全思考

走到这一步,你已经能够熟练地修改游戏中的各种数值了。但我们不能只停留在“知其然”,还要尝试“知其所以然”。理解一些底层原理,不仅能让你更得心应手,也能让你明白其中的边界和风险。

6.1 内存中的数据存储:从游戏到十六进制

当你在游戏中看到“金币:1500”时,这个“1500”是如何存在于计算机内存中的呢?

  1. 变量与内存地址:游戏程序运行时,会在内存中声明一个变量来存储金币数量,比如int gold = 1500;。编译器会为这个gold变量分配一个内存地址,比如0x12345678
  2. 二进制与十六进制:计算机以二进制存储数据。十进制1500的二进制是10111011100。但在内存中,它通常以更紧凑的十六进制表示。1500的十六进制是0x5DC
  3. 字节序:对于4字节整数(如1500),在x86架构的计算机(我们常用的PC)上,采用“小端序”存储。这意味着低位字节在前。0x5DC补齐4字节是0x000005DC,在内存地址0x12345678开始的位置,实际存储的字节顺序是DC 05 00 00。CE帮我们处理了这些转换,我们输入和看到的都是直观的十进制。
  4. CE在做什么:当你让CE扫描“1500”时,它实际上是在进程的内存空间中,快速匹配所有连续4个字节内容为DC 05 00 00的位置。

理解这一点,你就明白为什么“数值类型”选错就找不到数据了。因为浮点数1500.0在内存中的二进制表示与整数1500完全不同。

6.2 加密与反作弊的浅层认知

现代游戏,特别是网络游戏,不会将关键数据以明文形式放在内存中任人读取。它们会采用各种加密、混淆和校验机制。

  • 简单加密:数值在存储前会经过一个固定的数学变换,比如存储值 = 真实值 * 2 + 10。那么真实金币1500,在内存中存储的可能是3010。直接扫描1500是找不到的。这时就需要用“未知的初始值”扫描法,通过变化来定位,或者尝试找出加密算法。
  • 多份存储与校验:游戏可能在多个地方存储同一份数据,并在关键时刻进行比对。如果你只修改了UI显示的那个值,另一个“权威”值没改,一旦游戏进行校验,就会发现问题,可能触发修正(数值被改回)甚至反作弊措施。
  • 服务器权威:对于《Eternium》这类有在线功能的游戏(如排行榜、每日任务),其核心数据(如顶级装备属性、付费宝石数量)很可能存储在游戏服务器上。客户端(你的手机或模拟器)只是一个显示和操作界面。你通过CE修改的只是本地客户端内存中的数据,服务器不认可,所以修改无效,或者只在本地暂时生效,一旦与服务器同步就会被覆盖。这是最重要的边界:任何试图修改服务器端数据的尝试,不仅是徒劳的,更是违反游戏规则和服务条款的,会导致账号被封禁。

6.3 单机修改的伦理与风险控制

基于学习目的的单机游戏修改,是理解和学习计算机原理的绝佳途径。但我们必须树立清晰的边界:

  1. 明确范围:仅限纯单机、无任何在线交互或竞争内容的游戏模式。对于《Eternium》,这意味着你的修改应仅限于你自己的本地角色进度,不影响任何排行榜、玩家间交易或在线活动。
  2. 尊重版权与劳动:游戏是开发者的创作成果。通过修改获得全部内容可能会让你迅速失去游戏目标,缩短游戏寿命,本质上也是一种对开发者设计意图的背离。建议将修改作为理解游戏机制、克服某个无聊重复阶段(如初期资源积累)的工具,而非破坏整个游戏体验的手段。
  3. 风险自担:任何内存修改都有可能导致游戏存档损坏、程序崩溃甚至系统不稳定(如果错误地修改了系统关键内存)。务必定期备份原始存档文件
  4. 防病毒软件误报:CE和一些修改行为会被安全软件视为潜在风险。确保你从官方渠道获取工具,并在可信的环境中进行操作。

我个人在修改单机游戏时,通常会给自己定一个“小目标”:比如,通过分析找到某个关键资源的地址,理解它的存储格式;或者制作一个简单的“一键恢复血量”的小脚本。达到学习目的后,我就会停止,回归正常的游戏流程。技术的乐趣在于探索和控制的过程本身,而不一定是结果。希望你在《Eternium》的世界里,既能享受刀光剑影的冒险,也能体会到内存数据背后隐藏的逻辑之美。