iOS逆向学习之二(Mac远程操控iPhone)

SSH、OpenSSH

SSH

  • 是Secure的缩写,意为“安全外壳协议”,是一种可以为远程登录提供安全保障的协议
  • 使用SSH,可以把所有传输的数据进行加密,“中间人”攻击方式就不可能实现,能防止DNS欺骗和IP欺骗

OpenSSH

  • 是SSH协议的免费开源实现
  • 我们可以通过OpenSSH让Mac远程登录到iPhone

如何使用OpenSSH远程登录到iPhone?

安装OpenSSH

  • 首先,需要在iPhone上通过Cydia安装OpenSSH工具,通过添加软件源http://apt.saurik.com进行安装。
  • 安装完成之后,可以通过查看OpenSSH下的【DESCRIPTION】来查看使用步骤。

使用OpenSSH远程登录iPhone

  • SSH是通过TCP协议通信,所以要确保Mac和iPhone在同一局域网下

  • 具体连接步骤:

    • 在Mac终端输入ssh 账户名@服务器主机地址
    ssh [email protected]
    
    • 如果是第一次登录,会弹出权限验证,输入yes即可
    • 然后会让你输入密码,OpenSSH的默认密码是:alpine
    • 输入完密码就登录到了iPhone上。
    • 如果要退出登录,输入exit即可
  • 在iPhone上有两种用户,root和mobile

    • root是最高权限账户,$HOME是/var/root
    • mobile是普通权限账户,只能操作一些普通文件,不能操作系统级别的文件,$HOME是/var/mobile,mobile用户登录方式同root账户
    • 登录root和mobile账户之后,可以通过以下命令来修改root账户和mobile账户的登录密码。
    passwd
    passwd mobile
    

SSL、OpenSSL

SSL

  • Secure Sockets Layer的缩写,是为网络通信提供安全及数据完整性的一种安全协议,在传输层对网络连接进行加密

OpenSSL

  • 是SSL的开源实现
  • 现在大部分的Https请求其实就是等价于:Http+OpenSSL
  • 我们之前使用的OpenSSH加密其实就是通过OpenSSL来来实现的。

SSH的通讯过程

SSH的通信过程主要分为3个阶段

建立安全连接

  • 在建立安全连接的过程中,服务器会提供自己的身份证明.
  • 如果客户端并无服务器端的公钥信息,就会询问是否连接此服务器.
  • 如果确认连接,则客户端会将服务器的公钥信息存放到~/.ssh/known_hosts
  • 如果服务器的ip地址发生改变,可以通过删除~/.ssh/known_hosts中已经存在的公钥信息,然后重新访问即可。
  • 除了手动删除公钥信息的方式,还可以使用如下命令来删除
ssh-keygen -R 服务器ip地址

客户端认证

ssh2提供两种账号认证方式

基于密码的客户端验证

基于秘钥的客户端验证(免密码登录)

  • 通过以下命令在客户端生成一对相关联的密钥(Key Pair):一个公钥(Public Key),一个私钥(Private Key),
ssh-keygen

此时~/.ssh文件夹下会多出两个文件id_rsa、id_rsa.pub

  • 把客户端的公钥内容追加到服务器的授权文件(~/.ssh/authorized_keys)尾部
ssh-copy-id root@服务器主机地址
  • 也可以手动将公钥追加到服务器的授权文件中

    • 复制客户端的公钥到服务器某路径
    scp ~/.ssh/id_rsa.pub root@服务器主机地址:~
    
    • SSH登录服务器
    ssh root@服务器主机地址
    
    • 在服务器创建.ssh文件夹
    mkdir .ssh
    
    • 追加公钥内容到授权文件尾部
    cat ~/id_rsa.pub >> ~/.ssh/authorized_keys
    
    • 删除公钥
    rm ~/id_rsa.pub
    

如果设置了免密码登录之后,还是需要输入密码。那么就需要在服务器端设置文件权限,使用如下命令:

chmod 755 ~
chmod 755 ~/.ssh
chmod 644 ~/.ssh/authorized_keys

数据传输

通过USB进行SSH登录

22端口

  • 端口就是设备对外提供服务的窗口,每个端口都有个端口号(范围是0~65535,共2^16个)
  • 有些端口号是保留的,已经规定了用途
  • iPhone默认是使用22端口进行SSH通信,采用的是TCP协议

通过USB进行SSH登录

  • 默认情况下,由于SSH走的是TCP协议,Mac是使用SSH通过网络连接的方式登录到iPhone,要求iPhone连接WiFi
  • 为了加快传输速度,也可以通过USB连接的方式进行SSH登录。
  • Mac上有个服务程序usbmuxd(它会开机自动启动),可以将Mac的数据通过USB传输到iPhone,程序在如下地址:
/System/Library/PrivateFrameworks/MobileDevice.framework/Resources/usbmuxd

使用usbmuxd工具来进行端口映射

  • 通过以下地址下载usbmuxd工具包(下载v1.0.8版本,主要用到里面的两个python脚本:tcprelay.py和usbmux.py)
    点击下载

这两个python脚本在python3下运行会失败,需要在python2版本运行

  • 通过以下命令,将iPhone的22端口(SSH端口)映射到Mac本地的10088端口

这里的10088端口可以自己随意定义,只要不使用保留的端口号就行。

cd ~/Documents/usbmuxd-1.0.8/python-client
python tcprelay.py -t 22:10088

这里加上-t是为了同时支持多个ssh连接。注意:要想保持端口映射状态,不能终止此命令行(如果要执行其他终端命令行,请新开一个终端界面)

  • 端口映射完毕后,以后如果想跟iPhone的22端口通信,直接跟Mac本地的10088端口通信就可以了
  • 新开一个终端界面,使用如下命令SSH登录到Mac本地的10088
ssh root@localhost -p 10088

usbmuxd会将Mac本地10088端口的TCP协议数据,通过USB连接转发到iPhone的22端口

  • 远程拷贝文件也可以直接跟Mac本地的10010端口通信
#将Mac上的~/Desktop/1.txt文件,拷贝到iPhone上的~/test路径
scp -P 10088 ~/Desktop/1.txt root@localhost:~/test

使用itnl工具来进行端口映射

  • 首先下载itnl工具
  • cd到itnl工具所在目录
  • 执行命令
./itnl --lport 22 --lport 10088

如果出现permission deny,则使用chmod 755 itnl为itnl增加执行权限

  • 不要关闭当前窗口,新开一个终端窗口,使用如下命令登录到mac的10088端口
ssh root@localhost -p 10088

iOS终端的中文乱码问题

默认情况下,终端不支持显示中文,解决方案:新建一个~/.inputrc文件,文件内容是:

#不将中文字符转化为转义序列
set convert-meta off 

#允许向终端输出中文
set output-meta on

#允许向终端输入中文
set meta-flag on 
set input-meta on

如果是想在终端编辑文件内容,可以通过Cydia安装一个Vi IMproved(软件源http://apt.saurik.com)

你可能感兴趣的:(iOS逆向学习之二(Mac远程操控iPhone))