2020 iOS 逆向学习-砸壳(更新:20200408)

网上关于 iOS 应用砸壳相关的博客,非常多,但都存在一些问题。

  1. 年代久远,砸壳的方法早已过时
  2. 比较新的文档,不够完整,不够详细,对于一些过程都是一带而过,缺乏详细的描述,对小白来说非常不友好。

故,我将最近实践成功的经验详细地记录下来,希望对小白们有所帮助吧,如果文中有说得不对的地方,也希望大家能指出。

预备知识

教材:主要学习了一下庆哥(刘培庆)的书《iOS应用逆向与安全》,小伙伴们可以去买一本正版纸书,支持一下~

越狱设备

本次学习,选择的是 iOS 13.3.1 的 iPad mini4, A8 芯片 ARMv8 架构

iOS12-13越狱教程

其中要注意两点

  1. checkra1n 属于不完美越狱,与完美越狱的区别是如果设备重启了,将会回到未越狱状态,需要重新越狱。
  2. 注意越狱成功后,在手机上使用 checkra1n app下载 cydia 时,可以使用 4G 网络,可以大幅加快下载速度。

frida 砸壳

为什么要砸壳?

这是因为应用上传至App Store后,苹果会对应用的代码部分进行加密,当应用运行时才会动态解密, 在这样的情况下是无法直接使用后面讲到的class-dump和IDA进行分析的。所以,在分析应用之前,要把应用加密的内容解密,然后把应用和解密后的可执行文件导出到计算机中。

这里我不会使用网上经常出现的 dumpdecryptedClutch,而是使用了 frida

1 iOS 端配置

  1. 在越狱设备上,打开 cydia,添加源 https://build.frida.re
  2. 打开添加的源,找出 frida 进行安装,其中会列出 3 个软件,分别是 Frida for 32-bit devicesFrida for A12+ devicesFrida for pre-A12 devices 三个,请根据越狱设备的实际 CPU 类型,进行选择,本文中使用的 iPad mini 4 是 A8 芯片,所以安装了第三项
  3. 安装完成后,可在ssh终端运行 frida-ps -U 查看,是否成功(实测,command not found 应该也不影响后续的使用)

2 MAC 端配置

Anaconda

这个软件的主要作用是可以配置多种不同的 Python 环境,避免在 MAC 上安装多个 Python 版本,导致的管理混乱,其他功能可以自己去了解一下。

这里采用 Anaconda 的原因是,在用普通方式(在自己的 mac 下安装不同版本的 Python,并安装依赖库)踩了很多坑,实在趟不过了......

  1. 搜索并安装 Anaconda 软件
  2. 安装完成后,建议不使用软件自带的 Python,而是自己 create environment,这里配置环境 Python 3.7,并为环境取名 zyy
  3. 配置完成后,点击对应 zyy 环境的三角箭头,打开终端,这个终端就会有你安装的 Python 版本
2020 iOS 逆向学习-砸壳(更新:20200408)_第1张图片

安装 frida-ios-dump

  1. 克隆庆哥(刘培庆)改造过的仓库,代码如下
git clone https://github.com/AloneMonkey/frida-ios-dump
  1. 使用前面提到的 Anaconda 打开的终端, cd 到前一步下载的目录 frida-ios-dump
  2. 安装需要的依赖
sudo pip install -r requirements.txt --upgrade
  1. 如果在上一步出现 six 导致的问题,请忽略 six 这个库
sudo pip install six --upgrade --ignore-installed six
  1. 如果安装的过程比较慢,可以切换成清华源进行安装 (如果存在因为这个源而导致某些库安装不成功,可以通过修改 requirements.txt 中的依赖库名单来分批下载,使用原本的源下载不成功的库)
sudo pip install -r requirements.txt --upgrade -i https://pypi.tuna.tsinghua.edu.cn/simple

电脑和 iOS 设备的端口映射

  1. 使用 USB 将设备与电脑相连
  2. 进行映射,在终端输入 iproxy 2222 22(其中 2222 代表电脑端的端口,22 是 iOS 设备的端口号,如果发现电脑端端口号已被占用,可以使用新的端口号进行映射,打开在 frida-ios-dump 目录下的 dump.py,并将 2222 修改为新的端口号,端口号注意不要超过四位数)
  3. 终端显示 waiting for connection,看到这儿,抓紧时间看下一步的砸壳喔,否则连接就会超时

砸壳

  1. 确保 iOS 设备一直保持 USB 连接,并将想要砸壳的应用打开,保证显示在前台,否则可能出现找不到应用,导致砸壳失败
  2. 使用 Anaconda 的 zyy 环境另开一个新的终端
  3. cd 到之前下载的 frida-ios-dump 目录
  4. 执行 ./dump.py 微信(这里将微信改成你想砸壳的应用名即可)
  5. 如果发现应用名称重复了怎么办?终端执行 ./dump.py -l 可以查看已安装的应用名称和对应的 bundle Id
PID  Name                       Identifier
-----  -------------------------  ----------------------------------------
 9661  App Store                  com.apple.AppStore
16977  Moment                     com.kevinholesh.Moment
 1311  Safari                     com.apple.mobilesafari
16586  信息                         com.apple.MobileSMS
 4147  微信                         com.tencent.xin
10048  相机                         com.apple.camera
 7567  设置                         com.apple.Preferences
    -  CrashReporter              crash-reporter
    -  Cydia                      com.saurik.Cydia
    -  通讯录                        com.apple.MobileAddressBook
    -  邮件                         com.apple.mobilemail
    -  音乐                         com.apple.Music
  1. 执行如下命令,对指定的 bundle id 应用进行砸壳,./dump.py -b com.tencent.xin
  2. 砸壳成功,可以在 frida-ios-dump 目录下找到 xxx.ipa

如何判断 ipa 是否有壳

  1. 将 ipa 文件后缀改为 zip 进行解压
  2. 找到 xx.app 包内容下的 xx 二进制可执行文件(abc 是我随便取的)
  3. 在终端执行 otool -l xx | grep crypt
  4. 找到 cryptid 这一行,有壳为 1,已脱壳为 0

如果能成功走到这一步,恭喜,砸壳成功啦。

你可能感兴趣的:(2020 iOS 逆向学习-砸壳(更新:20200408))