apk艺术资源查找与解密
安卓 apk 会有两种形式,一种是 apk ,一种是 xapk。其中 xapk 里面解压出来之后就是很多的 apk 文件,而我们只需要关注其中最大的那一个 apk 即可。
所用工具如下(还没搞传文件的东西,先自己去 google 找资源吧):
查找步骤
1、将 apk 文件当做压缩文件,直接进行解压,即可得到最初版本所有apk使用到的文件。
2、解压完成后,一般情况都可以在里面找到一个 assets 文件夹(下图中展示了两个不同 apk 解压后的目录,可以看到均包含 assets 文件)。该文件夹下的文件资源就是这个APP初始的艺术资源(包括图片、音频等资源文件)。
3、开始查找 .so 后缀的文件,分析出该 apk 是使用的什么框架进行艺术资源的界面渲染。
(1)若是 apk 解压出的文件,其目录下应该有 lib 文件夹,打开进入最后一层,可看到一堆 .so 文件。若看到其中存在 libunity.so 文件,则说明该 apk 是使用的 unity3D 进行资源渲染。
(2)若是 xapk 解压出的文件,首先进入最大的 apk 解压查看其中是否存在 lib 文件夹。若不存在,则观察是否有 arm64_v8a 这种形式的 apk 文件。若有,则对其进行再次解压,即可找到 lib 文件夹。
找到 lib 文件夹后,同样先进入最后一层,若看到 libcocos2dlua.so 文件,则表明该 apk 是使用 cocos2d 进行资源渲染。
4、查找并分析资源文件
资源文件一般就在手机目录的两个位置。
第一个是需要 root 权限才能看到,位于 /data/data 目录下。
另一个为啥是无需 root 权限就可看到,位于 /Android/data 目录下。
一般的资源文件都是有玩才会动态下载的,所以想获得当前时间的全部资源文件有两种方式。第一种就是将 apk 使用 jadx-gui 对 apk 进行反编译,然后在代码中查找。第二种是直接进入游戏中将所有游戏全部点击,确保下载完成后直接进入手机的游戏资源目录中查看。
若查看到的图片等资源文件是损坏的,则说明该文件是经过了加密。此时应使用 wxmedit 工具打开损坏的资源文件,并查看头部的格式进行比对,即可找出加密文件格式。
(注:千万不可只用记事本之类的打开,因为这样很可能导致无法发现正确的加密格式!原因见下)
由此找出正确的加密格式为 T^pt%~CwG 。
文件资源解密
1、使用 ida 反编译工具打开 libcocos2dlua.so ,等待一段时间进行反编译。待左侧出现较多函数后,点击左侧任意位置并按 ctrl+f 调用起搜索框,输入 applicationDidFinishLaunching,然后双击 AppDelegate::applicationDidFinishLaunching 进入函数, f5 反编译为伪代码。查找是否存在 setXXTeaKey 方法。
若存在,则代表其使用的是 xxtea算法 进行资源加密。如图中的 T^pt%~CwG 即为加密文件标识,BLGAMES 即为解密密钥。双击进入 setXXTeaKey 函数,若结构如下图,则表示没有魔改算法(一般不会魔改,但是以防万一,还是记录一下)
至此,可确定加密文件标识及密钥与算法,可直接开始进行破解。因为该 apk 并没有对 xxtea 算法进行魔改,所以可以直接使用一个 xxtea 解密工具进行解密。
2、.assetbundle 文件其实是一个资源文件的集合,可以使用 AssetStudioGUI 对该类型文件进行拆解并导出。导出后查看文件格式发现是正常的,也就是并未再进行第二层加密。