iOS逆向-day2:逆向环境搭建-SSH 安全连接

1、SSH与OpenSSH简介
2、Mac远程登录到iPhone
3、iOS下的2个常用账户:root、mobile
4、SSL和OpenSSL
5、建立安全连接与服务器公钥的保存和变更
6、SSH-客户端认证
7、SSH-远程拷贝-文件权限
8、22端口
9、通过USB进行SSH登录
10、usbmuxd-使用
11、利用sh脚本设置快捷方式
12、Mac连接iPhone终端的中文乱码问题

一、SSH与OpenSSH简介

  • 1.1、SSH简介

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


      提示:sniffer嗅探器以及抓数据包软件

  • 1.2、OpenSSH简介

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

二、Mac远程登录到iPhone

  • 2.1、Mac远程登录到iPhone的简介

    • 我们经常在Mac的终端上,通过敲一些命令行来完成一些操作


      Mac的终端
    • iOS和Mac OS X都是基于Darwin(苹果的一个基于Unix的开源系统内核),所以iOS中同样支持终端的命令行操作(在逆向工程中,我们经常会通过命令行来操纵iPhone)
    • 为了能够让Mac终端中的命令行能作用在iPhone上,我们得让Mac和iPhone建立连接


      Mac终端中的命令行能作用在iPhone图
  • 2.2、Mac使用OpenSSH远程登录iphone的前提

    • 在iPhone上通过Cydia安装OpenSSH工具(软件源http://apt.saurik.com
      OpenSSH
    • OpenSSH的具体使用步骤可以查看Description中的描述


      OpenSSH的具体使用步骤可以查看Description中的描述
  • 2.3、使用OpenSSH远程登录 的 使用步骤 - (Mac充当客户端,iPhone充当服务器)

    • <1>、SSH是通过TCP协议通信,所以要确保Mac和iPhone在同一局域网下,比如连接着同一个WiFi

    • <2>、在Mac的终端输入ssh 账户名@服务器主机地址,如下是以root权限登录的,其中的 192.168.3.73是手机的IP地址,这里的服务器是手机

      ssh root@192.168.3.73
      

      手机的IP地址的查看方式,要和电脑在同一个WiFi下


      手机的IP地址的查看方式
    • <3>、初始密码 alpine

      初始密码 `alpine`

      登录成功

      登录成功过后的测试

    • <4>、登录成功后就可以使用终端命令行操作iPhone,如:退出登录命令是exit,也可以使用快捷键:control+d

三、iOS下的2个常用账户:root、mobile (初始登录密码都是alpine)

root、mobile

  • 3.1、root:最高权限账户,$HOME是 /var/root

    提示:$HOME是 登录用户的路径,查看方式如下

    • $HOME是 登录用户的路径,查看方式如下
  • 3.2、mobile:普通权限账户,只能操作一些普通文件,不能操作系统级别的文件,$HOME是 /var/mobile

  • 3.3、修改一下root和mobile用户的登录密码(登录root账户后,分别通过passwd、passwd mobile完成),使用root用户登录,登录成功后命令如下


    修改一下root和mobile用户的登录密码

四、SSL和OpenSSL

  • 分析:我们在安装 OpenSSH的时候可以看到先安装的是OpenSSL


    安装 OpenSSH的时候可以看到先安装的是OpenSSL
  • 4.1、SSL:Secure Sockets Layer的缩写,是为网络通信提供安全及数据完整性的一种安全协议,在传输层对网络连接进行加密
  • 4.2、OpenSSL:SSL的开源实现;绝大部分HTTPS请求等价于:HTTP + OpenSSL

    提示1:OpenSSH的加密就是通过OpenSSL完成的


    OpenSSH的加密就是通过OpenSSL完成的

五、建立安全连接

  • 5.1、SSH的版本
    • SSH协议一共2个版本:SSH-1SSH-2(现在用的比较多的是SSH-2,客户端和服务端版本要保持一致才能通信)
    • 查看SSH版本(查看配置文件的Protocol字段)
      • 客户端:/etc/ssh/ssh_config
      • 服务端:/etc/ssh/sshd_config
      • 举例:以电脑作为客户端与越狱手机作为服务器查看各自对应的SSH版本
        • 电脑作为客户端查看SSH版本


          电脑作为客户端查看SSH版本

          可以看到SSH的版本是2:Protocol 2
        • 越狱手机作为服务器端查看SSH版本


          越狱手机作为客户端查看SSH版本
  • 5.2、SSH的通信过程可以分为3大主要阶段:建立安全连接客户端认证数据传输
  • 5.3、建立安全连接
    • <1>、在建立安全连接过程中,服务器会提供自己的身份证明(也就是公钥)

      建立安全连接
      • 提示:~/.ssh/known_hosts路径下存储 服务器的公钥等其他的信息,在第一次存储后,第二次客户端再登录服务器就不再需要验证身份
      • 如果客户端并无服务器端的公钥信息,就会询问是否连接此服务器,如下图:我们在第一次登录的时候一般都会提示


        没有保存公钥的提示
    • <2>、解释下:在建立安全链接的过程中,~/.ssh/known_hosts所保存的服务器公钥以及其他信息,也就是上图中的:字符串 (把服务器发过来的公钥利用加密计算出来的一个字符串)

    • <3>、服务器身份信息变更(也就是同一个服务器,但是服务器的公钥发生了变化,也可以说本地的存储的公钥与服务器的不一样),解决办法:删除掉同一个 IP 的信息,下面以 IP:192.168.3.73 为例

      901554888676_.pic_hd.jpg

      • (1)、cd ~/.ssh
      • (2)、vim know_hosts
      • (3)、让光标停留在192.168.3.73行,按 dd 即可删除
      • (4)、esc,shift+;,wq输入回车键 保存推出;
      • (5)、再次进行连接服务器ssh root@192.168.3.73
      • (6)、重新提示要不要连接

      提示:快捷方式:ssh-keygen -R 服务器IP地址,如和上面一样的效果:ssh-keygen -R 192.168.3.73

    • <4>、验证客户端存储的 公钥 与 服务器的公钥是否一致

    验证客户端存储的 公钥 与 服务器的公钥是否一致

六、SSH-客户端认证

  • 6.1、SSH-2 提供了2种常用的客户端认证方式

    • 第一种(我们在 用到的密码登录):基于密码的客户端认证(使用账号和密码即可认证)
    • 第二种:基于密钥的客户端认证 (免密码认证,最安全的一种认证方式)

    提示:SSH-2 默认会优先尝试 “密钥认证”,如果认证失败,才会尝试 “密码认证”

  • 6.2、搭建 SSH - 基于密钥的客户端认证(也就是可以省略密码登录的过程)

    搭建 SSH - 基于密钥的客户端认证的过程
    • 首先要在客户端生成公钥与私钥,然后把公钥传给服务器,将公钥内容追加到授权文件尾部,在登录验证的时候,服务器发送一个登录信息过来,使用私钥进行解密或者其他的操作(不仅仅是这些操作,后面都会阐述),解密成功的话进行登录
    • <1>、在客户端生成一对相关联的密钥(Key Pair):一个公钥(Public Key),一个私钥(Private Key)
      • ssh-keygen
      • 一路敲回车键(Enter)即可
      • OpenSSH默认生成的是RSA密钥,可以通过-t参数指定密钥类型
      • 生成的公钥:~/.ssh/id_rsa.pub
      • 生成的私钥:~/.ssh/id_rsa


        公钥与私钥
    • <2>、把客户端的公钥内容追加到服务器的授权文件(~/.ssh/authorized_keys)尾部
      • ssh-copy-id root@服务器主机地址
      • 需要输入root用户的登录密码
      • ssh-copy-id会将客户端~/.ssh/id_rsa.pub的内容自动追加到服务器的~/.ssh/authorized_keys尾部
        把客户端的公钥内容追加到服务器的授权文件
        • 注意:由于是在~文件夹下操作,所以上述操作仅仅是解决了root用户的登录问题(不会影响mobile用户),也就是root用户再使用 ssh root@IP地址 不再需要密码,而mobile用户是需要密码的
          root用户登录不再需要密码

七、SSH-远程拷贝-文件权限(这里以上面 基于密钥的客户端认证的手动操作)

  • 7.1、可以使用 ssh-copy-id 将客户端的公钥内容自动追加到服务器的授权文件尾部,也可以手动操作,复制客户端的公钥到服务器某路径

    scp ~/.ssh/id_rsa.pub root@服务器主机地址:~
    
    • scp是secure copy的缩写,是基于SSH登录进行安全的远程文件拷贝命令,把一个文件copy到远程另外一台主机上
    • 上面的命令行将客户端的~/.ssh/id_rsa.pub拷贝到了服务器的~/.ssh/地址
    • 具体的细节

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

      提示: ~ 指的是用户目录,登录的是root的话就是:/var/root

  • 7.2、如果上面的操作都做完了还是无法基于密钥的客户端认证(也可以说免密登录),那就是和权限有关的问题了,设置下下面的权限


    设置下下面的权限
    chmod 755 ~
    chmod 755 ~/.ssh
    chmod 644 ~/.ssh/authorized_keys
    

八、22端口

  • 8.1、端口:就是设备对外提供服务的窗口,每个端口都有个端口号(范围是0~65535,共2^16个)

  • 8.2、有些端口号是保留的,已经规定了用途,比如

    • 21端口提供FTP服务
    • 80端口提供HTTP服务
    • 22端口提供SSH服务(可以查看/etc/ssh/sshd_config的Port字段)
    • 更多保留端口号
  • 8.3、iPhone默认是使用22端口进行SSH通信,采用的是TCP协议


    iPhone默认是使用22端口进行SSH通信,采用的是TCP协议
    iPhone默认是使用22端口进行SSH通信
    cat /etc/ssh/sshd_config
    

九、通过USB进行SSH登录

  • 9.1、使用USB进行SSH登录的原因是:在上面
    我们是通过同一个WIFI的情况下进行的SSH登录,在终端操作的时候可以感觉到输入内容很慢,这个时候我们可以可以使用USB进行SSH登录

  • 9.2、默认情况下,由于SSH走的是TCP协议,Mac是通过网络连接的方式SSH登录到iPhone,要求iPhone连接WiFi


    iPhone默认是使用22端口进行SSH通信,采用的是TCP协议
  • 9.3、为了加快传输速度,也可以通过USB连接的方式进行SSH登录,Mac上有个服务程序 usbmuxd它会开机自动启动),可以将Mac的数据通过USB传输到iPhone

    • usbmuxd的路径在:/System/Library/PrivateFrameworks/MobileDevice.framework/Resources/usbmuxd
      usbmuxd的路径

      通过USB连接的方式进行SSH登录

