手把手教你抽取iosapp资源之抽取本地资源

最近在看一个语音包软件的时候看图标还挺好看,想把app直接把素材全部导出来算了。但是问题是ios的app打包以后各种资源文件都已经转换过了。所以没法把图片资源(不包括app图标)提取出来。所以就找了找看看有没有现成的可以提取的工具。找了一圈,有差不多三个,但是几乎都不可用;最终找到了一个修复过的可用的,分享下。

 一般app图片分为以下两类:

  1. 打包到安装包的图片资源。

 这里讲的就是提取安装包里面的图片资源。其实打包到安装包的资源也有几类:

  • app自身的资源也就是Assets.xcassetsXcode里面的资源,是单独存放在一个文件的,而且是转换过的。(这次写的是提取这部分资源)
  • app图标和启动图,解压后就可以直接找到。
  • 第三方bundle的资源,是在解压后的第三方bundle里面的,没有转换的。
  • 音视频资源,比如mp3,wav,mp4等等,直接可以在解压的app中是可以找到的。
  • 扩展包资源(比如键盘扩展比如keyboard.appex等等)这部分资源和上面讲的app自身的资源是一样的,是在另外一个同名文件中的。
  1. 网络拉取的资源,也就是app管理系统可以自己配置的资源。

 这里其实用charles抓包就可以了,charles抓包里面的简单的还可以,比如http抓包,但是https抓包就稍微麻烦一点了。要设置证书,自己熟悉的话就另当别论,另外一个问题就是抓包的图片可能还得一个一个保存,我看看有没有什么好的办法可以自动按照域名保存,因为一般app域名就那么几个,这部分以后再写一下。

 导出可以按照以下步骤来:

1. 砸壳app

 自己从appstore下自己想要素材的app,砸壳就用frida就行了,USB连接上手机(注意要是已经越狱的手机),直接./dump.py -l先看下有哪些app,自己想要哪个app的,./dump.py voice.change.chat就可以了。
这里注意要是自己做过端口转发的,不会的话可以参考我之前写的一个文章,在公众号可以搜索下(【IOS13.2.3逆向开发】第二步:MAC远程调试越狱设备

./dump.py voice.change.chat
Start the target app voice.change.chat
Dumping 变声聊天语音包
变声聊天语音包
 to /var/folders/8l/1spxxv7n51n8ry_wb7_gcv9h0000gn/T
start dump /private/var/containers/Bundle/Application/2AEB9E6B-0ACE-4D8C-8366-2EB4F2912B8D/myinputview.app/myinputview
myinputview.fid: 100%|██████████| 2.27M/2.27M [00:00<00:00, 7.16MB/s]
runtime.nib: 15.5MB [00:05, 2.89MB/s]                                  
0.00B [00:00, ?B/s]Generating "变声聊天语音包
变声聊天语音包
.ipa"
0.00B [00:00, ?B/s]

2. 解压

 ipa文件其实也就是zip压缩文件,可以自己解压就行,我这里用unzip(unzip unzip '变声聊天语音包 变声聊天语音包 .ipa' )解压就可以了。这里会输出一堆东西,都是app里面的文件。

Archive:  变声聊天语音包
变声聊天语音包
.ipa
   creating: Payload/
   creating: Payload/myinputview.app/
   creating: Payload/myinputview.app/LocalVoiceVC.nib/
  inflating: Payload/myinputview.app/LocalVoiceVC.nib/objects-13.0+.nib  
  ...
  inflating: Payload/myinputview.app/AboutUsVC.nib/objects-13.0+.nib  
  inflating: Payload/myinputview.app/AboutUsVC.nib/runtime.nib 

 cd到解压后的app的目录就可以看到有app的图标,但是并没有图片资源。iosapp的图片资源一般都打包在Assets.car这个文件里面,如果是视频,音频的文件都会在app解压缩的目录里面找到。

3. 提取资源

 这部分资源找到其实并不难,难的是如何提取出来,自己找了好一阵才找到一个可用的工具。有一个叫cartool的工具专门来提取Assets.car的,但是原作者不维护了,跑一下会闪退。最终找到一个修复过的,大家可以直接用,用法也不难。

 一共有两个工具,其实也就是一个因为是另外一个就是把第一个封装了下,做了个mac app。

  1. 修复后的cartool

 使用方法:

$ cartool <path to Assets.car> [outputDirectory]
例子:./cartool ./Assets.car ~/Desktop/images/

  1. swift写的Mac app
    这个直接给个图就可以了。可以自己git拉下来编译生成一个.app放到自己的Application目录就行。这个优点就是支持了鼠标右键。而且支持拖拽自动解压。

 有空我再把抓网络请求导出资源写一下。嘿嘿嘿。

git remote -v 可以查看当前本地branch从哪里拉的。