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

iOS逆向-day1:逆向内容的简介与越狱环境搭建

1、SSH与OpenSSH简介

2、Mac远程登录到iPhone

3、iOS下的2个常用账户:root、mobile

4、SSL和OpenSSL

5、建立安全连接与服务器公钥的保存和变更

6SSH-客户端认证

7、SSH-远程拷贝-文件权限

8、22端口

9、通过USB进行SSH登录

10、usbmuxd-使用

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

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

一、SSH与OpenSSH简介

1.1、SSH简介

  • SSH 是 Secure Shell 的缩写,意为“安全外壳协议”,是一种可以为远程登录提供安全保障的协议

  • 使用SSH,可以把所有传输的数据进行加密,“中间人”攻击方式就不可能实现,能防止DNS欺骗和IP欺骗

image.png

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

1.2、OpenSSH简介

  • OpenSSH 是 SSH 协议的免费开源实现

  • 可以通过OpenSSH的方式让Mac远程登录到iPhone

二、Mac远程登录到iPhone

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

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

image.png

Mac的终端

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

  • 为了能够让Mac终端中的命令行能作用在iPhone上,我们得让Mac和iPhone建立连接

image.png

Mac终端中的命令行能作用在iPhone图

2.2、Mac使用OpenSSH远程登录iphone的前提