十、usbmuxd 的使用

  • 10.1、下载usbmuxd工具包(下载v1.0.8版本,主要用到里面的2个python脚本:tcprelay.pyusbmux.py

    tcprelay.py 与 usbmux.py

  • 10.2、将iPhone的 22 端口(SSH端口)映射到Mac本地的 10010 端口(不一定非是10010端口,只要不是保留端口就好),做完下面的操作我们会发现再终端操作不会卡了

    提示:映射窗口不要关闭,在SSH登录的时候 新开窗口操作,保持至少两个窗口,因为可能 连接 多个手机的 22 端口

    • 端口映射完毕后,以后如果想跟iPhone的22端口通信,直接跟Mac本地的10010端口通信就可以了

      ssh root@localhost -p 10010
      ssh root@127.0.0.1 -p 10010
      
      • localhost 是一个域名,指向的IP地址是 127.0.0.1,本机虚拟网卡的IP地址
      • usbmuxd会将Mac本地10010端口的TCP协议数据,通过USB连接转发到iPhone的22端口
  • 10.3、远程拷贝文件也可以直接跟Mac本地的10010端口通信

    scp -P 10010 ~/Desktop/1.txt root@localhost:~/test
    

    将Mac上的~/Desktop/1.txt文件,拷贝到iPhone上的~/test路径

    scp的端口号参数是大写的 -P

    提示:注意:scp的端口号参数是大写的 -P

十一、利用 sh 脚本设置快捷方式

  • 11.1、我们可以将经常执行的一系列终端命令行放到sh脚本文件中(shell),然后执行脚本文件,举例如下

    • <1>、usb.sh脚本的举例:我们在使用 USB连接用户的iPhone的时候,每次都要执行 10.1tcprelay.py 这个脚本,我们可以把 tcprelay.py 存到一个固定位置,比如说我把它存在了桌面的 Jailbreak 文件夹,路径就成为了 /Users/wangchong/Desktop/Jailbreak/tcprelay.py,我们在 将iPhone的 22 端口(SSH端口)映射到Mac本地的 10010 端口就变成为如下的命令

      python /Users/wangchong/Desktop/Jailbreak/tcprelay.py
      

      但是我们每次再映射的时候都要执行上面的命令,为了解决每次的麻烦,我们可以使用 sh脚本,比如我在用户目录下创建一个 usb.sh 脚本文件,把上面的路径复制进去,如下


      usb.sh 脚本文件

      当我们再次执行映射的时候可以直接如下操作

      sh usb.sh
      
      执行脚本
    • <2>、login.sh脚本的举例:同样创建一个 login.sh 文件里面写入要执行登录的脚本文件:ssh root@localhost -p 10010,执行脚本如下

      sh login.sh 
      
    • <3>、总结:我们在每次映射和登录iPhone连接的时候可以执行下面的两个脚本命令,但是要是在两个窗口,先映射后登录

      sh usb.sh
      sh login.sh 
      
  • 11.2、扩展:我们在执行脚本的时候不仅仅使用 sh,还有bashsource命令来执行sh脚本文件

    • shbash
      • 当前shell环境会启动一个子进程来执行脚本文件,执行后返回到父进程的shell环境
      • 执行cd时,在子进程中会进入到cd的目录,但是在父进程中环境并没有改变,也就是说目录没有改变
    • source
      • 在当前的shell环境下执行脚本文件
      • 执行cd后会跳转到cd的目录
      • source 可以用一个点"."来替代,比如". test.sh"
  • 11.3、source 与 shbash的区别

    • source执行的脚本如果是执行 cd 路径的时候,执行后 显示路径
      屏幕快照 2019-04-11 下午3.30.46.png
    • shbash 执行的脚本如果是执行 cd 路径的时候,执行后 不会 显示路径
      屏幕快照 2019-04-11 下午3.30.32.png

十二、Mac连接iPhone终端的中文乱码问题

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

    不将中文字符转化为转义序列
    set convert-meta off 
    允许向终端输出中文
    set output-meta on
    允许向终端输入中文
    set meta-flag on 
    set input-meta on
    
    • 提示:如果是想在终端编辑文件内容,可以通过Cydia安装一个vim(软件源http://apt.saurik.com
      vim软件
  • 12.2、做完上面操作后的效果如下


    WechatIMG108.jpeg
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,214评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,307评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,543评论 0 341
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,221评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,224评论 5 371
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,007评论 1 284
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,313评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,956评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,441评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,925评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,018评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,685评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,234评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,240评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,464评论 1 261
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,467评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,762评论 2 345

推荐阅读更多精彩内容