Mac远程登录iPhone
- 我们经常在Mac终端上,通过敲一些命令来完成一些操作;
- iOS和Mac OS X都是基于Darwin(苹果的一个基于Unix的开源系统内核),所以iOS中同样支持终端命令操作;
- 在逆向工程中,我们经常会通过命令行来操纵iPhone;
- 为了能够让Mac终端命令能作用在iPhone上,我们需要让Mac和iPhone之间建立连接;- - 通过Mac远程登录到iPhone的方式建立连接;
SSH与OpenSSH
- SSH是Secure Shell的缩写,意为"安全外壳协议",是一种可以为远程登录提供安全保障的协议;
- 使用SSH,可以把所有传输的数据进行加密,"中间人"攻击方式就不可能实现,能防止DNS欺骗和IP欺骗;
- OpenSSH是SHH协议的免费开源实现,可以通过OpenSSH的方式让Mac远程登录到iPhone;
使用OpenSSH远程登录
- 在iPhone上通过Cydia安装OpenSSH工具(软件源:http://apt/saurik.com)
- OpenSSH的具体使用步骤可以查看Description中的描述;
- SSH是通过TCP协议通信,所以要确保Mac和iPhone在同一局域网下,比如连接者同一个Wi-Fi;
- 登录iPhone的root账户:在Mac终端输入ssh root@服务器主机地址
- 例如ssh root@10.1.1.168(这里的服务器是手机) 初始密码为:
alpine

Snip20210607_80.png
- 登录成功后可以使用终端命令来操作iPhone;
终端中输入以下命令,查看文件系统与Mac上的iFunBox查看的文件系统进行比较如下所示:

Snip20210607_81.png

Snip20210607_82.png
- 发现文件系统是相同的,说明我们通过OpenSSH,让Mac成功登录到iPhone,两者之间建立了连接。
- exit 是退出登录,操作结果如下:

Snip20210607_83.png
root 和 mobile账户
- iOS下有两个常用账户:root和mobile
- root账户:最高权限账户,$HOME是/var/root
- 登录root账户:
ssh root@服务器主机地址 - mobile账户:普通权限账户,只能操作一些普通文件,不能操作系统级别的文件,$HOME是/var/mobile
- 登录mobile账户:
ssh mobile@服务器主机地址 - root和mobile账户的
初始登录密码都是alpine - 最好修改一下root和mobile用户的登录密码,登录root账户后,通过passwd修改;登录mobile账户,通过passwd mobile修改;

Snip20210607_84.png
- 可以看到root账号级别的显示#,mobile账号级别的显示$;
SSL与OpenSSL
- SSL是Secure Socket Layer的缩写,是为网络通信提供安全及数据完整性的一种安全协议,在传输层对网络连接进行加密;
- OpenSSL是SSL的开源实现,绝大部份HTTPS网络请求等价于:HTTP + OpenSSL
- OpenSSH的加密就是通过OpenSSL完成的;
SSH的版本
- SSH协议一共有两个版本,分别为SSH-1与SSH-2;
- 现在用的比较多的是SSH-2,客户端与服务端版本要保持一致才能相互通信;
通过WI-FI进行SSH登录
-
必须保证Mac与iPhone在相同的网络环境下,即连接同一个WI-FI网络
SSH登录.png
其SSH的通信过程可以分为3大阶段:
第一步:建立安全连接
- 在建立安全连接过程中,服务器会提供自己的身份证明;
- 如果客户端并无服务端的公钥,就会询问是否连接此服务器;

Snip20210607_85.png

SSH.png
-
~/.ssh/known.hosts:是存储服务端公钥信息的文件; - 在Mac上
~:表示主路径相当于根路径,终端刚打开时的路径,等价于/Users/用户名 - 在建立连接过程中,可能会遇到以下的错误信息:服务器的身份信息发生了变更;如果确定要连接此服务器,删除之前服务器的公钥信息即可;或者直接打开known.hosts文件删除服务器的公钥信息;
第二步:客户端认证
SSH-2提供了两种常用的客户端认证方式:
第一种:基于密码的客户端认证
- 使用账号和密码即可认证
第二种:基于密钥的客户端认证
- 免密码认证,最安全的一种认证方式;
- SSH-2默认会优先尝试密钥认证,如果认证失败,才会尝试密码认证;
- 基于密钥的客户端的认证原理如下:

ssh原理.png
第一种方案:
- 在客户端生成一对相关联的密钥:一个公钥(Public Key),一个私钥(Private Key)
- 终端命令为:
ssh -keygen,一路敲回车即可; - OpenSSH默认生成的是rsa密钥,可以通过-t参数指定密钥的类型;
- 生成的公钥:~/.ssh/id_rsa.pub
- 生成的私钥:~/.ssh/id_rsa
- 把客户端的公钥追加到服务端的授权文件(~/.ssh/authroized_keys)尾部,终端命令为:
ssh copy id root@服务端主机地址,需要输入root账户的登录密码;
第二种方案:
- 一对密钥的生成同上;
- 复制客户端的公钥到服务器的某路径;终端命令为:
scp ~/.ssh/id.rsa.pub root@服务器主机地址:~指定路径 - scp是Secure Copy的缩写,是基于SSH登录进行安全的远程文件拷贝命令,把一个文件copy到远程另外一台主机上;
上述两种方案均可实现免密码登录。
可能会用到的终端命令:
- 删除公钥:rm ~/.ssh/id_rsa.pub
第三步:数据传输
- 现在我们来实现将越狱iPhone中的文件,拷贝到Mac电脑上;
- 首先iPhone上的文件目标为:
/tmp/fseventsd-uuid,如下所示:

Snip20210618_44.png
- Mac终端环境执行:
scp root@172.20.10.2:/tmp/fseventsd-uuid ~/Desktop/,其中172.20.10.2是iPhone的主机地址,通过查看Wi-Fi网络获得;

Snip20210618_45.png
- 执行完成之后,查看Mac的桌面文件系统,

Snip20210618_46.png
- 实现了文件传递:iPhone --> Mac
通过USB进行SSH登录
为了加快传输速度,也可以通过USB连接的方式进行SSH登录,在Mac上有个服务程序usbmuxd(它会开机自动启动),可以将Mac的数据通过USB传输到iPhone,其路径如下:/System/Library/PrivateFrameworks/MobileDevice.framework/Resources/usbmuxd

Snip20210607_86.png
原理图如下:

SSH_USB.png
端口
端口就是设备对外提供服务的窗口,每个端口都有一个端口号(范围是0~65535,共2^16)
- 21端口提供FTP服务
- 80端口提供HTTP服务
- 22端口提供SSH服务(查看命令:etc/ssh/sshd_config)
- iPhone默认是使用22端口进行SSH通信,采用的是TCP协议
usbmuxd的使用
- 下载usbmuxd工具包(1.0.8版本,主要用到里面的一个python脚本:tcprelay.py),下载地址为:https://cgit.sukimashita.com/usbmuxd.git/snapshot/usbmuxd-1.0.8.tar.gz,解压之后删除无用的文件,最后的文件预览如下:

Snip20210608_89.png
- 终端命令,cd usbmuxb 文件路径下,执行
python tcprelay.py -t 22:10010,即将iPhone的22端口(SSH端口)映射到Mac本地的10010端口;

Snip20210608_90.png
- 端口映射完毕后,以后如果想跟iPhone的22端口通信,直接跟Mac本地的10010端口通信就可以了;然后command+T 新建一个命令行窗口,SSH登录到Mac本地的10010窗口,命令行为:
ssh root@localhost -p 10010,密码为alpine

Snip20210608_91.png
- usbmuxd会将Mac本地10010端口的TCP协议数据,通过USB连接转发到iPhone的22端口;
- 远程拷贝文件也可以直接跟Mac本地的10010端口通信,命令行如下:
scp -P 10010 ~/.ssh/id_rsa root@localhost:~即将Mac端的id.rsa.pub公钥文件拷贝到iPhone的主文件夹下;
Mac端的id.rsa.pub公钥文件,如下所示:

Snip20210618_43.png
- 终端执行命令:
scp -P 10010 ~/.ssh/id.rsa root@localhost:~,注意是在Mac的终端环境下执行,如下所示:

Snip20210618_41.png
- 打开iPhone的主文件夹,如下所示:

Snip20210618_40.png
- 实现了文件传递:Mac --> iPhone
sh脚本文件
我们可以将经常执行的一些列终端命令行放到sh脚本文件中(shell),然后执行脚本文件;制作脚本的相关命令如下:
- 在当前主文件路径下
~执行vim usb.sh:创建编辑usb.sh文件,进入编辑界面; - 按下
i键,现在可以往usb.sh文件中添加内容了,添加内容为:python /Users/liyanyan33/Desktop/usbmuxd/usbmuxd/tcprelay.py -t 22:10010 - 按下
Esc键退出,然后按下Shift + 冒号 组合键,最后输入wq 回车,保存退出文件编辑界面; -
ls -l:可以预览当前文件夹下的所有文件,看是否有usb.sh文件 - 如果有
usb.sh文件,输入cat usb.sh可查看文件中的内容;
脚本文件的执行命令有如下几种:
-
sh usb.sh: bash usb.shsource usb.sh- 可以按Ctrl + C 组合键退出当前的状态
- sh与bash脚本执行命令会在当前shell环境启动一个子进程来执行脚本文件,执行后返回到父进程的shell环境,执行cd时,在子进程中会进入到cd的目录,但是在父进程中环境并没有改变,也就是说目录没有改变;
- source脚本命令是在当前的shell环境下执行脚本文件;
上面进行端口映射,创建了一个usb.sh脚本文件,下面SSH登录到Mac本地的10010窗口,也创建一个login.sh脚本,其步骤与上面的相同,脚本内容为ssh root@localhost -p 10010,以后的端口映射与登录就直接执行usb.sh与login.sh两个脚本文件即可;
- 必须保证手机是越狱的状态,否则会出现SSH登陆报错的情况,如下图所示:

Snip20210623_25.png
iOS终端的中文乱码问题
- 默认情况下,iOS终端不支持中文输入和显示的;
- 解决方案:新建一个
~/.inputrc文件,文件内容为: - set convert-mea off:不将中文字符转化为转义字符
- set output-mea on:允许向终端输出中文
- set mea-flag on:允许向终端输入中文
- set input-mea on:允许向终端输入中文
- 如果想在终端编辑文件内容,可以通过Cydia安装一个vim(软件源:http://apt.saurik.com)
