MAC 连接 iOS 设备

4,516 阅读5分钟

前言

MAC 连接 iOS 设备一般有两种方式,一种的 SSH,一种是 USB,当然你的手机得先越狱,并且安装了 OpenSSH 插件。

通过 SSH

SSH 为 Secure Shell 的缩写,是建立在应用层基础上的安全协议。SSH 是较可靠,专为远程登录会话和其他网络服务提供安全性的协议。利用 SSH 协议可以有效防止远程管理过程中的信息泄漏问题。

传统的网络服务程序在本质上都是不安全的,因为它们在网络上用明文传送口令和数据,这样很容易受到 中间人攻击,也就是中间人冒充真正的服务器接收你传给服务器的数据,然后再冒充你把数据传输给真正的服务器。

通过 SSH,你可以把所有传输的数据进行加密,这样中间人这种攻击方式就失效了,而且也能够防止 DNS 欺骗、IP 欺骗,使用 SSH,还有一个额外的好处就是传输的数据是经过压缩的,所以可以加快传输的速度。

SSH 提供两种级别的安全认证。

  • 基于口令的安全验证

通过账户和口令去登录远程主机,所有传输的数据依然会被加密,但是不能保证你正在连接的服务器就是你想连接的服务器。可能会有别的服务器冒充真正的服务器,所以还是有可能受到中间人攻击。

  • 基于密钥的安全认证

你自己创建一对密钥,将公钥放在要访问的服务器上,私钥放在本机客户端。登录的时候,服务器会向用户发送一段随机字符串,用户用自己的私钥加密后,再发回来。服务器用事先存储的公钥进行解密,如果成功,就证明用户是可信的,允许登录。

登录设备

这边假定你的手机已经越狱了,将手机和Mac连到同一个wifi,然后查看手机连的 wifi 的 IP 地址,如"192.168.2.179",在终端执行指令:

ssh root@192.168.2.179

输出:

The authenticity of host '192.168.2.179 (192.168.2.179)' can't be established.
RSA key fingerprint is SHA256:J863mNNMZbsfs+Aurkek/eCZ12P2QbyZShVGBUZC27U.
This host key is known by the following other names/addresses:
  ~/.ssh/known_hosts:1192.168.2.180
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '192.168.2.179' (RSA) to the list of known hosts.
root@192.168.2.179's password:
iPhone:~ root#

输入密码之后,出现 iPhone:~ root#,说明登录成功。

如果你开着 vpn,可能会出现一直连接超时,需要将 vpn 给关掉。

如果没有生成过 ssh key,参考一下 Mac本地生成SSH Key 的方法,或者网上搜一搜。

关于端口

端口就是设备对外提供服务的窗口,每个端口都有端口号(范围是 0~65535,共2^16个),有些端口是保留的,已经规定了用途,比如:

  • 21端口提供 FTP 服务
  • 80端口提供HTTP服务
  • 22端口提供SSH服务(可以查看/etc/ssh/sshd_config的Port字段)
  • ...

iPhone 默认使用 22 端口进行 SSH 通信,采用的是 TCP 协议,相当于电脑是通过 ssh 的方式直接访问 22 端口连接了手机。

通过 USB

wifi 连接有个不好的地方,就是网络不好的时候,传输的就比较慢,采取 usb 连接就没有这个问题。

Mac 上有个服务程序 usbmuxd(它会开机自动启动),可以将 Mac 的数据通过 USB 传输到 iPhone。

// usbmuxd 服务程序存放路径
/System/Library/PrivateFrameworks/MobileDevice.framework/Resources/usbmuxd

流程应该是 SSH 访问本机的其他端口(只要不是保留端口即可,举例:10010),然后在由这个端口通过 usbmuxd 连接服务端(手机)的 22 端口,将数据传递过去,这样就避开了通过网络访问 22 端口了。

需要将客户端(电脑)的 10010 端口映射到服务端(手机)的 22 端口上,端口映射完毕后,以后如果想跟服务端的 22 端口通信,直接跟客户端(电脑)本地的 10010 端口通信就可以了。

端口映射

需要一个映射脚本,下载 usbmuxd工具包,终端:

cd ~/Downloads/usbmuxd-1.0.8/python-client

# 执行脚本,不加 -t 的话每次只能支持一个设备连接
python tcprelay.py -t 22:10010

执行完成之后终端窗口不能关闭,关闭了映射关系也就取消了,所以需要新开一个终端窗口。

映射成功之后,就不能再用 ssh root@xxx.xxx.x.xxx 这种访问方式了,这种是网络访问的方式,现在我们只需要访问本地的 10010 端口即可,在新开的终端窗口输入:

$ ssh -p 10010 root@localhost# 或者
$ ssh -p 10010 root@127.0.0.1

如果有报错:

kex_exchange_identification: read: Connection reset by peer
Connection reset by 127.0.0.1 port 10010

确认一下 USB 是否连接了手机,确定电脑 USB 只连接了越狱手机,如果连接了多台手机或非越狱手机会报错,还有就是检查一下你的线有没有问题,我本来用的快充线,是连不上的。

连接成功的结果:

The authenticity of host '[localhost]:10010 ([127.0.0.1]:10010)'can't be established.
RSA key fingerprint is SHA256:J863mNNMZbsfs+Aurkek/eCZ12P2QbyZShVGBUZC27U.
This host key is known by the following other names/addresses:
  ~/.ssh/known_hosts:1192.168.2.180
  ~/.ssh/known_hosts:11192.168.2.179
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '[localhost]:10010' (RSA) to the list of known hosts.
root@localhost's password:

输入密码之后另外一个终端会显示:

Connecting to device <MuxDevice: ID 7 ProdID 0x12a8 Serial 'af86887c10c440f7c4812a6f076485f2d2aaab07' Location 0x14332000>
Connection established, relaying data

这样就算连接成功了。

tips: 记住不要同时连接多台手机。

参考

Mac通过SSH登录iOS设备

iOS 逆向编程(九 - 1)通过 USB 连接登录 iPhone 以及端口映射