33911628 发表于 2023-12-9 15:30

<有谁不喜欢剑仙呢> 存档解密 (Unity IL2Cpp 新手向)

本帖最后由 33911628 于 2023-12-9 18:12 编辑

最近沉迷修仙挂机小游戏,尤其是那种本地保存,带有云存档的。

游戏本身可以用GG修改器无脑改值(死刑!),作者也停更了很久,自带的云存档也停用了,刚好作为新手练习作品。

游戏地址 aHR0cHM6Ly93d3cudGFwdGFwLmNuL2FwcC8zNTMwOTQ=

打开游戏,释放资源,确定存档位置为 /data/data//files/sdvsgeah2 。

文件内容:

引号中是双等号结尾,判断为base64+,尝试一遍后没有解出明文,此时有两个想法,其中还嵌套着一层加密,或者使用的是作者自定义的数据结构。
只能进so文件分析了。

app没有加密,dump的很顺利,使用il2cppdumper输入apk包中的assets\bin\Data\Managed\Metadata\global-metadata.dat和lib\arm64-v8a\libil2cpp.so后提取。



IDA打开libil2cpp.so,加载完后 File -> Script File,选择提取的ida_py3.py -> stringliteral.json.
加载完后选择ida_with_struct_py3.py -> script.json, il2cpp.h. 到此准备工作完成.

开始代码定位,在stringliteral.json中搜索sdvsgeah2。记录地址 0x14ABAF8



在IDA View按G或跳转->跳转道指定位置,输入记录的地址。



对应的为 StringLiteral_7528 ,在DataManager.load函数中被调用。
右键字符串StringLiteral_7528,选择交叉引用列表。



其中DataManager.load和DataManager.save中使用到了此字符串,为了解密存档是如何生成的,双金save跳转到对应函数。





按F5查看伪代码



关键代码在DataManager.getSaveContent,其中返回的SaveContent就是加密后的密文。双击跟踪。



前面的都是如何序列化角色信息,关键在于最后一行代码,很明显使用的是aes加密字符串v10。
因为我过于小白,不会下断点啥的拦截到v10变量的信息进行动态调试,继续静态分析。



v10是明文,StringLiteral_5936为key,还有个我不清楚的v11为methodinfo.

双击StringLiteral_5936根据获取key为 cdd******527191.



尝试脚本解密,别问我为什么是CBC,我也不知道C#里面的aes默认是啥,当时全部都试了一遍。



嗯。。。能看到明文了,但是头部存在乱码,后续查找资料了解到,AES为CBC模式时,除了key外还存在iv,只有key和iv全部相同时才能成功解密。双击CRYPTO_Crypto_aesEncode跟进。




函数体头部存在一个类似初始化的操作,只会执行一次,其中在v9对应的StringLiteral_5714中找到iv。



最后脚本如下,成功解密存档,加密方式为先AES后套base64,都是对称加密,解密后修改数据后可重新加密使用,到此这个游戏彻底被玩坏了。




小可爱家磊哥哥 发表于 2023-12-11 14:29

IOS 前几天刚玩过   iMemScan随便改:Dweeqw

BonnieRan 发表于 2023-12-11 11:59

分享过程很细致,适合我这种小白宝宝体质{:301_987:}

guoyin 发表于 2023-12-11 14:25

错觉了,下载用了

SYLXLdy 发表于 2023-12-11 14:46

绝对是致青春的作品了,谢谢LZ

kong1035082284 发表于 2023-12-11 15:07

这个网站地址怎么打开呀

正己 发表于 2023-12-11 15:39

好久没玩修仙小游戏,等有空也跟楼主的教程happy一下

fkbatno1 发表于 2023-12-11 17:16

楼主那个下载链接是百度盘还是磁链还是啥的?

LONGVOICE 发表于 2023-12-11 18:01

不知道怎么下载。

liujkk 发表于 2023-12-11 18:24

小可爱家磊哥哥 发表于 2023-12-11 14:29
IOS 前几天刚玩过   iMemScan随便改

ios下载方式给一个呗
页: [1] 2 3 4 5
查看完整版本: <有谁不喜欢剑仙呢> 存档解密 (Unity IL2Cpp 新手向)