之前的九篇文章讲述的是在不越狱的情况下,详细的讲解了对APP重签名的原理,如何动态库注入,以及之后的各种调试技巧。这些功能其实已经很强大了,能够帮助咱们在绝大多数情况下去分析并且更改对方的APP了。这对付一些在开发过程中没有安全意识的APP其实已经足以。但是但凡对方有对APP进行防护,那么重签名就显得有些弱鸡了。
比如:
1、登录微信后,第二天会受到他们的警告。
2、重签名优酷后可以看到他们有类似非法APP的Log
...

那么这个时候就需要咱们对APP,甚至的操作系统拥有更大的掌控权,而这一切的基础就是越狱!

hackers总是想象如果自己是开发者会怎么写,然后才能找到入手点。同理,开发者们也要想象自己是hackers会怎么做,才能采取相应的防御措施。然后,就是一场递归的博弈。
拿越狱检测这件事来说,起初大家只需判断有无安装Cydia就好了,hackers们说好,那我就不安装Cydia也可以动手脚。开发者们又说,那你一定得用的上MobileSubstrate,bash,ssh吧,我去检测手机有没有安装这些工具。可是又有什么用呢?你判断什么我绕过去什么。
当class-dump大肆流行,函数符号都被暴露,开发者想尽办法藏起自己的敏感函数代码。hackers们也知道class-dump的死穴在哪里,于是新的检索办法油然而生。也就说,当一个防御手段成为流行,它就不会再是个让hackers大骂“真特么费劲”的防御手段了。比如之前介绍的一个小技巧:内存数据擦除 ,hackers知道开发者都去擦数据了,那我hook memset在你擦之前去读就好了。开发者说:我直接写硬盘上然后删除!hackers说:难道你没听说过文件恢复?

以上来自大佬念茜的自言自语。

所以说,这是一个全新的篇章,从这开始才是真的逆向的起点,让我们一起来享受在iOS世界中安全攻防的其乐穷穷吧。

一、什么是越狱

要了解越狱,就必要要先了解iOS系统的启动过程。
iOS启动引导分为三种模式:

  • 正常引导
  • 恢复引导
  • 固件更新引导

这里我们只对「正常模式」进行介绍,其他两种模式可以自己猜一猜。

1、图解启动链

2、详解启动链

Step 1、按下电源

额,这个就不谈了。

Step 2、Boot ROM

所有iOS设备在处理器内都集成有一段名为Boot Room的代码,此代码被烧制到处理器内的一块存储上,并且只读,所以它的完整性的得到保障的。但这也同样会有问题,万一Boot Room本身存在安全漏洞,那么就无法通过更新进行修复。
而Boot Room的功能主要是负责初始化设备,并且引导加载底层引导加载器LLB(Low Level Bootloader)。在这一过程中,Boot Room会使用Apple Root CA Public证书对LLB进行验证,如果验证成功则加载iBoot,不成功则启动失败。
Boot Room在启动的过程中的地位至关重要,由于Boot Room只读特性,保证了iPhone上不能安装Android系统。同理,在除了iPhone其他的设备上没有Boot Room,也就无法安装iOS系统。

Step 3、Low Level Bootloader

LLB(Low Level Bootloader)不同于Boot ROM,它不是被内嵌在设备上的,而是在iOS系统中,同其他文件一样,是一种被加密的IMG3格式文件,会随着iOS系统更新而更新。 LLB负责启动更高层次的Bootloader,同样这一步也需要进行验证。验证不成启动失败,成功则继续。

Step 4、iBoot

iBoot 才是引导过程中的主加载器,它负责加载操作系统内核。同样这一步也需要进行验证。验证不成启动失败,成功则继续。

iBoot在内存中被加载至地址0x5FF00000处。它有一个内建的HFS+驱动,可以直接访问iOS的文件系统,并支持多线程。iBoot通常会派生出两个线程:
一个main线程,负责显示启动时的苹果logo,并根据auto-bootboot-command环境变量的设置(正常引导模式下boot-command被设为fsboot)进行系统引导,引导过程可以根据bootdelay环境变量延迟进行;
一个是uart reader线程,苹果可能将这个线程用于调试,其基本处于闲置状态。正常引导模式中,iBoot调用fsboot()函数挂载iOS系统分区,定位内核,准备设备数并引导系统,如果引导失败,则进入恢复模式引导。

以上三个步骤只要其中任何一个步骤验证失败,则启动失败。

Step 5、launchd && 守护程序和代理程序 && SpringBoard

之前最主要的几部完成之后就剩下启动相关程序了,先启动第一个程序launchd,再由由launchd启动守护程序和代理程序,之后是桌面应用SpringBoard,系统启动完成。

