游戏资源提取
声明:资源的获取仅仅作为学习用途,请勿用于商业!!!
一、分析Apk
- 当然是捞到Apk文件(如果是TapTap渠道可以在TapTap的安装目录下捞到,注意模拟器和真机上存储目录不一样)
- 使用ApkTool解包资源
- 分析包体是使用什么引擎开发(Unity、NeoX、Cocos等)
- 通过010Editor或者HexEditor查看assets下的资源文件。通过头部信息基本能定位
- 使用GDRipper智能分析
二、对症下药
Unity
-
使用HexEditor或者010Editor查看AB文件,如果发现有熟悉的十六进制为55 6e 69 74 79 46 53(具体AB头部格式可以自己了解)。一般的游戏会在头部进行一定量的偏移,可以写个工具把头部偏移的字节截取掉。处理完ab的二进制信息,可以使用AssetStudio把资源导入即可完成资源的提取
-
很不幸没有发现我们的老朋友,可能是使用了中国版的Unity打包加密了资源,或者说有自己的Unity源码,对AB的IO进行了修改,这时候可能需要借助强大的IDA工具。
i. 使用IL2CPPDumper工具反编译IL2CPP.so,使用IDA查找我们需要的函数进行算法的查看(这里可能需要一点汇编基础)
ii. 如果IL2CPPDumper反编译失败,有可能是对Unity的MetadataCache.cpp加载metadata动手脚了,可以先用IDA查找一下这个函数
NeoX
- 网易自研的引擎,没有深入研究,主要是借助一些大佬的工具进行破解
GDRipper、 NPKExtractor
三、究极大法
如果上面的方法都走不通的话,只能考虑从GPU层面去把模型捞出来。首先需要改一下AndroidManifest文件,把android:debuggable设置为true,然后利用ApkTool将包打成新的Apk(这里需要用到签名证书,可以用AndroidStudio生成,或者公司打包都会有的)。注意:无论是将Apk安装到Android机上,或者是电脑端的模拟器,记得先打开游戏,让Android进行一些必要的初始化工作
Intel GPA
-
将模拟器显卡渲染设置改为DirectX,这里选择的是夜神模拟器(最新版本无法附加,测试6.2.0.0版本可以完美使用)
-
打开Graphics Monitor 设置夜神模拟器的exe路径
-
在System Analyzer窗口可以选择截取当前游戏的某一帧
-
这时候Graphics Frame Analyzer就可以看到我们截取的画面,双击打开
-
即可导出模型(无UV信息,单独导出UV拼接上去也是失效)
Ninja Ripper + 3dmax
-
安装Ninja Ripper2.0.8和2.0.5两个版本
-
将模拟器显卡渲染设置改为DirectX(依旧是夜神模拟器)
-
打开Ninja Ripper2.0.5的安装目录(默认为C:\Program Files (x86)\Ninja Ripper 2.0.5 beta)将\bin64\wrapper下的d3d11.dll(现在比较新的电脑基本都是支持Dx11)拷贝到夜神模拟器安装目录 (一般在C:\Program Files (x86)\Bignox\BigNoxVM\RT)
-
打开夜神模拟器,此时左上角会多出一个图标,证明写入成功,如果没有,请检查前面的操作是否有误。
-
进入游戏,找到你想要提取的场景,PrtSc为一般截取,Insert为强制截取。截取的时候,Ninja Ripper的图标会变成红色,游戏会卡住。当变为绿色的时候就是截好了
-
等到画面不再冻结,并且红色的文字恢复为绿色时,打开C:\Users\用户名\AppData\Roaming\NinjaRipper2,在其下有个以 日期_时间_NoxVMHandle.exe_数字 为格式命名的文件夹,打开,里面有一个txt文件和frame_0文件夹,提取的模型就存放在文件夹里。
-
得到了模型和贴图后,即可用3dmax打开(3dmax只支持15及以上版本)。点击导航栏:脚本 -> 运行脚本 -> 找到位于Ninja Ripper2.0.8安装目录下的importers\3dsmax\ import_local.ms -> 打开
-
如果有UV偏移的,可以在Texture Load Parameters选择(多尝试几次,目前没有方法论)
其他
Snapdragon Profiler (需要高通骁龙芯片的手机,推荐Google亲儿子)
Renderdoc (导出需要进一步转化)
因为这次的这个游戏做了防Hook处理,直接导致这两款软件在附加到App上,会直接闪退,无法调试。后续有提取别的文件再续更