用一句话总结网上文章对砸壳的解释:AppStore 发布的 App 都是加壳(FairPlay DRM)后的 ipa 文件,逆向App就得先砸壳,在iOS系统中,应用砸壳所使用的都是动态砸壳技术,即从运行在进程内存空间中的可执行程序映像(image)入手,将内存中的内容进行转储(dump)处理来实现脱壳处理。这种方法实现起来相对简单,且不必关心使用的是何种加密技术。

准备:

  1. 设备越狱
  2. Cydia工具安装
  3. 下载App(在 AppStore 随便找个App)

找到刚才下载的App,通过查看cryptid标志位来判断App加密状态。其中1代表加密,0代表已解密:

$ otool -lv /var/containers/Bundle/Application/xxxxx-xxxx-xxxx-xxxx-xxxxx/Foo.app/Foo | egrep 'LC_ENCRYPTION_INFO|cryptid'
          cmd LC_ENCRYPTION_INFO_64
      cryptid 1

如果App没有被加密,则直接交给dyld加载并且运行。如果App已经被加密,则需要内核对其进行解密,得到解密后的MachO文件,再将其交给dyld加载并运行。

再把加密的 macho 用 MachOView 打开看到Load Commands 中有LC_ENCRYPTION_INFO 的Crypt ID 为 1 和上面otool命令查看的内容一致:

Untitled

Hopper 打开找到入口,会提示这是个加密文件:

Untitled

接下来就是对 App 进行砸壳,目前常见的砸壳工具如下: