记一次unity游戏分析
0x1 分析目标
名称: TXHLBY
包名: com.tencent.hlfish
分析目的: 提取游戏美术/音乐/配置资源
0x2 确定目标
解压apk, 在lib文件夹看到有libil2cpp.so, libunity.so , 是Unity3d游戏, 第一次分析unity游戏, 经过了解发现是IL2cpp打包机制的unity游戏
而这种打包类型会有global-metadata.dat文件, 这个文件记录了所有的类,方法等名字和地址, 如果找不到的话, 可能是被加密隐藏了, 需要手动分析解密, 我这里比较幸运, 该游戏并没有加密global-metadata.dat
游戏的核心逻辑都是在libil2cpp.so中
0x3 解包global-metadata.dat
这个已经有大佬写过解包的工具: Il2CppDumper
下载好release版本后, 把libil2cpp.so和global-metadata.dat拷贝到dumper目录, 打开dumper, 输入unity版本, 选择Auto(Plus) 模式, 就可以解包了
解包完的文件:
dump.cs 记录所有类,函数,字段的符号与地址
/DummyDll il虚拟机依赖的dll
script.py 重命名函数和遍历的ida python脚本
打开IDA, 使用Alt+F7
, 或者打开File -> Script File
导入script.py文件, 等待脚本跑完之后, 看伪代码就和看源码差不太多啦
0x4 so分析过程
要分析, 熟悉加载流程, 翻到的unity3d文档, 确定了AssetBundle的加载方法
通过Frida hook了这些函数, 确定是解密后通关LoadFromMemory来加载unity3d文件的, 再通过栈回溯确定了DecryptFileNew来解密文件, hook这个函数的返回值就可以dump加载的解密文件了, 但是和上次一样, 我们需要的是这个游戏所有的文件, 所以只有主动调用, 批量dump了
接下就是写hook代码了, 具体的坑就不细说了, 直接上关键代码吧
1 | //构造参数2 路径参数 |
0x5 解包Unity3d文件
这个也有大佬写过解包的工具啦: AssetStudio
下载好release版本后, 打开后File->LoadFolder
打开dump后的unity3d文件
在AssetList就可以看到资源预览了
在Export->AllAssert
就可以导出所有资源啦
至此就分析完毕了, 写的很粗糙, 像流水账一样, 就是做个记录