3、越狱是什么?

Windows下最高权限用户是AdminAdmin可以对电脑操作任何事情,哪怕是删掉自己。 Linux下最高权限用户是RootAndroid下早年就有Root的说法,其实就是取得Root权限。 而iOS衍生与Unix,其与Linux基本相似,所以咱们这说的越狱其实就是取得Root权限。

结合上文所说的安全启动链的验证过程,越狱要做的事情也就是找到那三个验证的步骤中的漏洞,并且绕过其验证,从而禁止掉信任链中负责验证的组件,最终取得Root权限。

目前情况下越狱分两种:

  • 完美越狱:破解iOS系统漏洞之后,每次系统重启都能自动调用注入的恶意代码,达到破坏安全验证,再次获得ROOT权限。
  • 非完美越狱:越狱系统后,并没有完全破解安全链,有部分信息或功能应用不佳;比如;关机以后必须去连接越狱软件来引导开机;或者重启会导致越狱的失效;这样的越狱称为“不完美越狱”。

目前完美越狱只支持iOS10一下的设备,所以如果大家需要玩,建议入手一台iOS9的iPhone5s(咸鱼300块之内能包邮到家哦),

二、如何越狱

自从盘古联合PP助手发布了国内首批越狱工具后,越狱就变得极其简单。一键操作,无痛无烦恼。
笔者利用「爱思助手」助手越狱。

然后根据自己的手机系统选择对应版本的越狱工具即可。
根据提示有对应的简单操作,然后等待自动重启,重启后能打开Cydia即代表越狱成功。当然也有可能越狱失败,重复以上越狱的步骤就好了。

Tips: 笔者在手机机身温度比较高的时候经常越狱失败,所以如果有同样情况的同学,等待机身温度降低之后再次尝试,应该就可以成功了。

三、推荐插件(必装)

首先在Cyida中添加几个常用的源:
1、PP助手:apt.25pp.com
2、雷锋源:apt.abcydia.com
3、Frida:build.frida.re

  • Apple File Conduit "2":获取访问手机根目录权限

  • AppSync Unified 关闭签名:绕过签名检测

  • adv-cmds:命令行

  • OpenSSH:SSH (Secure SHell) 协议的免费开源实现。SSH协议族可以用来进行远程控制, 或在计算机之间传送文件。

  • Frida:之后制作砸壳工具需要用到

四、远程连接登录手机

1、Wifi连接

在上一步已经安装完OpenSSH插件之后,Wifi登录就变得很简单。
先确保手机和电脑通处于一个Wifi环境,在手机的网络设置里面找到当前的IP地址,如:172.20.122.108 打开终端

// ssh 用户名@手机IP地址
$ssh root@172.20.122.108
复制代码

第一次登录会有类似这样的提示:

直接yes就可以了,他会将对应IP生成秘钥保存在目录/.ssh/known_hosts

如果将其中对应的IP删掉,下次又会有同样的提示了。

然后就需要填入用户密码,root用户的默认密码为:alpine。 如果你对手机安全性有要求,建议改掉此密码,并且牢记。否则就不要改了,要不然忘记了的话就只能刷机了(刷机有风险)。

出现类似如下图就代表等成功

2、Wifi取别名

每次都是用ssh root@1172.20.122.108有点麻烦,而且也不利于记忆。所以我们可以给一个对应的IP取一个对应的名字,比如我们给172.20.122.108的root用户取名5s(假设我的越狱手机就是5s),那么我们下次就可以直接使用以下命令来连接:

$ssh 5s
复制代码

方法: 在上面提到的known_hosts同级目录下新建一个名为config的文件(建议使用Vim命令创建,因为有权限问题)。

其中加入如下内容:

Host 5sHostName 172.20.122.108       User root                      Port 22
复制代码

假设有另外一台手机连了另外一个IP,则需要多个Host,依次类推:

Host 5sHostName 172.20.122.108       User root                      Port 22                      Host 6s  Hostname 172.20.122.163 User rootPort  22
复制代码

3、USB连接

上文已经了解到,如何用wifi登录手机,要了解USB连接之前要知道一个前提:
本机的回环地址默认为127.0.0.1。 本机地址也可以用localhost表示。而USB默认的端口号为22
所以在USB端口号开放的前提下,我们只要连接端口22即可。

点击sukimashita官网或者我的Github下载usbmuxd。

我们只需要用到其中的python-client文件夹下的tcprelay.pyusbmux.py两个文件。

终端cd进入该目录,开放22端口并且映射到12345端口上(可以是任意端口,前提是此端口没有被占用),使用如下命令:

python tcprelay.py -t 22:12345
复制代码

然后新建一个终端窗口
连接此本地IP下的12345端口即可:

