记录一次Unity3D游戏的破解

记录一次Unity3D游戏的破解

三月 11, 2020

目录

1.简单的说下原因
2.准备工作
3.开始操作


破解的前因后果:

写这篇文章的时候我还是处在蝙蝠时代,被迫一直在家里,在家里又没有事情做只能去玩游戏然后我玩到了一个叫Eliminator的第三人称射击 第一人称射击 类型(玩过的都知道是什么类型的游戏) Unity3D的游戏,但是这个游戏射击手感太差了加上我怂所以服装一直没解锁完,这我受不了啊这个游戏服装就是本体啊!! 没解锁完不就和肚子痛然后厕所满了一样 JOJO的奇妙比喻 所以我开始动歪脑筋想去找到这个游戏的存档文件,但是找了一段时间一直没知道心态直接爆炸,干脆直接破解这个游戏算了 人质是任务的关键,只要人质没了任务就完成了—FUZE (因为太久没写了突然要素过多)。


准备工作

首先了解下Unity3D游戏是怎么做的,Unity3D使用的编程语言是C#在破解前应该对C#有过了解,在Unity3D游戏中有个叫Assembly-CSharp.dll的文件位于你游戏根目录的/Data/Managed/文件夹中,这个文件是同等于有Main函数的.CPP文件一样的存在,所以我们就要从这里入手。

使用的工具是dnSpy(用于反编译)和AssetStudioGUI(用于提取资源文件),因为时间问题这2个工具请自己下载。


开始操作

打开dnSpy工具选择你要破解的游戏中的Assembly-CSharp.dll文件打开会发现除了这个文件外还载入了其他的文件,那些文件一般是Unity3D的运行文件不用管,打开后界面大概是这样的:
dnSpy界面

打开Assembly-CSharp.dll文件会看见很多类,在Unity3D中是使用PlayerPrefs类来保存数据的所以我们可以通过搜索(按F3来搜索)这个类出现的位置来找到怎么保存存档的;我是想直接修改读取函数来做到破解,因为不管怎么样都要读取存档来获得数据那我干脆直接把金钱的值修改成一直99999999不就行了。

通过寻找我找到了一个叫K_PlayControl的类
dll文件展开

这里面使用了PlayerPrefs类,再次搜索我找到了具体的使用位置
函数展开

啊,这就简单了,我去Unity3D官网找到了PlayerPrefs类中的Get(string, int)函数和Set(string ,int)函数的使用方法,我阅读了这个类的代码大概了解了这个读取存档的流程接下来就可以修改文件了,右键这个类点修改类进行修改。

因为这个如果只修改保存函数的话每次游戏都要死一次才能重新恢复到99999999太麻烦了,所以我就也修改了读取函数修改后大概是这样子
修改

修改完成后记得保存。

现在,打开游戏随便买衣服吧
修改成功

然后嘛,因为我不是在做游戏嘛,刚好要用到枪械的模型我就在想能不能把这里面的枪械模型搞出来。

查了点资料大概知道Unity3D是怎么存放资源文件了,在游戏的/Data/文件夹中有一些后缀名是.assets的文件,这个文件就是资源文件了。

在网上刚好有提取这个文件的过程我就去看了下AssetStudioGUI的用法。

Unity3D的文件类型有

AnimationClip (压缩的动画文件)
Font (字体文件)
Mesh (3D模型文件)
MonoBehaviour (序列化文件,用于定义同名的类生命周期)
Shader (材质渲染文件)
Texture2D (引擎显示图像文件)

具体的使用方法没什么好说的,因为就和你打开文档一样这里就不讲了。