专栏首页FreeBuf偏执的iOS逆向研究员:收集全版本的macOS iOS+越狱+内核调试

偏执的iOS逆向研究员:收集全版本的macOS iOS+越狱+内核调试

Intro

虽然“只有偏执狂才能够生存”这句话已经被假药停给毁了,但是作为一只有逼格的高大上的iOS逆向分析研究员,难道如果有现成的macOS/iOS全版本镜像可以下载并且无限“漫游”,难道你就不想来一套么?

在本文中,你将能够获得的是:

1.macOS:10.1210.1110.1010.910.810.7:六个版本的虚拟机一键安装; 2 .使用苹果的KDK套件(Kernel Develop Kit)对虚拟机里的macOS Sierra 10.12进行内核调试; 3 .iPhone 4s iOS 9.3.5免shsh降级到iOS 6.1.3iOS 8.4.1 4 .iOS 6、7、8、9、10:全系统越狱;一部4和一部4s,实现iOS 6、7、8、9任意漫游;

六个版本的虚拟机一键安装

Vagrant是一个基于Ruby的工具,用于创建和部署虚拟化开发环境。它使用Oracle的开源VirtualBox虚拟化系统,使用 Chef创建自动化封装虚拟环境。我们可以通过 Vagrant 封装一个Linux/macOS/Windows的开发环境,分发给团队成员。成员可以在自己喜欢的桌面系统(Mac/Windows/Linux)上开发程序,代码却能统一在封装好的环境里运行,非常霸气。

封装好的虚拟机,可以在Vagrant的虚拟机市场上进行分发,供全世界的开发者进行下载。

我们首先来介绍一下Vagrant的虚拟机市场,然后以安装macOS Sierra 10.12为例,阐述虚拟机的一键安装流程。

Vagrant的虚拟机市场

不多说了!放图吧!

相信读者也知道是什么意思!点进去相应链接之后,就会有相应的虚拟机介绍,以及安装方法。

怎么样,很全面吧?笔者已经在这里找到了10.7~10.12的全系虚拟机。

Vagrant和Virtualbox在Win/Linux/macOS全桌面平台都有客户端的,读者自行在其主页下载即可。

“一键安装”macOS Sierra 10.12

首先声明,我说谎了,不是“一键”,而是“两键”。

对的,只要这两句话,就好了。

第一句话运行之后,会在当前目录下自动生成Vagrant的配置文件vagrantfile和文件夹.vagrant。第二句话运行后vagrant就会自动下载安装AndrewDryga/vagrant-box-osx这个虚拟机了,并且在安装完成后在后台打开。使用Virtualbox的控制台就可以看到了。

使用KDK对macOS Sierra 10.12进行内核调试

就拿上文刚刚安装的这个虚拟机来进行内核调试吧!

关机后在“设置”→“网络”里,将“连接方式”改成“桥接网卡”,后续追踪IP时比较容易定位。重启使其生效。

在苹果的开发者下载中心,下载内核调试套件Kernel Debug Kit,这时候首先要确定自己的系统版本,笔者本机是10.12.6,被调试机器的版本比较重要,因为是它来安装KDK,调试机只需要有Xcode顺带的lldb即可。虚拟机系统版本为10.12.2,点击“屏幕左上角黑苹果”→“关于本机”→“系统报告”→左侧下拉选择“软件”,右侧即会出现当前系统的版本号及编译号,笔者为16C67,请见下图。

所以在苹果的开发者中心,也选择下载16C67这个版本,也就是Kernel_Debug_Kit_10.12.2_build_16C67.dmg,请见下图。

在KDK包中包含了大量的调试符号和一些内核驱动模块,可以提供Release、Debug、Development三种模式的连接方式,其中后两种可以提供完整的调试和开发功能,包含了断点和错误检查等调试所必须的功能模块。只有被调试的机器需要安装KDK包,本节中也就是虚拟机需要安装,调试机不需要安装KDK包,调试机中只要有上一章安装好的Xcode自带的lldb即可。

我们把下载好的Kernel_Debug_Kit_10.12.2_build_16C67.dmgscp传输到虚拟机上,在虚拟机上安装。

到桌面上双击dmg文件,里面是一个pkg安装包,双击进行安装即可。

安装完成之后,我们来将虚拟机内的macOS以调试模式来启动,方法就是设置nvramboot-args参数,来达到切换启动模式的目标。在这里稍微介绍一下nvram

一般情况下我们设置nvramboot-args参数只要$ sudo nvram boot-args="-v debug=0x144"这么一行代码就好了,哪怕在VMWare虚拟机中,也是同样的情况。这行代码是将boot-args及其参数写到EFI启动分区去的,VirtualBox的启动分区是不允许内部主机接触的,因此即使执行了这个命令,也不会生效。必须由VirtualBox自己来进行设定。

