iOS攻防(一): iPhone手机越狱 & SSH


人在年轻时,最头疼的一件事就是决定自己这一生要做什么。
——王小波 《工作与人生》

前言

  • 很早之前就想研究了解一下iOS越狱开发和逆向相关的知识,然后就买了《iOS应用逆向工程》这本’小黄书’,也查了查相关的资料,比较出名的可能就是iOS女神念茜的iOS攻防系列文章了。
  • 但是由于自身的惰性和其他的外界因素,导致’小黄书’翻了几章后就在公司的办公桌上处于长时间的休眠状态,而念茜的文章年代稍微比较久远也在读了两篇后被遗忘在chrome的书签里面,真真的从入门到放弃。🤣
  • 最近这段时间刚好工作行有一些闲暇的时间,偶尔在网上看到《iOS 应用逆向与安全》这本书,这是自“小黄书”后的又一本关于逆向安全的书。随想再从头开始学习下iOS越狱开发和逆向相关的知识,并将学习过程及采坑经验记录于此,希望这一次会有始有终…
  • 这是本系列的第一篇,希望不会成为最后一篇🐒😂

正文

  • 现在Apple公司已经越来越注重开放性,iPhone已经不像几年前那样异常封闭,许多以前只有越狱才有的功能也慢慢的原生自带,越来越多的小伙伴已经没有了当前那种越狱的激情,而随着越来越多的越狱大神隐退、越狱组织解散,辉煌了近10年的越狱也渐渐走向了没落。
  • 但如果想借鉴别人的App某个功能实现思路或者加强我们自己App的安全性,那么最好的途径就是从越狱开发和逆向入手,而这一切的开始的基础:你必须要有一部越狱过的iPhone手机。
  • 所有资料文件&工具在这里

iOS 9x 32位系统越狱

配置

  • 机型:iPhone4s
  • 版本:美版
  • 系统:9.3.2

越狱工具

  • 使用Home Depot越狱工具,仅支持32手机系统,如果是64位手机系统请直接使用各种助手越狱
  • 支持设备(32位设备):
    • iPhone 4s、iPhone 5、iPhone 5c、iPad 2、iPad 3、 iPad 4、iPad mini、iPod touch 5G
  • 支持iOS系统版本:
    • iOS 9.1、iOS 9.2.1、iOS 9.3、iOS 9.3.2、iOS 9.3.3、iOS 9.3.4
  • 越狱须知:
    • 越狱前请备份您的重要资料以免造成丢失;
    • 本次越狱属于不完美越狱,若设备重启,则会恢复到未越狱状态,Cydia 及已装得越狱应用会闪退,越狱插件也将失效,需要重新激活;但是安装插件Community Offsets后,重启设备越狱也不会失效,可实现完美越狱。
    • 越狱工具请在这里下载

越狱步骤

  • 1、首先下载签名工具以及越狱ipa,将签名工具解压到电脑桌面,打开Impactor,手机连接电脑后软件会读取到手机信息;

Cydia_Impactor

  • 2、然后把32位iOS9越狱ipa(MixtapePlayer.ipa)拖入软件里;

drag_mixtape_player

  • 3、提示输入你的Apple ID账号,和Apple ID密码。
  • 4、Apple ID验证完成后软件会自动安装到手机里,可以在手机桌面看到Home Depot的图标,这个就是越狱工具;
  • 5、接下来进手机设置-通用-设备管理,找到你的ID后点进去并点击信任(设备须保持联网状态);
  • 6、然后回到设备桌面,运行Home Depot应用,
    • 点击Prepare for jailbreak
    • 再依次点击Accept –> Dismiss –> Proceed With Jailbreak –> Begin Installation –> Use Provided Offsets
    • 等待设备自动重启后,Cydia就会出现在手机桌面则代表越狱完成,如果越狱重启后没有出现Cydia,则可以多试几次,直到成功为止;
  • 成功后打开Cydia,添加插件源「http://repo.tihmstar.net」,在Cydia中搜索「Community Offsets」并插件安装,安装后即使重启越狱也不会失效,Cydia也不会闪退,相当于完美越狱。

iOS 10x 32位系统越狱

配置

  • 机型:iPhone5c
  • 版本:美版
  • 系统:10.3.2

