解包学习贴1—-天天酷跑资源提取之程序脱壳解密

这个是系列帖子啦,这篇文章主要说一些起因,碎碎念,进度到破解iPA加密。

一、引言和碎碎念

作为一个老东西,有的时候总是想回忆一下老游戏,正巧这么长时间了,发现牢酷跑居然还在运营(卧槽还能蒸)。因为想试试给网站整个吉祥物(可能懒狗直接撂挑子,憋期待哈),所以突发奇想能不能给酷跑角色整出来解个包拿出来用呢,很多角色看着还挺可爱的,遂有系列帖子。

因为解包一个游戏需要很多的步骤,我也在学习,所以这是一个系列贴,慢慢的更新步骤,也作为给自己留下的记录,毕竟人都会忘记,好记性不如烂笔头,把自己的经历和过程记录下来也方便之后自己用到的时候查一查,横竖都有用嘛。

有意思的是,解包这种事情一般来说不怎么常搞,除去开发者调试,最多的话就是很多的热门手机游戏啊,二次元游戏这种解包比较多,因为角色立绘很好看想拿来用或者二创的这种。另外解包的话现在很多游戏的资产都是加密的或者用自研引擎封包改格式的,所以直接读取双击打开基本不可能,解这种包的话,相对麻烦一些,很多PC买断制单机游戏资产没什么加密常见的Unity或者UE解包工具能很快的提取资产,但是嘛,手游、网游这种一般都玩挺花,玩的花但是一般不会有大的改动,毕竟游戏的引擎再怎么魔改,你也不能凭空造一个文件类型出来,所以只能是加密,压缩,特殊封包,巨大的原始数据大概率是能通过某种方式读出来的,所以解这种游戏就像是解密游戏一样,答案就在那里,某种程度上还算是挺有趣的小项目。

二、解什么包?

好了,接下来步入正题。

解包解包,自然得有包,那么问题来了,解什么包?

对于手机来说,系统无非两个,iOS,Android。其实很多情况下Android解包是比较多的,毕竟apk文件为大家所熟知并且很好获取,改个zip后缀直接上,还有多种工具和方便的ADB调试,怎么看Android都是都是解包的优选,相对来说,iOS要麻烦很多。

但是这个帖子我想通过iOS来进行解包,也算是了解一下iOS家族相关的解包问题。前段时间发布的有关自签的帖子也是这个原因。

在解包开始的时候,我也是优先用的Android,但是天天酷跑这个游戏,他比较特殊,因为是一个老游戏了,它的资产文件没有很多,所以酷跑的资产文件直接封到软件运行的base.apk里了,想通过安装后展开的方式提取资源文件是不现实的,所以搞到一半觉得挺麻烦的就想:iOS能不能解包呢?万一iOS的封包不一样呢(事实证明是我想多了。。。)?所以直接开干,解iOS包。

PS:

提取游戏资产的方式其实并不用完全依赖解安装包,也可以通过抓内存的方式进行。抓内存是一种很巧妙的办法,原理很简单,这里先说一下游戏资产的显示原理和简单的计算机组成原理

硬盘作为ROM其IO速度相对于RAM存在天然缺陷,换句话说就是硬盘速度太慢了,CPU的处理速度比你想象的快的多得多得多,单靠硬盘读取速度是满足不了CPU的,所以人们通过快速的RAM将外存的数据放到内存,让内存去和CPU交换数据(这里还有加速手段,只是简单的举个例子),这样就能发挥CPU的性能,流畅的运行应用。

游戏资产会以压缩的形式存储在外部存储(硬盘)中,而如果需要读取这些数据,必定要解密数据,同时为了保证游戏的流畅运行,必要的资产必须时刻准备好发送给CPU解压,CPU解压后告诉GPU渲染。另外,因为游戏不会直接的去绘制整个的游戏界面,界面的渲染,硬件由显卡完成,而软件部分则是需要各种的渲染框架和系统API接口,所以被渲染的资产必定要被解密还原为通用媒体格式,否则这些接口是不认识这些打包后或者加密后的文件的。这里我们就能偷空,通过截取内存中解压好的资产文件获取关键数据。
BUT,这种提取是有缺陷的,简单归简单,对于3D游戏,如此提取大概率其UV贴图等都是混乱的,不全的,丢失绑定关系的,各种问题都接踵而至,同时游戏的优化手段决定了游戏不会在进入后加载所有资产,只会加载当前需要用的和可能需要用的,所以这种方式很难完全抓取资产,但是如果想解一两个立绘这种,这个办法简单快速有效,还是可以试试的。

