时时勤拂拭,勿使惹尘埃

TOC

Categories

iOS(十四)高版本越狱的坑 & killed 9


0x0 前言

之前一直都是用的iOS 9.0.2版本的iPhone 5C做测试机,可以完美越狱,所以用着一直都顺畅。
不过最近测试一些app要求系统版本都高于9.3,所以弄了一个iOS 11.2的iPhone 7来当测试机。
但由于iOS 10之后的越狱基本都是非完美的,加上cydia市场已经关闭了,所以遇到了不少的坑。

0x1 Electra or unc0ver 越狱工具的选择

iOS 11版本的越狱工具主要为Electra 和 unc0ver,二者都有一定的坑:

0x11 Electra与Sileo

Electra 是CoolStar团队出的iOS 11 越狱工具,奇美拉Chimera ios 12 越狱工具也是该团队出品。
Electra 越狱成功率很高,基本每次都成功越狱,但由于CoolStar团队与saurik大佬神仙打架,所以在内置cydia里埋了一些坑,稍不注意就会将cydia强制更新为Sileo,且Sileo不支持saurik源和bigboss源,比较恶心。

0x12 unc0ver

unc0ver越狱工具倒是内置了原汁原味的cydia,Electra越狱过的设备需要清理工具清理后再用unc0ver越狱即可,但问题是unc0ver越狱成功率很低,尝试几天就只成功一次,在非完美越狱情况下,完全不能忍。

0x2 cydia问题

0x21 cydia无法联网

越狱成功后,打开cydia通常无法联网(cydia网站大部分都在墙外),这时候需要通过vpn代理才能连接,国内用户可以装pp助手里面的乐网(全局拦截广告工具)。

0x22 Electra越狱的cydia会更新成Sileo

由于Electra源里面埋的有坑,全部更新或者更新必要升级时,都会自动安装Sileo来取代cydia。
Sileo市场到不说差,但并不支持saurik源和bigboss源(其实cydia源的解析很简单,几年前就做过爬虫爬取,详见iOS(十)cydia源采集方式,这里应该是框架冲突和神仙打架等其他原因不愿意支持导致的),结果就是不少经典工具都装不了。
所以可以删除掉Electra源文件/etc/apt/sources.list.d/electra.list来避免更新为Sileo,但下次重启设备重新越狱后又会被自动添加回来。
如果Electra版cydia添加源失败,提示某个源无法加载,也可以删掉该目录下的对应文件即可。

0x23 saurik源地址

saurik虽然关闭了cydia市场,但saurik源其实还是能用的,早期cydia版本内置源地址为:http://apt.saurik.com/,目前该地址有所更改:http://apt.saurik.com/cydia/
bigboss源地址为:http://apt.thebigboss.org/repofiles/cydia/,原生cydia需要通过cydia主页更多来源来添加,Electra版cydia可以直接添加该源。

0x3 killed 9 问题

在iOS 非完美越狱版本中,执行mach-o文件会出现killed 9的问题,这里主要分为以下几种情况:

0x31 胖Mach-O

macOS系统早期由于同时存在x86、x86-64、PowerPC三种平台,所以当时定制了一种多架构的文件结构,后来iOS出现之后也加入了arm和arm64的支持,但iOS上缺少解析胖Mach-O的模块,只支持对应cpu架构的Mach-O文件。
不少从github等开源平台、三方站点下载、自行编译的工具通常默认都是胖Mach-O格式,安装进iOS设备前需要瘦身之后才能正常运行,操作如下,执行完成后会生成指定arm64格式的瘦mach-O文件dumpdecrypted_arm64.dylib
$ lipo dumpdecrypted.dylib -thin arm64 -output dumpdecrypted_arm64.dylib

0x32 未签名

低版本完美越狱都会删掉签名验证,而高版本非完美越狱通常未删掉签名验证,所以在iOS 10及以上版本中出现killed 9情况,则多半都是由于未通过系统文件签名的问题,所以需要手动给mach-o文件打上签名。

0x321 自签名

一、Apple开发者证书

Apple开发者证书需要通过Apple开发者网站注册账号,如果想要提交app到appstore,还需要缴费加入开发者计划才行。
拥有Apple开发者账号后,在 Xcode -> Preferences -> Acounts 登陆账号,之后点击Manager Certificates即可添加开发者证书。添加完成后如下方式使用:
# 列出可签名证书, 找到 mac 上面已经安装的证书
$ security find-identity -v -p codesigning
# 使用本机安装的开发者证书为 dumpecrypted.dylib 签名
$ codesign --force --verify --verbose --sign "iPhone Developer: xxx xxxx (xxxxxxxxxx)" dumpdecrypted.dylib
# 如果有Entitlements文件,可以签名程序并添加Entitlements
$ codesign --force --verify --verbose --sign <自签名证书> --entitlements <资格文件> dumpdecrypted.dylib

二、自签名证书

如果没有Apple开发者证书,也不想注册开发者账号,可以使用自签名证书,参考:解决iOS上Killed 9 错误
在mac上打开钥匙串访问 keychain access ——> 证书助理Certificate Assistant ——> 创建证书Create a Certificate名称随便写 ——> 身份类型选择自签名根证书 ——> 证书类型选择代码签名 ——> 勾选让我覆盖这些默认值 ——> 其他选项采取默认值
签名方式与一、Apple开发者证书通用:
  1. 签名一个程序的:
    $ codesign -fs <自签名证书> mach-o_file
    -f:即—force选项表示强制替换已存在的签名
    -s:即—sign选项表示使用指定证书(本例中证书identity是tanjiti)签名文件
  2. 签名一个程序,并添加资格(Entitlements)文件:
    $ codesign -fs <自签名证书> --entitlements <资格文件> mach-o_file
  3. 查看签名程序的资格(Entitlements),可以用下面的命令,注意有一个-
    $ codesign -d --entitlements - mach-o_file

三、jtool工具无证书签名

jtool是一个比otool功能更完善的工具,添加了许多Mach-O相关的命令,可以在各种平台上运行 macOS,iOS甚至Linux 。
jtool官网:http://www.newosxbook.com/tools/jtool.html,该工具下载后可以直接运行使用:
  1. mach-O文件瘦身
    jtool只支持瘦mach-O文件,所以对胖mach-O文件需要进行一次瘦身,之后执行以下操作即可:
  2. 配置entitlements文件
  3. jtool无证书签名
    $ jtool --sign dumpdecrypted_arm64.dylib --ent dumpdecrypted.entitlements --inplace
    
  4. 验证:
    $ jtool --sig --ent dumpdecrypted_arm64.dylib
    

0x322 entitlement权限

entitlement是程序的资格文件,用于声明程序具有哪些权限,无相应权限虽然不会killed 9,但执行也都会失败。

0x33 hook框架

由于saurik大佬已经决定关闭cydia,CydiaSubstrate这一hook框架在iOS 11及以上版本中已经不太好用了,比如常用的cycript工具在iOS 11上就已经无法直接执行,都需要通过其他hook框架来使用,详情参考:iOS(十三)使用 bfinject 注入iOS 11_cycript & 砸壳

0 评论:

发表评论