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

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

一、简介

  • 之前操作都是通过 客户端(MAC)服务端(iPhone) 处于同一个 Wifi 下通过 SSH 进行连接。
  • 这种方式有个问题,就是网速不是很好的时候,输入一个命令会等一会才会显示,因为你输出成功了需要网络同步到手机上,你这边才会显示。
  • 如果通过 USB 连接两者将 SSH 传到 服务端(iPhone) 就不会有这个问题了,效率也高。

二、端口介绍

  • 端口就是设备对外提供服务的窗口,每个端口都有个端口号(范围是 0~65535,共 65536 个)
  • 有些端口号是保留的,已经规定了用途,比如:
  • 更多的保留端口号:服务端口号列表
  • 21 端口提供 FTP 服务
  • 80 端口提供 HTTP 服务
  • 22 端口提供 SSH 服务(可以查看 /etc/ssh/sshd_configPort 字段)
// 进入服务端(手机)
dengzemiaodeMacBook-Pro:.ssh dengzemiao$ ssh root@10.0.89.184
// 进入 /etc/ssh 文件夹
iPhone:~ root# cd /etc/ssh
// 查看文件夹
iPhone:/etc/ssh root# ls -l
total 572
-rw-r--r-- 1 root wheel 577388 Jan  4  2020 moduli
-rw-r--r-- 1 root wheel   1526 Mar 21  2018 ssh_config
-rw-r--r-- 1 root wheel   3228 Mar 31  2019 sshd_config
// 查看 sshd_config 服务端配置文件
iPhone:/etc/ssh root# cat sshd_config
.....省略上下内容
#Port 22 // 这个就是指定的端口号
#AddressFamily any
#ListenAddress 0.0.0.0
#ListenAddress ::
.....省略上下内容
  • iPhone 默认是使用 22 端口进行 SSH 通信,采用的是 TCP 协议。

三、WifiUSB 连接的区别与思路

  • Wifi连接
  • 由于 SSH 走的是 TCP 协议,客户端(电脑)直接以 SSH 的方式通过 网络(Wifi) 登录到 服务端(iPhone),相当于 电脑 是通过 SSH 的方式直接访问 22 端口连接了手机。

  • USB连接
  • Mac 上有个服务程序 usbmuxd (它会开机自动启动) ,可以将 Mac 的数据通过 USB 传输到 iPhone
// usbmuxd 服务程序存放路径
/System/Library/PrivateFrameworks/MobileDevice.framework/Resources/usbmuxd
• 1
• 2
  • USB 连接则不能直接通过 SSH 网络访问 22 端口这么干了。
  • 流程应该是通过 SSH 访问本机的其他窗口(只要不是 保留端口 即可,举例:10010),然后在由这个端口通过 usbmuxd 连接服务端(手机)的 22 端口,将数据传递过去,这样就避开了通过网络访问 22 端口了。
  • 需要将 客户端(电脑)10010端口映射服务端(手机)22 端口上,端口映射完毕后,以后如果想跟 服务端(手机)22 端口通信,直接跟 客户端(电脑) 本地的 10010 端口通信就可以了。

四、端口映射

  • (可选)可以删掉其他所有文件,只保留这两个文件也可以的,不删也不妨碍,cd 到里面文件夹也是一样的。

  • 服务端(手机)22端口 ( SSH端口 ) 映射到客户端(电脑)本地的10010端口。
  • 进入文件夹 usbmuxd
$  cd /Users/dengzemiao/Downloads/usbmuxd
  • 执行映射命令,将 服务端(手机)22端口与 客户端(电脑) 本地的 10010 端口建立映射连接关系,以后访问本地的 10010 端口访问的就是 服务端(手机)22 端口。
// (推荐)加 -t 指令,支持电脑连接多台手机设备,也就是支持多个连接
$ python tcprelay.py -t 22:10010
// 不加 -t 指令,每次只能支持一个设备连接
$ python tcprelay.py 22:10010
  • 命令输入之后,处于这样的状态就是连接成功了,这个映射窗口是不能关闭的,,关闭就映射关系取消了,所以做别的操作我们就需要新开一个终端窗口了。

  • 映射成功之后,我们将不能在用 $ ssh root@10.0.89.184 这种访问方式了,这种是网络访问方式,现在我们需要访问本地的 10010 端口即可,在新开终端窗口输入:
// 将 IP 地址换成 localhost, -p 是端口号的意思
$ ssh -p 10010 root@localhost
// 将 localhost 等于 127.0.0.1
$ ssh -p 10010 root@127.0.0.1
// 也可以将 -p 10010 写在后面,可以通过 $ ssh --help 查看书写规则
$ ssh root@localhost -p 10010
  • 如果报错 ssh_exchange_identification: read: Connection reset by peer, 检查一下 USB 是否连接了手机,确定电脑 USB 只连接了越狱手机,如果连接了多台手机或非越狱手机会报这个错误。
// 连接 localhost 的 10010 端口
dengzemiaodeMacBook-Pro:~ dengzemiao$ ssh -p 10010 root@localhost
The authenticity of host '[localhost]:10010 ([127.0.0.1]:10010)' can't be established.
RSA key fingerprint is SHA256:TmFvst8CU2JJqrFZ1QIANzprd1rUckdYjV4lcVaS8Gk.
// 跟之前 Wifi 网络连接一下,询问是否确定连接并存储授权公钥
Are you sure you want to continue connecting (yes/no)? yes
// 成功连接
Warning: Permanently added '[localhost]:10010' (RSA) to the list of known hosts.
iPhone:~ root# 
iPhone:~ root# exit
logout
Connection to localhost closed.
  • 通过 USB 连接的环境下,你输入任何命令都会迅速响应或显示出来,不会像之前 Wifi 连接的一样,输入命令之后会有延迟,而且在这个链接终端窗口上的每一次链接或者操作,映射那个终端窗口都会有数据输出。