ssh root@127.0.0.1 -p 12345
复制代码

区别于上面的wifi地址,127.0.0.1 又是一个新的ip所有又会出现一次新的公钥保存提示,同样的yes,再输入密码:

4、USB脚本连接

命令虽然简单,但是每次都要进入tcprelay.py对应的目录会很麻烦,所以还是老规矩,先设置环境变量,再写对应脚本,即可实现在任意目录使用USB连接了。

1、设置环境变量

如果之前有跟笔者之前的文章做过,这一步可跳过。
在用户的根目录下新建文件夹FYSHELL,专门存放所有的自定义脚本文件。FYSHELL也可以随意存放,只是该目录的位置在下面要使用到。
在用户的根目录下找到文件.bash_profile,新增加FYSHELL的环境变量(找不到.bash_profile文件?那就新建一个,推荐使用vim新建,避免权限问题)。 如下图,笔者此时拥有两个环境变量FYSHELLCY

2、USB端口脚本

先将之前的python-client文件夹拷贝到FYSHELL中。
新建usbConnect.sh文件,输入内容:

python /Users/用户名/FYShell/python-client/tcprelay.py -t 22:12345
复制代码
3、登录手机脚本

新建loginUsb_5s.sh文件,输入内容:

ssh root@127.0.0.1 -p 12345
复制代码

之后直接使用这两个脚本就能完成USB登录手机的任务了!

sh usbConnect.sh
复制代码
// 新建端口后在执行以下命令
sh loginUsb_5s.sh
复制代码

五、SSH登录原理

以下内容由于笔者的5s不在身旁,所以换了台iPhone6的手机继续。。。

SSH登录本职上还是调RSA加密的运用:

  • 远程服务器(iPhone)上生成一堆公私钥
  • 将公钥发给客户(Mac)
  • Mac每次登录iPhone的时候使用本地保存的公钥加密密码,发送给iPhone,iPhone使用私钥解密,密码一直则登录成功。

1、公钥保存

在上文中的公钥保存其实就是这里所说的第一步。

2、验证

使用终端查看验证

  • 查看iPhone本身的公钥
cat ssh_host_rsa_key.pub
复制代码
  • 查看Mac上保存的公钥
cat known_hosts
复制代码

两个地方的公钥是相同的,得以验证。

3、中间人攻击

中间人攻击其实就是在SSH登录的时候,验证失败的结果。
将本地保存的RSA公钥随意改一个字母笔者将最后一个字母f改成了e
再次尝试登录手机,即可出现中间人攻击提示。

验证完之后还是将其改回来吧。

六、免密登录

免密码登录也称“公钥登录”,原理就是用户将自己的公钥储存在远程主机上。登录的时候,远程主机会向用户发送一段随机字符串,用户用自己的私钥加密后,再发回来。远程主机用事先储存的公钥进行解密,如果成功,就证明用户是可信的,直接允许登录 不再要求密码。

1、本地(MAC)生成RSA公私钥

先查看本地(MAC)之前是否已经生成过RSA公私钥,直接进入目录.ssh下查看,如果其中有id_rsaid_rsa.pub即代表已有,无需重新生成。如果强行生成新的,则会导致之前使用这对秘钥的地方失效。

如果没有,直接使用如下命令生成新的

ssh-keygen
复制代码

接着会出现一些问题,全部留空,直接回车即可。之后就可以发现目录.ssh下有了id_rsaid_rsa.pub了。

2、将本地(MAC)的公钥发送给服务器(iPhone)

ssh-copy-id root@localhost -p 12345
复制代码

期间会需要输入一次iPhone用户的密码(默认alpine)。

接着,再次尝试登录,就会发现不用在输入密码就可以登录了。

类似上一步的验证SSH原理,查看两个端的用公钥。

同样得以验证。

七、总结

如果说越狱是逆向的开始,那么Mac远程登录手机就是逆向的大门,只有进入其中,才能一探究竟。后续的所有操作,比如:砸壳,动态分析,动态调试,动态库注入都离不开这个步骤,所有如果可以,希望大家能够跟着这片文章做一遍。有可能会有坑,但是这样才记忆深刻!

下一篇文章将会讲述在登录手机后如何对APP进行砸壳。

引用

  • iOS之系统启动流程
  • iOS系统安全机制概览

转载于:https://juejin.im/post/5cd94dabe51d453aa307c840