越狱工具

  • 使用h3lix-RC5越狱工具,仅支持32手机系统,如果是64位手机系统请直接使用各种助手越狱。
  • 支持设备(32位设备):
    • iPhone 4s、iPhone 5、iPhone 5c、iPad 2、iPad 3、 iPad 4、iPad mini、iPod touch 5G
  • 支持iOS系统版本:
    • iOS 10 - 10.3.x
  • 越狱须知:
    • 越狱前请备份您的重要资料以免造成丢失;
    • 本次越狱属于不完美越狱,若设备重启,则会恢复到未越狱状态,Cydia 及已装得越狱应用会闪退,越狱插件也将失效,需要重新激活;
    • 越狱工具

越狱步骤

  • 1、首先下载签名工具以及越狱ipa,将签名工具解压到电脑桌面,打开Impactor,手机连接电脑后软件会读取到手机信息;

Cydia_Impactor

  • 2、然后把32位iOS10x越狱ipa(h3lix-RC5.ipa)拖入软件里;
  • 3、提示输入你的Apple ID账号,和Apple ID密码。
  • 4、Apple ID验证完成后软件会自动安装到手机里,可以在手机桌面看到h3lix的图标,这个就是越狱工具;
  • 5、接下来进手机设置-通用-设备管理,找到你的ID后点进去并点击信任(设备须保持联网状态);
  • 6、然后回到设备桌面,运行h3lix应用,

    • 点击屏幕中间的jailbreak
    • 等待设备自动重启后,
    • 如果提示如下错误,可不用管
      drag_mixtape_player

    • Cydia就会出现在手机桌面则代表越狱完成,如果越狱重启后没有出现Cydia,则可以多试几次,直到成功为止;
      drag_mixtape_player

插件安装

  • iphone越狱后就需要安装一些插件来协助进行一些逆向辅助操作。
  • 如果部分需要的插件找不到,可以先尝试添加一些Cydia源。如下是我添加的源地址:

tihmstar: http://repo.tihmstar.net
多玩源: http://yuan.duowan.com
BigBoss: http://apt.thebigboss.org/repofiles/cydia/
雷锋源 http://apt.abcydia.com

cydia_source

cydia_source_add
  • 越狱必备工具(20180702):
    • openSSH // 远程控制,如远程登录 (如果越狱工具自带Dropbear不需要安装)
    • MobileTerminal // 无法安装 可用MTerminal代替
    • MTerminal
    • LLVM+Clang // 32位手机需要下载32位的才可以安装,否则无法安装(试了两台手机都没有安装成功,不知道是不是以为32位系统或者16G的缘故)
    • LD64
    • Darwin CC Tools
    • adv-cmds: 执行 ps 命令报错,需要安装这个工具;
    • iFile: (没有安装成功) 可以安装Filza
    • Filza:在手机上查看文件目录;(必装)
    • Apple File Conduit”2”,安装完后iFunbox等助手软件可以读取手机Root文件
    • scp:终端命令,把远程设备的文件复制到另一个设备;
  • 还需要的软件:
    • Cydia Translations // 安装后自带
    • Cydia Substrate // 允许第三方开发者在越狱系统的方法中打一些补丁或扩展方法。
    • Cydia Installer // 安装后自带

SSH

SSH通过WiFi连接手机

  • OpenSSH原是一个在Linux下很实用的一个软件。iPhone本身就是一个运行BSD系统(可认为是一种Liunx)的硬件,因此,Cydia的作者Saurik把OpenSSH这一软件移植到了iOS平台上,并且简化了安全认证密钥的繁琐,使之成为一款可以在iPhone上运行的Cydia插件。
  • 关于ssh(Secure Shell)详细资料请自行搜索相关资料,可以简单理解成『远程登录』,可以通过一台设备远程登陆另一台设备。

    • 保证你的Mac和iPhone在同一网段
    • 确定iPhone的IP
    • 远程登陆
  • Terminal输入

1
ssh root@xxx.xxx.xxx.xxx // xxx.xxx.xxx.xxx为手机ip地址
  • 如果系统是iOS10.3以上,默认是不能直接使用ssh通过wifi或者USB访问手机的,详情请参考iPhone10.3.X越狱后SSH连接不上的问题(已解决)

    • 1.卸载手机上的OpenSSL和Openssh
    • 2.添加源:http://cydia.ichitaso.com/test
    • 3.搜索并下载:dropbear
    • 4.安装完毕,执行ssh root@deviceIP,默认密码为alpine(也可以在iPhone里下载ssh软件进行连接测试)
    • 5.成功后,再重新安装openssh和OpenSSL了(经测试不会影响SSH连接iPhone)。
  • 第一次连接会提醒你是否连接,输入yes继续,输入密码,初始密码是alpine

  • 建议将改密码改掉,因为在默认密码的情况下,任何人都可以尝试登陆你的设备。