虚拟机关机之后,我们回到主机上,在主机上运行以下命令:

我们来解释一下这个命令,VBoxManage setextradata很明显是增加虚拟机配置,"macOS_Sierra_10.12.6"是虚拟机的名字,在VirtualBox主界面就能够看到的名字,"VBoxInternal2/EfiBootArgs"就是增加EFI的BootArgs配置,debug=0x141 kext-dev-mode=1 kcsuffix=development pmuflags=1 -v就是我们需要加入的启动参数了,使虚拟机进入调试模式。

顺便介绍另外一个命令:VBoxManage setextradata "macOS_Sierra_10.12.6" VBoxInternal2/EfiGopMode 4可以将虚拟机的显示大小设置为1440x900的分辨率。这里0,1,2,3,4 分别代表了 640x480, 800x600, 1024x768, 1280x1024, 1440x900的分辨率。

接下来就是把系统原来的内核,更换成我们给它下载的这个内核。类似于把汽车的发动机给完整换一套新的,车还能跑,只不过内核已经换了。要换内核,就要把SIP关闭。因为内核是受SIP保护的。在VirtualBox里关闭SIP有一点麻烦,我们快速过一遍。

虚拟机开机后立刻迅速点按F12,进入VirtualBox的BIOS,选择Boot Manager,再选择EFI Internal Shell,进入Shell之后输入FS2:,然后回车,再输入cd com.apple.recovery.boot,回车,再输入boot.efi,然后回车,请见下图。

这样就进入macOS恢复系统了,进入恢复系统之后,在实用工具打开终端,输入csrutil disable,禁用SIP,来禁用SIP。趁着在恢复系统这样的特权模式下,我们把剩下的该做的了也做了吧。

替换内核:

然后清除一下原先的系统缓存。

最后重启,运行reboot命令,可能会等一会儿(大概三五分钟),因为磁盘还没有准备完成。重启之后,系统则开始获得IP,进入等待连接状态,如下图所示。。

VirtualBox有个不好的地方,就是EFI启动引导中允许自定义的参数只有bootargs这一项,而使用csrutil工具来关闭SIP的时候,需要设置csr-active-config参数,也就是说,每次关机后,SIP就又回来了。不过并不影响调试,每次开机按F12,进恢复模式,然后重复以下三个步骤就可以了。

重启后就又进去“崭新”的调试模式了。

我们在调试机器上,使用lldb连上去:

连接成功。被调试机器上显示Connected to remote server

现在就可以开始调试内核了。

iPhone 4s免shsh降级三系统漫游

iPhone 4s的最新版系统是iOS 9.3.5,也就是说不管怎么折腾,都不用担心侧漏了。但是!(敲黑板!)(重点在这里!)苹果为iPhone 4s还保留着iOS 8.4.1iOS 6.1.3的签名,这是官方为版本太旧的机型升到新版本时准备的阶梯版本,比如现在还在iOS 5的用户,他会收到升级到iOS 6.1.3的通知,然后下一步就是升到iOS 8.4.1,最后才是升级到iOS 9.3.5。所以,现在我们就可以利用这个机制,完成iOS 9、6、8三个版本的漫游!。首先使用下面的tsschecker命令来保存这两个版本的shsh2,万一某一天失效了呢?

tsschecker从其官方Github网站上进行下载,4s连接到主机之后,就可以运行上述命令了。

还有就是,想要从9.3.5直接降到旧的版本是不可能的,如果尝试在iTunes里直接恢复iOS 6.1.3的固件,会出现以下提示:

“无法为这个镜像授权”。另外再提一句,在iTunes里进行镜像恢复的方法,win系统在iTunes里按住shift点恢复,选择你下好的ipws文件;Mac系统在itunes里按住option点恢复,选择你下好的ipws文件;当然还是那句话,需要苹果验证服务器的支持。

所以现在我们就来做一点苹果服务器不支持的事情,比如任意版本恢复到iOS 6.1.3

首先在手机上进行iBBS的破解。

将iPhone 4s越狱之后,在Cydia里添加tihmstar的源,地址是:repo.tihmstar.net,在源里安装kDFUApp,点击该App打开。然后从上至下依次勾选上屏幕上的四个选项,注意勾选完第二个选项之后,要等一会儿,等它下载完iBBS之后,才可以继续勾选第三和第四个选项。等ready to enter kDFU mode出现之后,将手机连接到电脑,点击enter kDFU就可以进入DFU模式啦。

DFU模式是比恢复模式处于更加纯净和早期阶段的模式,这时候屏幕是黑色的,iTune会显示检测到处于恢复模式的iPhone。

准备好shsh2和ipsw镜像,安装futurerestore

shsh2可以用上文的命令来获取,ipsw镜像我们还是从ipse.me来获取,futurerestore可以从官方下载链接下载最新的版本。

进行恢复

