吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 14052|回复: 84
收起左侧

[游戏安全] 少前2:追放 资源解密记录

  [复制链接]
DNLINYJ 发表于 2023-10-5 19:04
本帖最后由 DNLINYJ 于 2023-10-5 20:41 编辑

本文仅供个人研究所用,不提供任何解密后的资源,侵删

最近,某个总是被人说药丸的游戏出了一个新游戏,闲的没事想看看资源结果被加密了(⊙ˍ⊙) 直接掏出珍藏已久的 IDA,干他 :)

1. global-metadata.dat 解密

一般来说像YM这种体量不大的厂商,一般只会在业务代码中写解密逻辑,不大可能在 Unity 源码里面塞解密和修改 global-metadata.dat 的读取结构 (点名某个厂商), 所以先把 il2cpp 的符号还原会看着舒服点。

先拿 010 Editor 看下文件,标准签名头没有修改 (AF 1B B1 FA),但是后面的内容全部被加密了

global-metadata_dat_1.png

启动游戏,Process Monitor看一眼,直接一眼丁真,鉴定为纯纯的传统派,这不就是把内容直接映射到内存然后解密吗,找到内存直接 dump 出来,再拿 il2cppdumper 把符号导出来就完事了 ᕕ(◠ڼ◠)ᕗ

image-1.png

跟着堆栈走一圈,最终跟到了 NEP2.dll 里面,等解密完之后把内存 dump 出来,再把 4~8 字节的 SDK 版本号给他修一下就可以获得符号了

image.png

image-2.png

(忘记截图了就来张压缩包的照片吧 -_- )

image-3.png

2. AssetBundle 解密

有了符号,追AB包解密就轻松很多了 (^_^)

这次追放的AB包分为两个部分: 一个是存放在 StreamingAssets\aa\StandaloneWindows64 的未加密AB包,另一部分是放在 LocalCache\Data\AssetBundles_Windows 的加密AB包,这也是绝大部分游戏资源存放的地方

查看加密文件,有一个比较明显的规律,既有的字节没有加密,如下图中 UnityFS 的标准头中 FS 没有被加密,且部分版本号如 2019.4.29f1 中的 19.45.x.x 中的 5.x 没有被加密。

根据一定数量的观察,发现规律基本一致,那么可以确实解密方式应该就是单纯的异或了

image-4.png

补充:为什么是异或?因为大部分游戏厂商 一开始 都是这么做的,包括某个加密方式恶心的要死的厂商,一开始都用的是异或 虽然现在也差不多()(︶^︶)

查看程序行为,发现并没有像标准 AssetBundle 文件逐个读文件头,而是直接读了一大片,这铁定是在内存解密了

image-5.png

跟堆栈走一下,最后跟到了 GameAssembly.dll + 0x511B90 这个函数,看到 IDA 提示中的 switch 跳转,感觉大事不妙,果然,是**恶心的控制流平坦化,好像还套了不止一层 (╬▔皿▔)╯

image-6.png

恶心的 CFG 一辈子都不会去跟的,就是看看内存直接硬套才能维持生活 硬跟不行就看上一个调用的函数, 发现了一个有趣的东西,调用的时候直接把 buffer 传进去了,返回的时候解密完的 AssetBundle 直接在内存里等我们了()

image-7.png

image-8.png

直接内存 dump 出来比对一下,发现只有前面 0x1000 * 8 个字节被异或了,直接比对完写个解密程序就行了

(dump没截图,直接拿解密后的来比较了,左边为源文件,右边为解密后文件)

image-9.png

直接拿 AssetStudio 加载,完美加载 (╹ڡ╹ )

image-10.png

3. 总结

其实在AB包解密的时候,我直接硬钢 CFG 去了,根本没想过这玩意就一简单异或(囧),要不是朋友直接跟我说,我还傻乎乎在那里跟汇编呢 ()

以后搞这种简单的解密先往简单的方向想,忌杀鸡用牛刀 -v-

免费评分

参与人数 33威望 +2 吾爱币 +130 热心值 +30 收起 理由
w169725079 + 1 + 1 我很赞同!
guanguanf + 1 + 1 我很赞同!
gcode + 1 + 1 谢谢@Thanks!
yuzaizi521 + 1 + 1 我很赞同!
lingyun011 + 1 + 1 用心讨论,共获提升!
Marythore + 1 + 1 牛逼
Ouyang520 + 1 用心讨论,共获提升!
burpliu + 1 + 1 用心讨论,共获提升!
Nittbone + 1 + 1 我很赞同!
allspark + 1 + 1 用心讨论,共获提升!
hakurei123 + 1 + 1 热心回复!
unpWn4bL3 + 1 + 1 我很赞同!
5217486 + 1 + 1 用心讨论,共获提升!
fengbolee + 2 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
zj_tj + 1 + 1 热心回复!
ZHHua + 1 + 1 用心讨论,共获提升!
qiaoyong + 1 + 1 热心回复!
没头脑和温柚 + 1 用心讨论,共获提升!
Hmily + 2 + 100 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
zyi10086 + 1 + 1 谢谢@Thanks!
2022313 + 1 用心讨论,共获提升!
社会主義パンク + 1 + 1 牛人
HuaLiang + 1 + 1 看起来少前还是药丸233333
binghu601 + 1 我很赞同!
caojian162411 + 1 + 1 我很赞同!
水蜜桃好甜 + 1 + 1 热心回复!
gongjiankk + 1 热心回复!
ZhangPuBi + 1 + 1 我很赞同!
noone2436 + 1 热心回复!
mincai + 1 + 1 用心讨论,共获提升!
HUAJIEN + 1 + 1 谢谢@Thanks!
隔壁老赵 + 1 我很赞同!
忆魂丶天雷 + 2 + 1 用心讨论,共获提升!

查看全部评分

本帖被以下淘专辑推荐:

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

 楼主| DNLINYJ 发表于 2023-12-2 20:03

晚来的补充

GameAssembly.dll + 0x511B90 其实是 HybridCLR 的虚拟机部分,这是用来加载热加载的 DLL 的,我看到大块的 switch 直接认为是加密函数了 ()

zbby 发表于 2023-10-6 00:26
本帖最后由 zbby 于 2023-10-6 00:28 编辑

这玩意实际上是按块加密的8字节一个块(末尾可不满八字节),一共加密了0x1000个块,先是计算一个八字节秘钥(具体的没研究),加密的时候 block顺序%2 == 1的块异或秘钥第一个字节+2了的值,然后等于0就异或正常秘钥
phyllis3756 发表于 2023-10-14 20:14
KotoyoseFumino 发表于 2023-10-12 20:26
坏了,点名某个厂商,瞬间就明白了指的是鸡厂了偷别人,行!别人偷我,不行!
虽然对这 ...

好奇问一下鸡场是哪个
艾莉希雅 发表于 2023-10-5 20:54
竟然没有改一下metadata定义之类的玩意区别来一套,这厂子也不是小厂了吧,这么摸鱼的吗
XMPOG 发表于 2023-10-5 19:42
我还以为是OW2
laustar 发表于 2023-10-5 20:18
用心讨论,共获提升!
隔壁老赵 发表于 2023-10-5 21:21
不明觉厉
头像被屏蔽
夏驰 发表于 2023-10-5 22:19
提示: 该帖被管理员或版主屏蔽
ZhangPuBi 发表于 2023-10-6 01:36
大佬厉害
这份文件,解密出来的都是图片文件吗?
水蜜桃好甜 发表于 2023-10-6 01:57
感谢大佬分享
wacke1 发表于 2023-10-6 08:29
不明觉厉,还得学习啊
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-12-21 20:31

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表