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

摘要:
尽管Intro的短语“只有偏执狂才能生存”已经被假药摧毁,但作为一名巨大的iOS反向分析研究人员,如果有一个现成的完整版MacOS/iOS图像可以下载并无限“漫游”,你不想想出一套吗?我们可以通过Vagrant封装Linux/macOS/Windows开发环境,并将其分发给团队成员。我们先来介绍一下Vagrant的虚拟机市场,然后以MacOS Sierra 10.12的安装为例来说明虚拟机的一键安装过程。Vagrant和Virtualbox的客户端都在Win/Linux/macOS的全桌面平台上。读者可以从他们的主页下载它们。

Intro

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

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

  • macOS:10.1210.1110.1010.910.810.7:六个版本的虚拟机一键安装;

  • 使用苹果的KDK套件(Kernel Develop Kit)对虚拟机里的macOS Sierra 10.12进行内核调试;

  • iPhone 4s iOS 9.3.5免shsh降级到iOS 6.1.3iOS 8.4.1

  • 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的虚拟机市场

不多说了!放图吧!

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

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

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

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

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

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

“一键安装”macOS Sierra 10.12

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


vagrant init AndrewDryga/vagrant-box-osx
vagrant up

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

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

$ vagrant up
Bringing machine 'default' up with 'virtualbox' provider...
==> default: Box 'AndrewDryga/vagrant-box-osx' could not be found. Attempting to find and install...
  default: Box Provider: virtualbox
  default: Box Version: >= 0
==> default: Loading metadata for box 'AndrewDryga/vagrant-box-osx'
  default: URL: https://vagrantcloud.com/AndrewDryga/vagrant-box-osx
==> default: Adding box 'AndrewDryga/vagrant-box-osx' (v0.2.1) for provider: virtualbox
  default: Downloading: https://vagrantcloud.com/AndrewDryga/boxes/vagrant-box-osx/versions/0.2.1/providers/virtualbox.box
  default: Progress: 0% (Rate: 1328k/s, Estimated time remaining: 6:54:31)
...
...

  default: Box Provider: virtualbox
  default: Box Version: >= 0
==> default: Box file was not detected as metadata. Adding it directly...
==> default: Adding box 'osx-sierra-0.3.1.box' (v0) for provider: virtualbox
  default: Unpacking necessary files from: file:///Volumes/3T-B/VM_BOX/macos.sierra.10.12/osx-sierra-0.3.1.box
==> default: Successfully added box 'osx-sierra-0.3.1.box' (v0) for 'virtualbox'!
==> default: Importing base box 'osx-sierra-0.3.1.box'...
==> default: Matching MAC address for NAT networking...
==> default: Setting the name of the VM: macossierra1012_default_1506781540910_5049
==> default: Clearing any previously set network interfaces...
==> default: Preparing network interfaces based on configuration...
  default: Adapter 1: nat
==> default: Forwarding ports...
  default: 22 (guest) => 2222 (host) (adapter 1)
==> default: Running 'pre-boot' VM customizations...
==> default: Booting VM...
==> default: Waiting for machine to boot. This may take a few minutes...
  default: SSH address: 127.0.0.1:2222
  default: SSH username: vagrant
  default: SSH auth method: private key
  default:
  default: Vagrant insecure key detected. Vagrant will automatically replace
  default: this with a newly generated keypair for better security.
  default:
  default: Inserting generated public key within guest...
  default: Removing insecure key from the guest if it's present...
  default: Key inserted! Disconnecting and reconnecting using new SSH key...
The private key to connect to this box via SSH has invalid permissions
set on it. The permissions of the private key should be set to 0600, otherwise SSH will
ignore the key. Vagrant tried to do this automatically for you but failed. Please set the
permissions on the following file to 0600 and then try running this command again:

/Volumes/3T-B/VM_BOX/macos.sierra.10.12/.vagrant/machines/default/virtualbox/private_key

Note that this error occurs after Vagrant automatically tries to
do this for you. The likely cause of this error is a lack of filesystem
permissions or even filesystem functionality. For example, if your
Vagrant data is on a USB stick, a common case is that chmod is
not supported. The key will need to be moved to a filesystem that
supports chmod.

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

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

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

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

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

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

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

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

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


$ scp Kernel_Debug_Kit_10.12.2_build_16C67.dmg vagrant@192.168.8.119:/Users/vagrant/Desktop/
The authenticity of host '192.168.8.119 (192.168.8.119)' can't be established.
ECDSA key fingerprint is SHA256:d3r08Htc*mUg6qtgiCvbd13sXFuYmo*dkFt5J17sx4U.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.8.119' (ECDSA) to the list of known hosts.
Password:
Kernel_Debug_Kit_10.12.2_build_16C67.dmg       100%   69MB 44.0MB/s   00:01

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

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

  • -v: 输出所有日志

  • kcsuffix: 通过增加后缀指定启动内核

  • pmuflags: 很多文章里提到这个要设置为1,说是用来禁用“watchdog”定时器模块。然而Apple’s Kernel Programming Guide提到watchdog定时器模块仅仅存在于G5、G4时代的主机上,要么就是OS X Server的某些主机会启用,这个选项几乎是没意义的,当然,设置一下倒也无妨。

  • debug: 这个选项就是用来进行内核调试的关键了,其参数标志位及含义已经在Apple docs苹果文档里载明,我们主要需要使用到它三个标志位:DB_LOG_PI_SCRN | DB_ARP | DB_NMI.

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

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


