简单的游戏修改器实现2

Catalpa 网络安全爱好者

上次简单实现了一个修改器,功能比较简单,只能修改人物的血量,实际上想要写出功能强大的修改器,需要对游戏进程一定程度的逆向分析,以便于定位关键逻辑和相关数据结构。

从内存数据入手

依旧以挺进地牢这款游戏为例,上次我们利用 CE 找到了一些静态指针,考虑到游戏开发的内容,角色的血量等数据肯定被保存在某个对象中,既然找到了血量,血量附近一定存在另外一些和角色相关的数据。

首先找到血量所在的地址,将它添加到列表中,然后右键选择 Browse this memory region 选项,弹出一个窗口,选择 Tool 选项卡中的 Dissect data/structures,弹出另外一个窗口,选择 Structures 选项卡中的 Define new structure,默认选项 ok 即可。

窗口中会出现很多数据,第一项是血量,其余数据暂时不知道是什么。保持这个窗口不要关闭,回到游戏操作人物,当进行某些特定操作的时候,列表中的数据会发生变动,例如当拾取了一个护甲,有数据会增加,那么我们可以合理的猜测这个数据代表了护甲的数量,依照此思路逐个搜索其他数据,例如子弹数量、金币数量等等,在这些数据附近会发现更多随着操作变动的内容。

某些数据是可以猜测出来的,但是更多的数据看似在随机变动,并且手动修改也看不出来有什么影响,此时就需要对游戏进程一定程度的逆向分析,尝试从代码中梳理游戏的逻辑。

逆向分析

不同游戏逆向分析的过程是不同的,因为游戏采用了不一样的引擎,例如挺进地牢使用的是 Unity3D 引擎开发,意味着游戏使用 C# 编写,而其它引擎等可能使用的是 C++ 编写,不同语言开发的游戏在逆向上有一定的差别,但是思路大体相同。

C# 逆向相对比较简单,游戏的主体是 Assembly-CSharp.dll,在没有混淆保护的情况下,使用 ILSpy、dnspy 等工具可轻易的反编译此文件。

打开文件后看到其中定义了很多类,考虑到血量数据,我们首先寻找和单词 Health 有关的类。

和 Health 相关的类较少,简单分析一下可以发现类 HealthHaver 很可疑,dnSpy 等工具包含“分析”功能,通过分析,发现这个类被很多类所引用,并且引用此类的类都和游戏角色(进一步讲,是具有血量的角色)有关,例如 AIActor、Player 等。查看此类的成员发现存在 currentHealth、currentArmor 等。

单从逆向结果上看并不能确定这个类就和角色血量有关,此时我们可以结合 CE 修改来确定。首先在 dnSpy 中点击成员变量的 Token

左侧会显示出变量的正确定义顺序(默认情况是字母排序),可以发现在 currentHealth 下方就是 currentArmor ,并且还有 maximumHealth 等

在 CE 的结构体列表中我们能够定位的是 CurrentHealth,那么尝试修改和它相邻的两个成员呢?

修改之后返回游戏查看,角色的最大生命值和护甲将发生变化。这样我们就成功定位到了和血上限、护甲相关的数据。

这个游戏中有很多武器,按照开发的思路来看,不同的武器应该会继承于同一个类,或者直接使用一个类来表示,武器拥有子弹数量,这个数量肯定通过类中的某个成员表示。那么和修改血量一样,我们可以通过搜索当前子弹数量来定位到枪械的结构体,在 dnSpy 中刚好发现了一个类叫做 Gun,里面包含子弹数量、武器名字等等数据。

和修改血量的思路一样,在 dnSpy 中找到数据的位置,在 CE 中尝试修改即可逐步理清各个数据的作用。

但是这里有一个问题,当修改完武器的数据之后,如果我们拾取了新的武器,刚刚修改的效果并不会转移到新的武器上面,思考其原因,保存角色信息的类肯定存在某个成员例如 currentGun,用于表示当前角色正在使用的武器对象,切换武器之后这个成员内容会发生变化。所以想要稳定修改所有武器的数据,就要找到保存角色信息的数据。

按照以上思路,通过逆向分析找到角色信息类,然后通过 CE 修改确定。这里不在赘述,保存角色信息的类叫做 PlayerController,里面的 inventory 字段表示一个 GunInventory 对象,这个对象拥有 currentGun 成员,表示当前角色正在使用的武器对象。

代码实现修改器

基于以上思路,对之前的修改器进行修改,添加了无限子弹,一击必杀等功能(可能有 BUG),修改版本已经上传到 Github,感兴趣的朋友可以看一下。

https://github.com/rrrrrrri/MyEtGTrainer

  • Title: 简单的游戏修改器实现2
  • Author: Catalpa
  • Created at : 2020-03-03 00:00:00
  • Updated at : 2024-10-17 08:49:02
  • Link: https://wzt.ac.cn/2020/03/03/game_trainer2/
  • License: This work is licensed under CC BY-SA 4.0.
On this page
简单的游戏修改器实现2