时时勤拂拭,勿使惹尘埃

TOC

Categories

iOS(十五)几种App砸壳工具对比


0x0 概述

由于App Store下载的APP全都是经过苹果加密过的ipa包,由于App Store使用Apple ID相关的对称加密算法,因此加密后的ipa包,是无法对其进行反编译的,也无法class-dump,需要对其进行解密才能反编译。
APP程序运行起来都会直接在内存解密出原始代码,所以可以在越狱的设备里面通过内存dump方式提取解密后的程序,这种解密又称为砸壳,以前写过一个blog手工实现了这个工作过程:iOS(九)内存dump应用&手动解密,不过解密之后还需要手动恢复mach-O头信息才能运行。
由于手工解密操作繁琐,所以出现了一些自动化的工具来实现这个过程,常见的解密工具有以下几种:dumpdecrypted、clutch、frida-ios-dump、bfinject。
另外,由于高版本非完美越狱里面,都没有删掉签名验证,所以直接运行都会出现killed 9,需要手动签名之后才能使用,详情参考:iOS(十四)高版本越狱的坑 & killed 9

0x1 dumpdecrypted

dumpdecrypted是最早出现也是最基础的砸壳方式,使用稍微复杂,通过手工注入动态dylib库文件方式来实现,绕过方式较多,比如添加编译参数禁用动态加载dylib库(而且dumpdecrypted也已经5年多未曾更新了)。

0x11 编译dumpdecrypted

由于dumpdecrypted未提供release版本,故需要自行下载编译:
$ git clone https://github.com/stefanesser/dumpdecrypted.git
$ cd dumpdecrypted
$ make
直接make编译得到dumpdecrypted.dylib文件通常都是胖Mach-O结构,导入iOS设备之前需要使用lipo瘦身,并添加签名。

0x12 dumpdecrypted使用方式

  1. 拷贝进越狱设备
    $ scp dumpdecrypted.dylib [email protected]:~/
  2. 连接设备
    $ ssh [email protected]
  3. 寻找目标App路径
    # ps -A
    ...
    7279 ??         0:00.94 /var/containers/Bundle/Application/C438C976-2657-46F1-83BE-07F2DFBAF5A7/SYHDAppPayProject.app/SYHDAppPayProject
    ...
    
  4. 找出对应APP的documents目录
    可以使用cycript:
    $cycript -p <pid>
    cy# [[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask]
    @[#"file:///var/mobile/Containers/Data/Application/BB2EB568-851B-42F4-AD1F-B9B4D5295755/Documents/"]
    
  5. 注入砸壳,需要将dumpdecrypted.dylib拷贝到APP documents目录下执行
    # cp dumpdecrypted.dylib /var/mobile/Containers/Data/Application/BB2EB568-851B-42F4-AD1F-B9B4D5295755/Documents/
    # cd /var/mobile/Containers/Data/Application/BB2EB568-851B-42F4-AD1F-B9B4D5295755/Documents/
    # DYLD_INSERT_LIBRARIES=dumpdecrypted.dylib /var/containers/Bundle/Application/C438C976-2657-46F1-83BE-07F2DFBAF5A7/SYHDAppPayProject.app/SYHDAppPayProject
    
    砸壳成功后会在目标目录下生成SYHDAppPayProject.decrypted文件。

0x2 clutch

0x21 clutch简述

clutch是之后出现的全自动化砸壳工具,使用简单方便,但失败率较高,尤其arm64版本问题很多。

0x22 使用clutch

  1. 下载并编译生成clutch执行文件
  2. 编译生成的clutch也是胖Mach-O结构,需要瘦身并签名
  3. 将clutch执行文件拷贝到手机里
    scp Clutch [email protected]:/usr/bin
  4. 查看当前手机程序未砸壳的应用
    Clutch -i
  5. 对列出的正版应用砸壳
    使用对应列表号或bundleID进行砸壳
    Clutch -d <com.diary.mood>
    或者
    Clutch -d 12

0x3 frida-ios-dump

0x31 frida-ios-dump简述

frida-ios-dump是基于frida开发的一键砸壳工具,需要配置frida环境,配置过程较为复杂,且有一定失败率。

0x32 安装frida

macOS:
$ sudo pip install frida $ sudo pip install frida-tools

0x33 iOS设备植入frida-server

选择对应firda版本和iOS设备cpu型号的frida-server,如本次为frida-server-12.6.0-ios-arm64.xz
将frida-server拷贝到iOS设备的/usr/bin目录下,并chmod a+x frida-server后启动frida-serverfrida-server已经签名过)

0x34 配置frida-ios-dump

执行sudo pip install -r requirements.txt --upgrade即可,会自动安装依赖
如果设备上的module版本不对,可以手动指定版本安装,如:pip install frida==12.6.0 --user

0x35 使用frida-ios-dump砸壳

  1. usb链接iOS设备
  2. mac公钥~/.ssh/id_rsa.pub导入iOS设备/var/root/.ssh/authorized_keys
  3. 启动iOS设备上的frida-server
  4. 修改frida-ios-dump的dump.py文件,指定iOS设备ip、端口、账号名、密码
  5. 打开目标app
  6. mac上执行$ python dump.py -l查看ios app list
  7. mac上执行python dump.py [BundleID]即可一键砸壳

0x4 bfinject

bfinject在CydiaSubstrate不再支持更新之后出现的hook框架,目前只支持iOS 11,最开始主要用于cycript,后来发现里面内置的砸壳工具使用效果不错(成功率比以上三种都高)。使用参考:iOS(十三)使用 bfinject 注入iOS 11_cycript & 砸壳

0 评论:

发表评论