$ VBoxManage setextradata "macOS_Sierra_10.12.6" "VBoxInternal2/EfiBootArgs" "debug=0x141 kext-dev-mode=1 kcsuffix=development pmuflags=1 -v"

我们来解释一下这个命令,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可以将虚拟机的显示大小设置为1440×900的分辨率。这里0,1,2,3,4 分别代表了the 640×480, 800×600, 1024×768, 1280×1024, 1440×900的分辨率。

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

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

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

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

替换内核:

$ cp -rf /Volumes/vagrant-box-osx/Library/Developer/KDKs/KDK_10.12.2_16C67.kdk/System/ /Volumes/vagrant-box-osx/System/

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


$ kextcache -invalidate /Volumes/vagrant-box-osx/
kextcache -invalidate /
/ locked; waiting for lock.
Lock acquired; proceeding.
kextcache -arch x86_64 -local-root -all-loaded -kernel /System/Library/Kernels/kernel -prelinked-kernel /System/Library/PrelinkedKernels/prelinkedkernel -volume-root / /System/Library/Extensions /Library/Extensions
kext-dev-mode allowing invalid signature -67054 0xFFFFFFFFFFFEFA12 for kext IOUSBHostFamily.kext
kext-dev-mode allowing invalid signature -67054 0xFFFFFFFFFFFEFA12 for kext IOUSBFamily.kext
kext-dev-mode allowing invalid signature -67054 0xFFFFFFFFFFFEFA12 for kext IOSerialFamily.kext
...
...
kext-dev-mode allowing invalid signature -67054 0xFFFFFFFFFFFEFA12 for kext IONetworkingFamily.kext
kext-dev-mode allowing invalid signature -67054 0xFFFFFFFFFFFEFA12 for kext IOHIDFamily.kext
kext-dev-mode allowing invalid signature -67054 0xFFFFFFFFFFFEFA12 for kext IOFireWireSBP2.kext
kext-dev-mode allowing invalid signature -67054 0xFFFFFFFFFFFEFA12 for kext IOFireWireFamily.kext
kext-dev-mode allowing invalid signature -67054 0xFFFFFFFFFFFEFA12 for kext IOATAFamily.kext
kext-dev-mode allowing invalid signature -67013 0xFFFFFFFFFFFEFA3B for kext AppleMobileDevice.kext
KernelCache ID: 20FF78CD8E2177B1E0E6686E0ACDC97A
symlink("/System/Library/PrelinkedKernels/prelinkedkernel.development", "/System/Library/Caches/com.apple.kext.caches/Startup/kernelcache.development") failed 17 (File exists) <createPrelinkedKernel 2795>

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

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

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

  • kextcache -invalidate /Volumes/vagrant-box-osx/:清除内核缓存

  • csrutil disable:关闭SIP

  • reboot:重启

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

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


$ lldb
Voltron loaded.
(lldb) kdp-remote 192.168.8.119
Version: Darwin Kernel Version 16.3.0: Thu Nov 17 20:23:59 PST 2016; root:xnu-3789.31.2~1/DEVELOPMENT_X86_64; UUID=B41FA753-B6B0-3310-8CF5-7568DDABDA5D; stext=0xffffff8016e00000
Kernel UUID: B41FA753-B6B0-3310-8CF5-7568DDABDA5D
Load Address: 0xffffff8016e00000
WARNING: Unable to locate kernel binary on the debugger system.
Process 1 stopped
* thread #1, stop reason = signal SIGSTOP
  frame #0: 0xffffff8017008a94
-> 0xffffff8017008a94: movl   $0x0, 0x871b26(%rip)
  0xffffff8017008a9e: addq   $0x8, %rsp
  0xffffff8017008aa2: popq   %rbx
  0xffffff8017008aa3: popq   %r14