iOS逆向(10)-越狱!越狱!远程连接登录手机相关推荐

  1. 腾讯云服务器远程连接登录流程

    腾讯云服务器购买后从哪登录连接服务器?有5种方法可以登录到云服务器操作,无论是Windows还是Linux系统在云服务器管理控制台都可以登录,腾讯云百科来详细说下腾讯云服务器远程连接登录的方法流程: ...

  2. 使用TeamViewer远程连接Android手机并控制

    前言 程序员在家或者在外出差喜欢使用TeamViewer控制公司电脑及时处理问题. 而作为一名Android开发者过程中使用电脑远程控制Android手机也是必备的技能,这样我们就可以远程查Bug,远 ...

  3. 逆向——Mac使用OpenSSH远程连接越狱iPhone

    Mac使用OpenSSH远程连接越狱iPhone 一.简介 SSH(Secure Shell),意为『安全外壳协议』,是一种可以为远程登录提供安全保障得协议,使用SSH,可以把所有传输得数据进行加密, ...

  4. iOS 逆向编程(五)通过 (OpenSSH) Wifi 远程连接登录 iPhone

    一.安装 Mac 上提高效率的辅助工具 (可选) 二.简介 1.我们经常在 Mac 的终端上通过敲一些命令行来完成一些操作. 2.iOS 和 Mac OS X 都是基于 Darwin (苹果的一个基于 ...

  5. iOS逆向学习之越狱

    iPhone 6 越狱 版本: 9.2.1 需要 windows 系统 开始学习 iPhone 逆向,查了一下那些手机版本可以越狱http://jailbreak.25pp.com/ios/,又在 & ...

  6. SAP 远程连接登录配置(SAP Router)

    关于sap 客户端远程链接应用服务器的方法有两种,其中一种是vpn另外一种就是SAProuter,我使用的方法就是SAProuter,关于saprouter的使用网上的文章有很多,根据这些文章安装使用 ...

  7. ios 远程控制linux服务器,mac远程连接linux 服务器桌面by VNC

    实验室有两台强劲的Linux服务器用来做研究.之前我一直都是用ssh登到服务器上去码代码,反应速度很快,感觉很不错.但是因为在做机器视觉,难免需要看远程的图片.命令行虽然快,总不能每次都把图片拷贝到本 ...

  8. 10拨号拒绝远程连接_ADLS动态拨号vps常见的问题

    动态拨号vps的运用是非常广泛,如'推广,爬虫,开发,企业门户网站等等-为众多企业客户在互联网时代提升市场竞争力提供了有力的帮助,(余初云vps)作为一家精心打造可信赖的大数据基础服务供应商,与大家一 ...

  9. 电脑远程连接android手机

    前提条件: 电脑和手机要处于同一个WiFi下 需要在手机端安装sshandroid 安装完成之后运行sshandroid,如下图所示 从图片中可以看到地址为10.10.101.82 端口号为2222为 ...

最新文章

  1. 短视频SDK架构设计,短视频APP开发目标首选
  2. [BUUCTF-pwn]——ez_pz_hackover_2016
  3. python搜索文件内容_python实现搜索文本文件内容
  4. 粒子文字特效css,CSS3 粒子效果
  5. 项目管理:项目管理为什么难?
  6. Web 前沿——HTML5 Form Data 对象的使用(转)
  7. php函数巧用 array_column
  8. 【Android游戏开发二十】物理游戏之重力系统开发,让你的游戏变得有质有量!...
  9. amlogic_android7.1的s905x平台长按按键5s清除数据和缓存的实现思路
  10. 《游戏设计师修炼之道:数据驱动的游戏设计》一1.4 来自政府和产业的挑战...
  11. Qt学习之资源文件(qrc)的添加以及使用
  12. IP Scanner Pro for mac(局域网IP扫描)
  13. 关于Windows Xp的一些美化
  14. [SHOI2015]激光发生器
  15. 【猿说VUE】条件渲染,绝代双骄之 v-if 和v-show
  16. 航空航天等军工研究所
  17. 2023年全国最新工会考试精选真题及答案3
  18. 面试:JavaScript基础概念
  19. WIN间远程桌面连接:你的凭据不工作解决(亲测有效)
  20. 用python画七巧板_用turtle画一个七巧板

热门文章

  1. 赚钱,能治愈一切矫情
  2. linux 上elasticsearch集群搭建详解,手把手教学(tar下载包)
  3. 苹果CMSv10首涂第十六套首款原创支持百度mip技术自适应视频模板
  4. Malformed argument has embedded quote: -Djava.endorsed.dirs=\“\“
  5. 参股期货 前景光明 留意
  6. TZC 1283: 简单排序 —— 选择排序
  7. Win10 如何彻底关闭每个盘符默认的共享
  8. 权健产品被各大电商平台全线下架 / 中国北斗系统开始服务全球 / 小米互联网洗衣机发布 | 雷锋早报... 1
  9. 说说 Activity、Intent、Service 是什么关系
  10. mailto web弹出outlook发送邮件