五、通过 USB 拷贝传输文件、数据

  • Wifi 传递命令:$ scp ~/.ssh/id_rsa.pub root@10.0.89.184:~/.ssh
dengzemiaodeMacBook-Pro:.ssh dengzemiao$ scp ~/.ssh/id_rsa.pub root@10.0.89.184:~/.ssh
// 这里需要输入密码,是因为我们上面第一步就将之前的授权文件删除了,所以现在是没有免密登录的了
root@10.0.89.184's password: 
id_rsa.pub                                  100%  403    10.1KB/s   00:00    
dengzemiaodeMacBook-Pro:.ssh dengzemiao$ 
  • USB传递命令:$ scp -P 10010 ~/.ssh/id_rsa.pub root@localhost:~/.ssh
  • scp -P 10010 是固定格式,指定端口,可以通过 $ scp --help 进行查看,
  • root@localhost 也就是将 IP 地址换成 localhost 本地,然后本地走 10010 端口。
  • 下面的传输速度与上面 Wifi 的传输输度比较一下。
dengzemiaodeMacBook-Pro:~ dengzemiao$ scp -P 10010  ~/.ssh/id_rsa.pub root@localhost:~/.ssh
id_rsa.pub                                       100%  403   137.7KB/s   00:00 
  • 现在的这种方式,都是依赖于映射,但是只要关了映射那个窗口,映射关系就会消失,所以每次需要重新按上面的方式添加映射在进行连接。
  • 下一章会专门将这个映射命令写成 sh脚本 (shell) 使用,然后只需要执行这些脚本文件即可,会比每次都去拖拽文件执行映射命令方便。
  • 也看看 sh脚本 的简单编写与使用。
  • iOS 逆向编程(九 - 2)将端口映射、USB连接手机封装成 .sh 脚本

相关文章
|
6月前
|
Unix Linux Shell
指定端口-SSH连接的目标(告别 22 端口暴力破解)
本文介绍了 SSH 命令 `ssh -p 44907 root@IP` 的含义与使用方法,包括命令结构拆解、完整示例及执行过程详解,帮助用户安全地远程登录服务器。
829 0
|
API Android开发 iOS开发
深入探索Android与iOS的多线程编程差异
在移动应用开发领域,多线程编程是提高应用性能和响应性的关键。本文将对比分析Android和iOS两大平台在多线程处理上的不同实现机制,探讨它们各自的优势与局限性,并通过实例展示如何在这两个平台上进行有效的多线程编程。通过深入了解这些差异,开发者可以更好地选择适合自己项目需求的技术和策略,从而优化应用的性能和用户体验。
|
Python
Python编程--使用NMAP端口扫描
Python编程--使用NMAP端口扫描
263 1
|
网络安全 Python
Python编程--目标IP地址段主机指定端口状态扫描
Python编程--目标IP地址段主机指定端口状态扫描
218 1
|
Swift iOS开发 UED
揭秘一款iOS应用中令人惊叹的自定义动画效果,带你领略编程艺术的魅力所在!
【9月更文挑战第5天】本文通过具体案例介绍如何在iOS应用中使用Swift与UIKit实现自定义按钮动画,当用户点击按钮时,按钮将从圆形变为椭圆形并从蓝色渐变到绿色,释放后恢复原状。文中详细展示了代码实现过程及动画平滑过渡的技巧,帮助读者提升应用的视觉体验与特色。
306 11
|
Swift iOS开发 UED
【绝妙创意】颠覆你的视觉体验!揭秘一款iOS应用中令人惊叹的自定义动画效果,带你领略编程艺术的魅力所在!
【8月更文挑战第13天】本文通过一个具体案例,介绍如何使用Swift与UIKit在iOS应用中创建独特的按钮动画效果。当按钮被按下时,其形状从圆形变化为椭圆形,颜色则从蓝色渐变为绿色;释放后,动画反向恢复原状。利用UIView动画方法及弹簧动画效果,实现了平滑自然的过渡。通过调整参数,开发者可以进一步优化动画体验,增强应用的互动性和视觉吸引力。
236 7
|
安全 测试技术 调度
iOS开发-多线程编程
【8月更文挑战第12天】在iOS开发中,属性的内存管理至关重要,直接影响应用性能与稳定性。主要策略包括:`strong`(强引用),保持对象不被释放;`weak`(弱引用),不保持对象,有助于避免循环引用;`assign`(赋值),适用于基本数据类型及非指针对象类型;`copy`(复制),复制对象而非引用,确保不变性。内存管理基于引用计数,利用自动引用计数(ARC)自动管理对象生命周期。此外,需注意避免循环引用,特别是在block中。最佳实践包括理解各策略、避免不必要的强引用、及时释放不再使用的对象、注意block中的内存管理,并使用工具进行内存分析。正确管理内存能显著提升应用质量。
174 2
|
网络协议 Linux Unix
面试官:服务器最大可以创建多少个tcp连接以及端口并解释下你对文件句柄的理解
面试官:服务器最大可以创建多少个tcp连接以及端口并解释下你对文件句柄的理解
416 0
面试官:服务器最大可以创建多少个tcp连接以及端口并解释下你对文件句柄的理解
|
开发工具 iOS开发 容器
【Azure Blob】关闭Blob 匿名访问,iOS Objective-C SDK连接Storage Account报错
【Azure Blob】关闭Blob 匿名访问,iOS Objective-C SDK连接Storage Account报错
211 0
|
NoSQL Linux 网络安全
【Azure Redis】Redis-CLI连接Redis 6380端口始终遇见 I/O Error
【Azure Redis】Redis-CLI连接Redis 6380端口始终遇见 I/O Error
247 0