Ikee, iOS上的一种蠕虫病毒, 通过使用默认密码alpine入侵安装了openssh的越狱设备, 然后所有数据, 包括电话本, 短信, 甚至Apple ID都有可能被窃取.所以强烈建议您修改ssh密码

  • 在登录之后,你可以更改你的密码:
1
passwd root // 提示输入两次新密码即可修改
  • 成功后可查看手机文件目录

iPhone_fileList

SSH通过USB连接手机

  • 比WIFI响应速度快,网络环境无限制
  • usbmuxd是网上开源社区,貌似是国外牛人倾力打造的一个专门针对该功能开源库

    • 通过brew来安装(当然也可以自己去下源码手动安装,由于依赖项比较多,所以很繁琐)

      1
      brew install usbmuxd
    • usbmuxd 自带工具iproxy,iproxy 可以快捷的操作连接iPhone等操作。由于Mac上只支持4位的端口号,所以需要把iPhone的默认端口22映射到Mac上,相当于建立一个Mac和iPhone之间的通道。

      1
      2
      iproxy 7777 22
      // waiting for connection
    • 以上命令就是把当前连接设备的22端口(SSH端口)映射到电脑的7777端口,那么想和设备22端口通信,直接和本地的7777端口通信就可以了。

    • 终端提示 waiting for connection ,表示这两个端口之间已经可以通信了,保留当前终端(如果关闭就停止端口之间的通信了),新建另一个终端输入如下指令

      1
      ssh -p 7777 root@127.0.0.1
    • 如果是第一次使用USB连接手机,会提示如下信息,输入yes继续

      1
      2
      3
      4
      The authenticity of host '[127.0.0.1]:7777 ([127.0.0.1]:7777)' can't be established.
      ECDSA key fingerprint is SHA256:rBkW26LHWZbqrbfOsrkSCeLN1gr3fADxIF5PWB8VXDI.
      Are you sure you want to continue connecting (yes/no)? yes
      Warning: Permanently added '[127.0.0.1]:7777' (ECDSA) to the list of known hosts.
    • 如果没有修改过root密码,则输入默认alpine,修改过,则输入修改过密码,完成后即可连接上iPhone。

配置免ssh密码登陆

  • 每次连接手机都需要输入密码比较麻烦,可以通过如下配置免ssh密码登陆

    • 如果本人是做iOS开发的,项目用到了GIT版本控制,一般都配置SSH密钥了。密钥已经存在了电脑的./ssh目录中,如果没有配置,那么可手动重新生成SSH密钥,如:

      1
      ssh-keygen -t rsa -b 4096 -C "your_email"
    • 生成完成后,我们会在./ssh目录中发现id_rsa.pub公钥这个文件。
      然后我们把它copy出来放到个人目录下,并重命名,比如:

1
cp /Users/SevenCho/.ssh/id_rsa.pub ~/authorized_keys
  • 手动SSH进入设备中,或者通过Filza,查看是否存在var/root/.ssh目录,如果没有,我们手动创建下。可通过SSH连接后mkdir创建,或者Filza手动创建。
  • 创建后我们把authorized_keys拷贝到设备中,可利用SCP命令:
1
scp ~/authorized_keys root@iphone ip:/var/root/.ssh // iphone ip 为你手机的ip地址
  • 然后按正常连接步骤我们就可以直接SSH连接的时候不用输入密码了。
  • 这个时候,如果我们使用tweak打包时候,也不会再让我们输入SSH密码了。

重置ssh登陆密码

  • 如果你不幸忘记了ssh密码,可以在Cydia中下载Filza软件,通过Filza找到/private/etc/master.password文件,文件中会有以下一段:

root:xxxxxxxxxxxxx:0:0::0:0:System
Administrator:/var/root:/bin/sh
mobile:xxxxxxxxxxxxx:501:501::0:0:Mobile
User:/var/mobile:/bin/sh

  • 将root:及mobile:后面的13个x字符处修改成/smx7MYTQIi2M,修改后保存此文件,你iphone的ssh密码就重新回到默认的alpine