下载后解压,为futurerestore_macos二进制包增加可执行权限之后,直接运行即可查看其选项。

选择我们需要的--latest baseband--use-pwndfu之后,输入-t来指定上文保存好的shsh2,然后就是输入下载好的ipsw镜像的路径即可。

回车之后即会出现一大堆命令行,注意会出现WARNING和ERRNO等,但是并不影响刷机的过程。

这时候futurerestore会实施shsh2文件的重放(replay attack),模拟本地与服务器的交互流程,让本地“以为”得到了苹果服务器的官方验证,这就是通过重放shsh2来实施的。然后剩下的恢复ipsw镜像的流程,就是普通的恢复流程了。

大概二十分钟左右,手机就恢复好了,进入iOS 6.1.3系统,经测试,可以正常激活使用,与原生没有任何区别。使用p0sixspwn进行越狱后,又可以重复上面的流程,刷入任何保存了shsh2的系统了。

另外,在iOS 6.1.3上进行系统更新时,收到的OTA更新包是iOS 8.4.1,这也验证了上文的说法。请见下图。

当然,iOS 6.1.3iOS 8.4.1都是可以完美越狱的,所以,读者有了iPhone 4s,就等于拥有了三个可以越狱的系统,用来学习是完全足够了。

futurerestore并不是对于所有机型的所有情况都适用,比如说上文针对的就是32位的可越狱机型、并且保存了shsh2的情况才适用。适用降级的型号和情况还是比较复杂的,读者可以阅读项目官网获得详细的介绍。

但是目前,也就是在我们目前的情况下,实现iOS 9、6、8三系统漫游,是毫无压力的。

iOS全版本越狱;一部4和一部4s,实现iOS 6、7、8、9任意漫游

iOS 6、7的越狱就不说了,网上资料多如牛毛;

iPhone 4的最新系统是iOS 7.1.2,可以用盘古越狱进行完美越狱。

另外,iPhone 4的Bootroom是可以破解的,可以进行内核调试,具体可以参考这篇文章1、这篇文章2和这篇文章3。

iOS 10、9、8越狱都是最近放出的(一年之内),现在介绍其流程

iOS 10yalu越狱iOS 9PhoenixiOS 8EtasonJB,这三款越狱的共同点,就是都没能找到代码签名(code sign)的漏洞,只能使用Cydia Impactor手动签名后信任证书进行安装。另外就是yalu越狱只针对64位设备,另外两款则只针对32位设备。

现在以典型的Phoenix越狱为例,介绍其流程:

为什么一遍又一遍地说iPhone 4s呢,因为首先4s的最新版本iOS 9.3.5越狱是最新的,17年8月份才刚刚放出来;其次,iOS 9.3.5是4s支持的最后一个版本,4s与iOS 10无缘;也就是说,不管手上的4s怎么折腾,系统如何损坏,它总能升级到iOS 9.3.5这个可以越狱的版本,免去读者的后顾之忧。

而且32位系统更加适合入门,比64位系统对新手友好很多。

有关iPhone 4s的iOS 9.3.5版本越狱,江湖上还有一段轶事,树人哥(twitter@i0n1c)也一直要出这一版越狱,还搞了一出kickstarter众筹这个版本的越狱,目标金额高达111,111欧元,折合人民币接近百万了。然而不到半个月,越狱就被Siguza和tihmstar免费放出来了,被啪啪啪打脸。

网站上已经写明了完整的越狱流程,请见下图。

同时声明,可能会失败多次,多试几次就好。这版越狱也并不是完美越狱(Semi-untethered),完全关机重启后,需要重新越狱才能回到越狱状态。跟盘古的越狱一样的。这种方式其实有利有弊,对笔者来说其实利大于弊,可以在越狱与正版之间随意切换,非常方便做研究。

按照官网指示,先下载用来越狱的IPA文件,再下载Impactor,选择Mac OS X平台,然后安装。首先验证下载的IPA是不是原封正版:

结果正确,与官网提供的摘要相同。

Impactor的安装过程不再详述,与一般APP无异。接下来将iPhone 4s连接到Mac,如果是虚拟机还需要将USB映射到虚拟机的USB里面,黑苹果则不用。USB连接成功后打开Impactor,该款应用会直接显示连接到的iPhone的ID,如下图所示。

接下来调整好Finder窗口,将刚刚下载的IPA文件,鼠标单击后拖拽到Impactor的界面上去,松开。然后会被要求输入你的Apple ID和密码,ID则是普通的邮箱地址ID;密码不是普通密码,而是专门用来为App进行签名的APP-SPECIFIC PASSWORDS,在AppleID页面的Security栏目下生成和获取,一般为zkxt-svre-beay-edzm形式一串字符串。输入无误之后Impactor开始工作,如果不出意外,Impactor总会有各种问题。比如下图3.1.2c的这个lockdown问题,笔者就是通过重新拔插手机,在手机上重新点击“信任电脑”,在电脑上重新点击“允许访问手机信息”来解决的。