既然抓内存有问题,另一种解包的难度就会高很多,需要逆向资产的封包方式,一般来说对于熟手来说不会很难,但是对于新手来说就需要好好的学习一下,慢慢的推进。直接解包能够获取游戏内资产的源文件,掌握的解码的通用规则还可以批量的通过脚本解开所有的资产文件加密,对于一个项目加密一般都是一样的,一通百通,高投入高回报嘛。

三、获取iOS端iPA安装包

大家都知道Android用的APK,且Android软件包安装程序允许用户通过侧载的方式安装第三方程序,但是iOS也是可以的,适用于iOS的安装包叫iPA包。只不过iOS包需要AppStore签名,而且果子不开放移动设备侧载(MAC除外),没签的包装不上的,越狱又都是老设备,所以一般正常人都懒得鼓捣,毕竟用iOS不就图个省心嘛。

因为iPA包一般都是通过AppStore分发而且签名有时限,所以没法从开发商官网获取野生的iPA,这里借助爱思获取包,搜索直接下载就可以。

四、初步解包

无论是APK包还是iPA包其本质都是一个zip文件(没想到吧~),修改名为zip后即可看到所有的内部文件,所以针对iOS包的操作在拆包第一步是完全一样的,改后缀。

改ZIP后进行解压,这里大家能够看到AppStore分发验证文件。有这个文件表明这个包是被加密的,这层加密来自苹果,不是开发者,所以先得拆苹果的这层加密,这在iOS逆向中叫做“砸壳”或“脱壳”,是逆向基本功。

其实只想要资产不拆这层也是可以的,这个加密保护的是基本运行程序,这个核心二进制文件决定了应用进程名,以及应用的所有函数名和伪代码,解码了这个东西这个软件在你面前就跟裸奔一样没区别了。

游戏的核心文件在Payload文件夹中,别的都是验证文件,不用怎么管的。

五、砸壳

虽然前面说了解资产不用砸壳,但是作为一个超级莽夫,我能发出来指定是干了

哈哈,毕竟是完成后再码字,所以作为一个小傻子肯定是干了,既然学了,接触了,就是知识,就是技术,就可能会忘,就得记录,好记性不如烂笔头嘛。

一般来说,砸壳有两种方案,使用MAC,以及让iPhone自己来,但是你的iPhone得越狱哈,不越狱搞不定的。
而且作为一个琼B,肯定是用的经济方案,详细方案请移步这篇帖子,本来打算创建个番外贴,倒是不如直接写个独立技术贴好。

但是使用虚拟机MAC会有链接问题,Frida可能不通,所以这里我们选择让iPhone自己来,也就是通过越狱扩展程序完成,至于如何越狱,前置条件可以查看这篇帖子。

越狱的详细操作在这里

越狱后需要的软件在这里

这里需要注意的是,下载下来的AppsDump是一个tipa文件,如何使用请查看这篇文章。

接下来进入我们安装的脱壳程序,点击需要脱壳的软件,进入后选择默认设置就好,点击开始打包。

之后手机会开始跑进度,别息屏,让手机跑就可以了,针对不同的软件和手机设备,时间长度不一性能较强的设备以及较小的包肯定要快很多。

打包完成后其回存储到一个提示地址当中,记住这个地址。

打开你的爱思助手,选择你的设备,点击更多,这里进入文件系统的越狱目录下

目录为

/var/mobile/Documents/DumpIpa

一般来说是这个,具体要看你的脱壳程序提示放在哪里了。

之后用爱思助手把这个文件导出即可

到此就已经获取到完整的脱壳程序了,这个程序包再转ZIP后其中的认证文件也消失了

到这里,第一步脱壳就完成了。

上一篇
下一篇