(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_macos -d iPhone4,1 -e 4B5E0EC3CB -i 6.1.3 -o -s
$ ./tsschecker_macos -d iPhone4,1 -e 4B5E0EC3CB -i 8.4.1 -o -s

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

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

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

“无法为这个镜像授权”。另外再提一句,在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二进制包增加可执行权限之后,直接运行即可查看其选项。


$ chmod *x futurerestore_macos
$ ./futurerestore_macos
Version: b99eb8140d8e6c23f34e950102bb79e61c72384d - 152
Libipatcher Version: f32e41d850f51448bd6c588ead9c7d6455733f3c - 44
Odysseus Support: yes
Usage: futurerestore [OPTIONS] IPSW
Allows restoring nonmatching iOS/Sep/Baseband

-t, --apticket PATH       Apticket used for restoring
-b, --baseband PATH       Baseband to be flashed
-p, --baseband-manifest PATH   Buildmanifest for requesting baseband ticket
-s, --sep PATH       Sep to be flashed
-m, --sep-manifest PATH   Buildmanifest for requesting sep ticket
-w, --wait           keep rebooting until nonce matches APTicket
-u, --update           update instead of erase install
    --latest-sep       use latest signed sep instead of manually specifying one(may cause bad restore)
    --latest-baseband       use latest signed baseband instead of manually specifying one(may cause bad restore)
    --use-pwndfu       use this for restoring devices with odysseus method. Device needs to be in kDFU mode already
    --just-boot="-v"       use this to tethered boot the device from kDFU mode. You can optionally set bootargs
    --no-baseband       skip checks and don't flash baseband.
                          WARNING: only use this for device without baseband (eg iPod or some wifi only iPads)

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


$ ./futurerestore_macos --latest-baseband --use-pwndfu -t /Users/roysue/Downloads/tsschecker-latest/4B5E0EC3CB_iPhone4s_A1431/323700573131_iPhone4,1_6.1.3-10B329_2e0356a7d9ffd962ebc433f58ce944aa61aea88c.shsh2 /Users/roysue/Downloads/iPhone4,1_6.1.3_10B329_Restore.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逆向研究员:收集全版本的macOSiOS+越狱+内核调试

当然,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 10的yalu越狱、iOS 9的Phoenix和iOS 8的EtasonJB,这三款越狱的共同点,就是都没能找到代码签名(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免费放出来了,被啪啪啪打脸。

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

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

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

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


$shasum -a 256 Phoenix3.ipa
616ef9da4796ae7d490fb7b0e31cd85bb48e2732d2436c7710e79716e2b80e61 Phoenix3.ipa

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

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

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

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

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

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

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

然后就安装成功了。

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

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

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

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

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

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

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

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

iPhone 5s iOS 10.2的越狱流程

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

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


$ git clone https://github.com/GeoSn0w/Yalu-Jailbreak-iOS-10.2.git

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

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

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

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

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

总结

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

免责声明:文章转载自《偏执的iOS逆向研究员:收集全版本的macOS iOS+越狱+内核调试》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇webstorm设置新建vue文件的模板Flask框架的日志配置下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

virsh 连接虚拟机 (vnc 或 控制台)

第一种方式 1.如果虚拟机登录方式为VNC,在ubuntu机器上安装vncviewer 在虚拟机的配置xml中 <graphics type="vnc" autoport="yes" keymap="en-us" listen="0.0.0.0"/> 安装vncviewer $apt-get install vncviewer 查看该虚拟机的端...

Spyder——科学的Python开发环境

刚开始接触Python的时候,网上找到的资料基本上上来就是介绍Python语言,很少有对开发环境进行讲解的,但如果在学习的过程中不断练习,这样效率会更高,所以特意将一个Python的开发环境Spyder自带的入门教程翻译出来,希望可以帮助到和我有同样困惑的你。 个人水平有限,会有翻译不到位的地方,欢迎批评指正! Spyder是使用Python编程语言进行科...

Git 分支及bug分支合并

branch 分支学习:branch称为分支,默认仅有一个名为master的分支。一般开发新功能流程为:开发新功能时会在分支dev上进行,开发完毕后再合并到master分支。 学习参考上图,也可以按照着这样的流程进行开发,如果遇到上文开发到一般需要临时修复Bug的情况,可以按照下图的流程进行:   注意:git merge 时也可能会出现冲突,解决冲突的...

企业级虚拟化实战之KVM——shell脚本实现虚拟机安装、管理、快照、存储池、批量创建

问题背景 使用shell或者python脚本完成KVM虚拟机的批量创建,要求如下: (1)脚本需要人机交互,当输入虚拟机数量,虚拟机规格参数后,即可批量创建相应机器; (2)使用EXP技术从网络安装虚拟机,创建多个时使用复制原理; (3)脚本实现虚拟机生命周期管理,即可实现关机,启动,快照,从快照启动等等。 README.txt 本程序实现了虚拟机安装、虚...

linux下依赖库的版本问题引起的安装失败:libssl-dev版本问题无法安装 :libssl-dev : 依赖: libssl1.0.0 (= 1.0.1-4ubuntu3) 但是 1.0.1-4ubuntu5.31 正要被安装

依赖库版本问题引起的安装失败解决方法如下有两种: 1、是由于源需要更新,如下操作: libssl-dev : 依赖: libssl0.9.8 (= 0.9.8o-1ubuntu4) 但是 0.9.8o-1ubuntu4.4 正要被安装 解决方法 进入“系统->系统管理->更新管理器->设置”,在弹出的“软件源”对话框中选“更新”标签...

常用Java虚拟机参数

常用Java虚拟机参数 java虚拟机参数如何输入 右键---->Run As---->Run Configurations---->选择Arguments---->在VM arguments中输入 常用跟踪调试参数 -XX:PrintGC 只要遇到GC就会打印日志 上图中每个[GC ~~~~] 表示一次GC结果 A...