<有谁不喜欢剑仙呢> 存档解密 (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,都是对称加密,解密后修改数据后可重新加密使用,到此这个游戏彻底被玩坏了。
IOS 前几天刚玩过 iMemScan随便改:Dweeqw 分享过程很细致,适合我这种小白宝宝体质{:301_987:} 错觉了,下载用了 绝对是致青春的作品了,谢谢LZ 这个网站地址怎么打开呀 好久没玩修仙小游戏,等有空也跟楼主的教程happy一下 楼主那个下载链接是百度盘还是磁链还是啥的? 不知道怎么下载。 小可爱家磊哥哥 发表于 2023-12-11 14:29
IOS 前几天刚玩过 iMemScan随便改
ios下载方式给一个呗