引子
我觉得我没有办法覆盖到每一种情况,读者如果想破解游戏或者修改游戏中的数据(比如调作无敌),可以将这篇文章当作参考。
一种通用的修改方法:运行时修改(Cheat Engine)
我认为,一款游戏的修改通常有两种方式——运行时修改和运行前修改,这两个方式或许也可以叫作热修改和冷修改。
运行时修改所依靠的软件通常是Cheat Engine。Cheat Engine通过扫描游戏的内存,进行值修改、值锁定等操作。这款软件的界面长这个样子:

这款软件的操作其实并不难,第一次打开软件还会有一个英语教程,跟着练一遍就能明白大概怎么用。
值修改
这一段我们以开罗游戏的创意咖啡店物语 (Cafe Master Story)作为例子。
比如我们刚进游戏,有这样一个界面:

我们想要修改金钱,该怎么做呢?首先我们要在Cheat Engine中点击左上角的「电脑-放大镜」按钮添加进程,随后在数值中填写我们当前的金钱值:500000,然后进行「首次扫描」:

有这么多值为500000的内存地址,我们该修改哪个呢?这个时候就引出了Cheat Engine修改的精髓——「在变化中寻找目标地址」。我们先在游戏中花点钱:

这个时候,我们观察Cheat Engine里(实际上这个游戏足够简单,我们现在已经能够看到我们的目标了):

不过,如果游戏复杂一些,同时改变的值可能很多,为了确定一下,我们在数字框内输入当前的金钱值479000,然后点击「再次扫描」:

然后,我们只需要双击我们要修改的地方,修改为想要的值,然后把前面勾选即可:

大功告成!
PS:对于一般游戏,这个修改方法都是可以的,但是对于笔者这次的游戏,这样修改是无效的(狗头)!金钱的代码会不断切换地址,导致修改失效。这种通常可以通过找指令进行修改,但是对于这款游戏,找指令会导致闪退。这些方法将在未来的文章中解释。
pak游戏的解包方式
pak游戏通常是指一个游戏的内容都打包成一个.pak文件的游戏。这种游戏的根目录通常总会包括一个.exe文件用于启动游戏和一个.pak文件用于存储游戏相关的内容。这一段笔者修改的是一款非常老的对对碰游戏——Tibet Quest。这款游戏的根目录结构大致如下:
1 | C:\PROGRAM FILES (X86)\MYREALGAMES.COM\TIBET QUEST |
可以看到,文件夹中包括一个game.exe用于启动,也包括一个TibetQuest.pak用于存储游戏数据。
比较新的游戏,如果使用.pak,则通常是UE引擎制作的,如果是这样,就可以使用UEViewer、UnrealPakTool进行破解。但是,Tibet Quest是2009年的游戏,那个时候还没有出UE4引擎,所以不是。
这个时候,我们通常会使用QuickBMS进行「解包-修改-打包」的过程,支持的游戏可以在这里查看。当我们下载好对应的脚本,就可以用如下的方式从命令行进行解包:
1 | .\quickbms.exe ..\tibetquest.bms .\TibetQuest.pak .\pak\ |
结构就是quickbms.exe BMS脚本地址 包地址 目标目录。
然后我们在解包的目录中,修改对应的数据即可,笔者这次想要修改每一关的「限时」,这个文件存储在./pak/xml/levels.xml。修改一下即可:
1 | <sub-level music="track2" |
然后打包就可以:
1 | .\quickbms.exe -r -w ..\tibetquest.bms .\TibetQuest.pak .\pak\ |