在iPhone上通过Cydia安装OpenSSH工具(软件源http://apt.saurik.com)

image.png

OpenSSH

OpenSSH的具体使用步骤可以查看Description中的描述

image.png

OpenSSH的具体使用步骤可以查看Description中的描述

2.3、使用OpenSSH远程登录 的 使用步骤 – (Mac充当客户端,iPhone充当服务器)

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

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

ssh root@192.168.3.73

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

image.png

手机的IP地址的查看方式

、初始密码 alpine

image.png

初始密码 `alpine`

image.png

登录成功

image.png

登录成功过后的测试

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

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

image.png

root、mobile

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

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

image.png

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

3.2、mobile:普通权限账户,只能操作一些普通文件,不能操作系统级别的文件,$HOME是 /var/mobile

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

image.png

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

四、SSL和OpenSSL

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

image.png

安装 OpenSSH的时候可以看到先安装的是OpenSSL

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

4.2、OpenSSL:SSL的开源实现;绝大部分HTTPS请求等价于:HTTP + OpenSSL

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

image.png

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

五、建立安全连接

5.1、SSH的版本

SSH协议一共2个版本:SSH-1 与 SSH-2(现在用的比较多的是SSH-2,客户端和服务端版本要保持一致才能通信)

查看SSH版本(查看配置文件的Protocol字段)

  • 客户端:/etc/ssh/ssh_config

  • 服务端:/etc/ssh/sshd_config

  • 举例:以电脑作为客户端与越狱手机作为服务器查看各自对应的SSH版本

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

      image.png

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

      image.png

      可以看到SSH的版本是2:Protocol 2

    • 越狱手机作为服务器端查看SSH版本

image.png

越狱手机作为客户端查看SSH版本

5.2、SSH的通信过程可以分为3大主要阶段:建立安全连接、客户端认证、数据传输

5.3、建立安全连接

、在建立安全连接过程中,服务器会提供自己的身份证明(也就是公钥)

image.png

建立安全连接

  • 提示:~/.ssh/known_hosts路径下存储 服务器的公钥等其他的信息,在第一次存储后,第二次客户端再登录服务器就不再需要验证身份

  • 如果客户端并无服务器端的公钥信息,就会询问是否连接此服务器,如下图:我们在第一次登录的时候一般都会提示

image.png

没有保存公钥的提示

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

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

image.png

  • (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

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

image.png

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

六、SSH-客户端认证

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

第一种(我们在 五 用到的密码登录):基于密码的客户端认证(使用账号和密码即可认证)

第二种:基于密钥的客户端认证 (免密码认证,最安全的一种认证方式)

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

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

image.png

搭建 SSH – 基于密钥的客户端认证的过程

首先要在客户端生成公钥与私钥,然后把公钥传给服务器,将公钥内容追加到授权文件尾部,在登录验证的时候,服务器发送一个登录信息过来,使用私钥进行解密或者其他的操作(不仅仅是这些操作,后面都会阐述),解密成功的话进行登录

、在客户端生成一对相关联的密钥(Key Pair):一个公钥(Public Key),一个私钥(Private Key)

  • ssh-keygen

  • 一路敲回车键(Enter)即可

  • OpenSSH默认生成的是RSA密钥,可以通过-t参数指定密钥类型

  • 生成的公钥:~/.ssh/id_rsa.pub

  • 生成的私钥:~/.ssh/id_rsa

image.png

公钥与私钥

、把客户端的公钥内容追加到服务器的授权文件(~/.ssh/authorized_keys)尾部

  • ssh-copy-id root@服务器主机地址

  • 需要输入root用户的登录密码

  • ssh-copy-id会将客户端~/.ssh/id_rsa.pub的内容自动追加到服务器的~/.ssh/authorized_keys尾部

image.png

把客户端的公钥内容追加到服务器的授权文件

  • 注意:由于是在~文件夹下操作,所以上述操作仅仅是解决了root用户的登录问题(不会影响mobile用户),也就是root用户再使用 ssh root@IP地址 不再需要密码,而mobile用户是需要密码的

image.png

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

image.png

设置下下面的权限

chmod 755 ~chmod 755 ~/.sshchmod 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协议

image.png

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

image.png

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

image.png

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

9.3、为了加快传输速度,也可以通过USB连接的方式进行SSH登录,Mac上有个服务程序 usbmuxd(它会开机自动启动),可以将Mac的数据通过USB传输到iPhone

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

image.png

usbmuxd的路径

image.png

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

十、usbmuxd 的使用

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

image.png

tcprelay.py 与 usbmux.py

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

image.png

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

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

ssh root@localhost -p 10010ssh 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路径

image.png

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

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

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

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

、usb.sh脚本的举例:我们在使用 USB连接用户的iPhone的时候,每次都要执行 10.1中 tcprelay.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 脚本文件,把上面的路径复制进去,如下

image.png

usb.sh 脚本文件

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

sh usb.sh

image.png

执行脚本

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

sh login.sh

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

sh usb.shsh login.sh

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

sh、bash

  • 当前shell环境会启动一个子进程来执行脚本文件,执行后返回到父进程的shell环境

  • 执行cd时,在子进程中会进入到cd的目录,但是在父进程中环境并没有改变,也就是说目录没有改变

source

  • 在当前的shell环境下执行脚本文件

  • 执行cd后会跳转到cd的目录

  • source 可以用一个点”.”来替代,比如”. test.sh”

11.3、source 与 sh、bash的区别

source执行的脚本如果是执行 cd 路径的时候,执行后 会 显示路径

image.png

sh、bash 执行的脚本如果是执行 cd 路径的时候,执行后 不会 显示路径

image.png

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

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

不将中文字符转化为转义序列

set convert-meta off 允许向终端输出中文set output-meta on允许向终端输入中文set meta-flag on set input-meta on

image.png

提示:如果是想在终端编辑文件内容,可以通过Cydia安装一个vim 

image.png

vim软件

12.2、做完上面操作后的效果如下

image.png

作者:IIronMan

交流群昵称:ios-Swift/Object C开发上架
交流群号: 869685378   找ios马甲包开发者合作,有兴趣请添加Q 51259559

原文地址:https://blog.csdn.net/ios8988/article/details/89287385

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


当我们远离最新的 iOS 16 更新版本时,我们听到了困扰 Apple 最新软件的错误和性能问题。
欧版/美版 特别说一下,美版选错了 可能会永久丧失4G,不过只有5%的概率会遇到选择运营商界面且部分必须连接到iTunes才可以激活
一般在接外包的时候, 通常第三方需要安装你的app进行测试(这时候你的app肯定是还没传到app store之前)。
前言为了让更多的人永远记住12月13日,各大厂都在这一天将应用变灰了。那么接下来我们看一下Flutter是如何实现的。Flutter中实现整个App变为灰色在Flutter中实现整个App变为灰色是非常简单的,只需要在最外层的控件上包裹ColorFiltered,用法如下:ColorFiltered(颜色过滤器)看名字就知道是增加颜色滤镜效果的,ColorFiltered( colorFilter:ColorFilter.mode(Colors.grey, BlendMode.
flutter升级/版本切换
(1)在C++11标准时,open函数的文件路径可以传char指针也可以传string指针,而在C++98标准,open函数的文件路径只能传char指针;(2)open函数的第二个参数是打开文件的模式,从函数定义可以看出,如果调用open函数时省略mode模式参数,则默认按照可读可写(ios_base:in | ios_base::out)的方式打开;(3)打开文件时的mode的模式是从内存的角度来定义的,比如:in表示可读,就是从文件读数据往内存读写;out表示可写,就是把内存数据写到文件中;
文章目录方法一:分别将图片和文字置灰UIImage转成灰度图UIColor转成灰度颜色方法二:给App整体添加灰色滤镜参考App页面置灰,本质是将彩色图像转换为灰度图像,本文提供两种方法实现,一种是App整体置灰,一种是单个页面置灰,可结合具体的业务场景使用。方法一:分别将图片和文字置灰一般情况下,App页面的颜色深度是24bit,也就是RGB各8bit;如果算上Alpha通道的话就是32bit,RGBA(或者ARGB)各8bit。灰度图像的颜色深度是8bit,这8bit表示的颜色不是彩色,而是256
领导让调研下黑(灰)白化实现方案,自己调研了两天,根据网上资料,做下记录只是学习过程中的记录,还是写作者牛逼
让学前端不再害怕英语单词(二),通过本文,可以对css,js和es6的单词进行了在逻辑上和联想上的记忆,让初学者更快的上手前端代码
用Python送你一颗跳动的爱心
在uni-app项目中实现人脸识别,既使用uni-app中的live-pusher开启摄像头,创建直播推流。通过快照截取和压缩图片,以base64格式发往后端。
商户APP调用微信提供的SDK调用微信支付模块,商户APP会跳转到微信中完成支付,支付完后跳回到商户APP内,最后展示支付结果。CSDN前端领域优质创作者,资深前端开发工程师,专注前端开发,在CSDN总结工作中遇到的问题或者问题解决方法以及对新技术的分享,欢迎咨询交流,共同学习。),验证通过打开选择支付方式弹窗页面,选择微信支付或者支付宝支付;4.可取消支付,放弃支付会返回会员页面,页面提示支付取消;2.判断支付方式,如果是1,则是微信支付方式。1.判断是否在微信内支付,需要在微信外支付。
Mac命令行修改ipa并重新签名打包
首先在 iOS 设备中打开开发者模式。位于:设置 - 隐私&安全 - 开发者模式(需重启)
一 现象导入MBProgressHUD显示信息时,出现如下异常现象Undefined symbols for architecture x86_64: "_OBJC_CLASS_$_MBProgressHUD", referenced from: objc-class-ref in ViewController.old: symbol(s) not found for architecture x86_64clang: error: linker command failed wit
Profiles >> 加号添加 >> Distribution >> "App Store" >> 选择 2.1 创建的App ID >> 选择绑定 2.3 的发布证书(.cer)>> 输入描述文件名称 >> Generate 生成描述文件 >> Download。Certificates >> 加号添加 >> "App Store and Ad Hoc" >> “Choose File...” >> 选择上一步生成的证书请求文件 >> Continue >> Download。
今天有需求,要实现的功能大致如下:在安卓和ios端实现分享功能可以分享链接,图片,文字,视频,文件,等欢迎大佬多多来给萌新指正,欢迎大家来共同探讨。如果各位看官觉得文章有点点帮助,跪求各位给点个“一键三连”,谢啦~声明:本博文章若非特殊注明皆为原创原文链接。