下图3.1.2d则是另外一个问题,显示是权限问题,我的AppleID没有Network Extensions的权限,因此无法签名。其实根本不是这样,在我重启和拔插了数遍之后,可以正常签名。

然后就安装成功了。

接下来在设置→通用→设备管理→开发商应用,选择信任刚刚用来签名的证书。

然后就可以打开这款App了。点击Prepare For Jailbreak,然后Accept,然后Begin Installation,然后Use Provided Offsets,iPhone 4s的偏移已经包括在里面了,所以直接用内置的就好。

事实证明该款越狱并不是很稳定,笔者重启了大概两次,才越狱成功,Cydia最终出现在桌面上。

另外提醒大家,一旦关机或者重启之后,要重新越狱噢。

另外,大家可以查看本书的4.1章节,只要是4s都可以降级到iOS 6.1.3iOS 8.4.1这两个系统,然而这两个系统都是可以完美越狱的,所以只要拥有了4s,就拥有了三个系统,对于学习和研究是足够了。

iPhone 5s iOS 10.2的越狱流程

本次用来实验的机型是A1530 iPhone 5s,系统版本为iOS 10.2(14C92)。

首先下载已经编译好的IPA,因为这种方法是最简单的。

iPhone连接到Mac上,打开Yalu-Jailbreak-iOS-10.2/IPA Build文件夹,将其中ipa文件跟上一章拖到Cydia Impactor上,放开之后输入账号,和App密码,流程与上文一样。

在手机上信任开发者之后,即可打开App了。

这款App在Luca的原装Yalu基础上做了增强,增加了开启Mobile Substrate按钮,并且重新设计了界面UI,寓意苹果专治的统治。

点击Jailbreak Now即可开始越狱!一般情况下,一两次之内可以越狱成功,重启之后Cydia就会出现在桌面上。

总结

要说总结,其实也没啥好总结的,内容都在上面了…那就提前祝大家新年快乐吧!

本文分享自微信公众号 - FreeBuf(freebuf),作者:Roy_Chen

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2017-10-25

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • iOS 8漏洞可致wifi覆盖范围内任意iPhone iPad不断重启

    在周二旧金山的RSA安全会议上,研究人员展示了他们的最新研究成果——iOS 8中的0day漏洞“无iOS区”,顾名思义,能够让某个WiFi范围内的苹果iPhon...

    FB客服
  • iOS 9漏洞:利用Siri绕过锁屏访问私人图片和联系人

    一名黑客发现了一个新的、非常简单的方法,该方法利用了苹果的私人助理Siri,绕过运行iOS 9的锁屏iOS设备(iPhone、iPad或iPod touch)的...

    FB客服
  • Petya及Notpetya的核心差异分析

    这段时间针对恶意软件NotPetya的分析文章已经出了很多了,这篇文章的内容相当于只是对目前已存在内容的一次补充,而本文所要讨论的重点就是Petya和Notpe...

    FB客服
  • 在越狱的iPhone/iPad上安装自开发环境

    自开发跟自编译意思一样,后者表示一个开发语言的开发能力成熟度;前者则表示一个开发平台的开发能力成熟度。 iPhone跟iPad面世这么多年,一直无法摆脱“...

    俺踏月色而来
  • CentOS EFI引导问题修复

    ? 本文作者 / 飞哥 专注于OpenStack计算、Python 热爱大海、雪山 导 言 UEFI正在逐渐取代传统的BIOS,在使用UEFI启动系统的过程中...

    腾讯云TStack
  • 女皇武则天:我不愿被 extends

    利用继承,我们可以基于已存在的类构造一个新类。继承的好处在于,子类可以复用父类的非 private 的方法和非 private 成员变量。

    沉默王二
  • Linux 当文件系统坏掉了该怎么整

    小手冰凉
  • 在茫茫决策树入门帖里,我强推这篇(附可视化图)

    决策树是我最喜欢的模型之一,它们非常简单但是很强大。事实上,Kaggle中大多数表现优秀的项目都是XGBoost和一些非常绝妙的特征工程的结合,XGBoost是...

    zenRRan
  • 独家 | 基于TextRank算法的文本摘要(附Python代码)

    TextRank 算法是一种用于文本的基于图的排序算法,通过把文本分割成若干组成单元(句子),构建节点连接图,用句子之间的相似度作为边的权重,通过循环迭代计算句...

    数据派THU
  • 分析 | Python抓取婚恋网用户数据,原来这才是年轻人的择偶观

    刚好在看决策树这一章,书里面的理论和例子让我觉得这个理论和选择对象简直不能再贴切。看完长相看学历,看完学历看收入。

    灯塔大数据

扫码关注云+社区

领取腾讯云代金券