交叉编译

  • 交叉编译指在一个平台上生成另一个平台上的可执行代码。如我们将会在MAC上编写编译可在iPhone上运行的可执行文件。
  • 编译是由编译器完成的,所以我们首先要找到合适的编译器。关于目前Apple公司开源及很多大公司使用和维护的Clang编译器详细资料请看结构化编译器前端 Clang 介绍

    • 编写代码

      1
      2
      3
      4
      5
      6
      7
      8
      touch helloworld.c // 新建c文件
      open helloworld.c // 打开.c文件,编写测试代码,如下面代码:

      #include <stdio.h>
      int main(){
      printf("Hello world !!!\n");
      return 0;
      }
    • 生成可执行文件

      • 生成可在iPhone平台运行的二进制可执行文件
      • iOS的指令集参考文章结尾
      1
      2
      // 格式:xcrun -sdk iphoneos clang -arch armv7s -o [目标文件名] [源文件名]
      xcrun -sdk iphoneos clang -arch armv7s -o helloworld helloworld.c
    • 传输可执行文件

      • 通过ssh传输本地文件到iPhone(服务器)

        1
        2
        // scp /path/filename username@servername:/path/filename
        scp helloworld root@192.168.1.42:/helloworld
    • 关于iOS10.2系统越狱后无法调用scp,可参考[Tutorial] How to fix scp on Yalu / Dropbear

      • :使用iPhone5 iOS10.3 还是无法使用scp传输文件,后来发现因为是32位系统,而使用上面解决方法下载的scp是64位的,手动安装授权32位就可以了,如下

        • 先下载scp二进制文件及相关库文件:scplibcrypto.0.9.8.dyliblibcrypto.dylib

        • 在电脑上用iTools把scp文件导入到usr/bin目录中,把另外两个文件导入到usr/lib目录中

        • 通过手机MTerminal,登陆进来root模式

        • 进入usr/bin目录,执行下列命令

          1
          2
          ldid -S scp
          chmod 777 scp
        • 进入usr/lib目录

          1
          2
          chmod 755 libcrypto.0.9.8.dylib
          chmod 755 libcrypto.dylib
        iPhone_fileList
      • 将iPhone(服务器)文件传输到本地

        1
        2
        // scp username@servername:/source/path/filename /des/path/filename
        scp root@192.168.1.42:/iphone/path/helloworld /mac/path/helloworld
    • 查看iPhone文件目录是否存在对应文件helloworld,在终端执行可执行文件

      • 传完可执行文件后, 此时可执行文件并没有权限, 所以要执行以下命令给权限:

        1
        chmod a+x helloworld
      • 运行可执行文件

        • 如果执行失败,报Killed: 9,可能是因为执行文件没有签名,使用ldid -S helloworld签名即可。
        1
        ./helloworld

        helloworld_executable_failed

注意

  • 如果越狱成功,一定要安装可以远程访问手机的工具,和手机端可以查看越狱系统文件的工具。(以防手贱把Cydia给误删了,需要恢复)
  • 千万要注意:删除某些安装的工具的时候有可能会把Cydia也给一起删除的。
  • 如果想重新使用Apple ID签名越狱, 输入Apple ID账号密码后遇到如下错误
1
2
3
provision.cpp:81
ios/submitDevelopmentCSR =7460
You already have a current IOS Development certificate or a pending certificate request.
  • 此时需要删除上一个certificate,操作步骤:

    • 选择菜单栏Xcode -> revokeCertificates

      Cydia_Impactor

    • 如果revokeCertificates失败,提示如下错误

      1
      progress hpp:87_assert  false
    • 下载旧版本Impactor,如Impactor_0.9.42, 使用旧版本软件重新revokeCertificates

    • revokeCertificates成功如下

      Cydia_Impactor

  • 关于生成可执行文件采用的iOS的指令集

  • armv6

    • iPhone、iPhone 3G
    • iPod 1G、iPod 2G
  • armv7

    • iPhone 3GS、iPhone 4
    • iPod 3G、iPod 4G、iPod 5G
    • iPad、iPad 2、iPad 3、iPad Mini
  • armv7s

    • iPhone 5、iPhone 5C
    • iPad 4
  • arm64

    • iPhone 5S iPhone 6 iPhone 6Plus 以及之后的
    • iPad Air, Retina iPad Mini 以及之后的

参考

要不要鼓励一下😘