apk艺术资源查找与解密

apk艺术资源查找与解密

无咎 30 2023-11-30

apk艺术资源查找与解密

安卓 apk 会有两种形式,一种是 apk ,一种是 xapk。其中 xapk 里面解压出来之后就是很多的 apk 文件,而我们只需要关注其中最大的那一个 apk 即可。

所用工具如下(还没搞传文件的东西,先自己去 google 找资源吧):
image-buze.png
image-diul.png

查找步骤

1、将 apk 文件当做压缩文件,直接进行解压,即可得到最初版本所有apk使用到的文件。

2、解压完成后,一般情况都可以在里面找到一个 assets 文件夹(下图中展示了两个不同 apk 解压后的目录,可以看到均包含 assets 文件)。该文件夹下的文件资源就是这个APP初始的艺术资源(包括图片、音频等资源文件)。
image-wocg.png

3、开始查找 .so 后缀的文件,分析出该 apk 是使用的什么框架进行艺术资源的界面渲染。

(1)若是 apk 解压出的文件,其目录下应该有 lib 文件夹,打开进入最后一层,可看到一堆 .so 文件。若看到其中存在 libunity.so 文件,则说明该 apk 是使用的 unity3D 进行资源渲染。
image-vgur.png

(2)若是 xapk 解压出的文件,首先进入最大的 apk 解压查看其中是否存在 lib 文件夹。若不存在,则观察是否有 arm64_v8a 这种形式的 apk 文件。若有,则对其进行再次解压,即可找到 lib 文件夹。
image-qyrz.png

找到 lib 文件夹后,同样先进入最后一层,若看到 libcocos2dlua.so 文件,则表明该 apk 是使用 cocos2d 进行资源渲染。
image-hwbh.png

4、查找并分析资源文件

资源文件一般就在手机目录的两个位置。
第一个是需要 root 权限才能看到,位于 /data/data 目录下。
另一个为啥是无需 root 权限就可看到,位于 /Android/data 目录下。
一般的资源文件都是有玩才会动态下载的,所以想获得当前时间的全部资源文件有两种方式。第一种就是将 apk 使用 jadx-gui 对 apk 进行反编译,然后在代码中查找。第二种是直接进入游戏中将所有游戏全部点击,确保下载完成后直接进入手机的游戏资源目录中查看。
若查看到的图片等资源文件是损坏的,则说明该文件是经过了加密。此时应使用 wxmedit 工具打开损坏的资源文件,并查看头部的格式进行比对,即可找出加密文件格式。
(注:千万不可只用记事本之类的打开,因为这样很可能导致无法发现正确的加密格式!原因见下)
image-zahk.png
由此找出正确的加密格式为 T^pt%~CwG 。

文件资源解密

1、使用 ida 反编译工具打开 libcocos2dlua.so ,等待一段时间进行反编译。待左侧出现较多函数后,点击左侧任意位置并按 ctrl+f 调用起搜索框,输入 applicationDidFinishLaunching,然后双击 AppDelegate::applicationDidFinishLaunching 进入函数, f5 反编译为伪代码。查找是否存在 setXXTeaKey 方法。
image-iywv.png

若存在,则代表其使用的是 xxtea算法 进行资源加密。如图中的 T^pt%~CwG 即为加密文件标识,BLGAMES 即为解密密钥。双击进入 setXXTeaKey 函数,若结构如下图,则表示没有魔改算法(一般不会魔改,但是以防万一,还是记录一下)
image-lgov.png

至此,可确定加密文件标识及密钥与算法,可直接开始进行破解。因为该 apk 并没有对 xxtea 算法进行魔改,所以可以直接使用一个 xxtea 解密工具进行解密。

2、.assetbundle 文件其实是一个资源文件的集合,可以使用 AssetStudioGUI 对该类型文件进行拆解并导出。导出后查看文件格式发现是正常的,也就是并未再进行第二层加密。