首页
社区
课程
招聘
[原创]记一款IOS单机游戏《地X防御》存档修改器的诞生
发表于: 2018-10-15 21:17 10585

[原创]记一款IOS单机游戏《地X防御》存档修改器的诞生

2018-10-15 21:17
10585

1.起因
比较无聊刷今日头条,无意中看到有小编推荐, 18元 -> 限免的单机 地牢防御.
30多MB的游戏玩起来也挺好玩的.
游戏有个功能,可以同步存档到远程服务器上,这个服务器应该是苹果的.
既然是可以同步存档,那就有一种可能,这个存档在上传的过程中被修改。
那我同步下来的时候就会是修改后的,那岂不是美滋滋。
2.开始操作
准备工具:
1.一台越狱的IOS手机,系统版本不限,且安装了Filza,以及AFC2(可以使用爱思管理文件).
2.ILSpy
3.PListEditor

最先的想法是Fiddler抓包看看,结果发现没啥用。好吧,放弃。
那只能想别的方法了,
首先判断一下这个游戏是使用什么制作的.
使用Filza进入此程序的主程序目录下,发现主程序目录下有\Data\bin\Managed\Metadata\global-metadata.dat文件,这个是Unity程序生成的C++或者说O-C中的函数映射表.大概这个意思吧.
可以判断是Unity.再找到存档的位置,
一般放置的位置是,数据目录下\Library\Preferences\App包名.plist
使用爱思导出文件后使用PListEditor查看.如下图.

是简单的Base64编码?
解码发现不是,那GG,这个不是简单的编码而已.
那根据我的想法,这个游戏可能是有Android版本的,
几经查阅,发现谷歌应用商城是有下载的,遂翻墙下之.
将其后缀更改成rar之后打开我们很容易找到Dll文件.

将其全部拖出.扔到ILSpy中,OK,全部都能解析识别.说明这个游戏开发者并没有加密这些Dll.
其中很大记录包含主逻辑的是在
Assembly-CSharp.dll
Assembly-CSharp-firstpass.dll
这两个C#的Dll中.(忘记说了Unity是使用C#语言进行开发的.)
我们根据存档是使用Base64进行编码的来反向寻找存档保存的方式,(小声说一句,其实搜索Save应该更快)

 FromBase64String 系统函数 从base64编码转换成原本的 字节集 
右击此函数选择分析,查看被什么函数引用,快速定位到 [加载存档] 的地方.


进入函数如图所示

箭头所指向的分别是获取数据,然后把数据序列化成SaveData类型的对象.
直接进入 ObscuredPrefs.GetString()函数.
可以晓得 刚刚的 "DD_SaveData_" + bySlot 是Key 很显然这个Key还被加密了 然后再进行查询的.
那也就是说刚刚我们导出的存档中 那几个被<Key>标签包裹的就是 这个被加密的内容.
跟入其中后拷贝还原后得到如下结果

然后 ObscuredPrefs.GetString()函数中的 GetEncryptedPrefsString()函数使用了 Unity的 PlayerPrefs.GetString 方法获取了这个存档中键值对中的值.就是存档中被<string>标签包裹的内容,
得到内容后使用 DecryptStringValue(key, encryptedPrefsString, defaultValue) 进行解密 
这样就能成功得到解密后的Base64
  (SavedData)binaryFormatter.Deserialize(new MemoryStream(Convert.FromBase64String(@string)));

使用这个方法成功序列化 SavedData 对象!


我们需要去还原这个SavedData类型,但是发现这个类型依赖了UnityEngine.

这样的话我们只能新建个Unity项目来进行还原了,

还原需要注意

务必保证类型所在的命名空间于原本的一致!

否则极有可能会出错。当初旅行青蛙就是这样。

剩下的就是拷贝粘贴修改.

结果如下图



 从上到下分别是

1. 序列化成了 SaveData 对象

2. 修改原本的存档内容

3.将其过程反向,序列化并加密处理成游戏可识别的密文存档

4.解析刚刚加密的存档以用来验证是否正确!

OK 我们将 str_enc的内容拷贝出来并替换原本的游戏存档.

结果如下图.








这岂不是美滋滋?

右上角金币无限,强化全满 嘿嘿嘿.

因为是云存档的关系,所以我将越狱的手机 IPhone8 的存档同步到云端,

然后成功拉取到当前未越狱的 IPhone XS MAX 手机上.

这样就实现了完美的修改.

更多细节就不找了,同理可得.



我只是个卑微的人,

不敢奢求。

那,就推荐一首歌吧。

网易云搜索

if 丁可

2018.10.14_16.17


[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

最后于 2018-10-15 21:18 被Imxz编辑 ,原因:
收藏
免费 1
支持
分享
打赏 + 1.00雪花
打赏次数 1 雪花 + 1.00
 
赞赏  junkboy   +1.00 2018/10/15
最新回复 (16)
雪    币: 11716
活跃值: (133)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
那就

http://music.163.com/m/song?id=4345356
2018-10-15 21:55
0
雪    币: 105
活跃值: (4412)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
junkboy 那就 http://music.163.com/m/song?id=4345356
谢谢大佬赞赏
2018-10-15 22:03
0
雪    币: 19
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
4
大佬这个后面就已经看不懂了,但是感觉非常有学习经验,可以出个视频吗
2019-7-18 10:29
0
雪    币: 105
活跃值: (4412)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
LONSSI的夏天 大佬这个后面就已经看不懂了,但是感觉非常有学习经验,可以出个视频吗
很久之前写的了 
可能我写的不够详细 和  明了.
不想再去搞已经搞过的游戏了
2019-7-18 16:39
0
雪    币: 3013
活跃值: (981)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
这过程………
2020-2-25 10:27
0
雪    币: 3013
活跃值: (981)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
这过程………
2020-2-25 10:27
0
雪    币: 3013
活跃值: (981)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
后面的不会弄了…
2020-2-29 13:01
0
雪    币: 105
活跃值: (4412)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
JusticeTitan 后面的不会弄了…
后面一部分 是C# 代码 根据游戏的加解密 进行的 仔细一点 就行 
2020-3-4 11:41
0
雪    币: 3013
活跃值: (981)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
大哥,跟入其中拷贝还原这里有什么操作,要是有个相关视频啥的就好了…纯小白~~~=_=
2020-3-5 15:35
0
雪    币: 3013
活跃值: (981)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
2020-3-5 16:34
0
雪    币: 5
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
12
如果有时间的话,可以出个视频吗 大佬
2020-3-29 02:49
1
雪    币: 3013
活跃值: (981)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
我顶~~~出个视频呗~;-)
2020-3-30 10:49
0
雪    币:
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
14
大佬求个联系方式
2020-8-11 13:41
0
雪    币:
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
15
一直在玩igg ,这种玩法还没搞过 求大佬指点
2020-8-11 13:43
0
雪    币: 4
活跃值: (133)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
好家伙,破解游戏存档需要越狱+科学上网+分析c#解密函数+加密数据+替换存档,上传存档再同步存档
2020-8-13 22:57
0
雪    币: 105
活跃值: (4412)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17
SM的缠绵 好家伙,破解游戏存档需要越狱+科学上网+分析c#解密函数+加密数据+替换存档,上传存档再同步存档[em_85]
2020-8-15 23:37
0
游客
登录 | 注册 方可回帖
返回
//