PyMobileDevice3
使用开发者工具 (iOS >= 17.0)
常用动作
OpenSSL 库
libusb 依赖
概述
安装
用法
位和字节 (Python API)
贡献
有用的信息
版权声明
pymobiledevice3
是一个纯 python3 实现,用于与 iDevices(iPhone 等)一起使用。这意味着该工具是架构和平台通用的,并且受支持和测试:
视窗
Linux
macOS
主要特点包括:
通过 bonjour 发现设备
TCP端口转发
查看系统日志行(包括调试)
档案管理
应用管理
文件系统管理(AFC)
崩溃报告管理
网络嗅探(PCAP)
固件更新
安装图像
通知监听和触发( notify_post()
api)
查询和设置SpringBoard选项
自动化 WebInspector 功能
DeveloperDiskImage 特点:
截图
模拟位置
流程管理
嗅探 KDebug 消息( strace功能++)
进程监控( top
赞)
辅助功能
嗅探 oslog,其中包括系统日志和路标
备份
您可以从 PyPi 安装:
python3 -m pip install -U pymobiledevice3
或者直接从源安装最新版本:
git 克隆 [email protected]:doronz88/pymobiledevice3.gitcd pymobiledevice3 python3 -m pip install -U -e 。
您还可以通过将以下内容添加到~/.zshrc
中来为所有可用子命令安装自动完成功能:
# python-click<8.0eval "$(_PYMOBILEDEVICE3_COMPLETE=source_zsh pymobiledevice3)"# python-click>=8.0eval "$(_PYMOBILEDEVICE3_COMPLETE=zsh_source pymobiledevice3)"
目前,如果在较旧的 iOS 版本(<13)上使用,则明确需要 openssl。
在 macOS 上:
酿造安装openssl
在 Linux 上:
sudo apt 安装 openssl
在恢复或 DFU 模式下与设备交互需要安装libusb
(处理restore
子命令所必需的)。
安装步骤根据您的具体平台而有所不同:
在 macOS 上:
# 使用 homebrewbrew 安装 libusb# 使用 MacPortssudo 端口安装 libusb
在 Linux 上:
# Debian/Ubuntusudo apt-get install libusb-1.0-0-dev# Fedorasudo dnf install libusb-devel# Arch Linuxsudo pacman -S libusb
在窗户上:
请访问 libusb 网站下载最新版本的二进制文件:
https://libusb.info/
CLI 子命令大致按用于在设备中交互的协议层进行划分。例如,从 DeveloperDiskImage 派生的所有功能都可以通过developer
子命令访问。这也意味着所有不存在的功能都不需要它。
这是主要的 CLI 用法:
Usage: pymobiledevice3 [OPTIONS] COMMAND [ARGS]... Interact with a connected iDevice (iPhone, iPad, ...) For more information please look at: https://github.com/doronz88/pymobiledevice3 Options: -h, --help Show this message and exit. Commands: activation Perform iCloud activation/deactivation or query the current state afc Manage device multimedia files amfi Enable/Disable developer-mode or query its state apps Manage installed applications backup2 Backup/Restore options bonjour Browse devices over bonjour companion List paired "companion" devices crash Manage crash reports developer Perform developer operations (Requires enable of Developer-Mode) diagnostics Reboot/Shutdown device or access other diagnostics services lockdown Pair/Unpair device or access other lockdown services mounter Mount/Umount DeveloperDiskImage or query related info notification Post/Observe notifications pcap Sniff device traffic power-assertion Create a power assertion processes View process list using diagnosticsd API profile Managed installed profiles or install SSL certificates provision Manage installed provision profiles remote Create RemoteXPC tunnels restore Restore an IPSW or access device in recovery mode springboard Access device UI syslog Watch syslog messages usbmux List devices or forward a TCP port webinspector Access webinspector services version Query pymobiledevice3 version
注意:目前,仅在 macOS 和 Windows(最高至 iOS 17.3.1)上正式支持此功能,但从 iOS 17.4 开始,使用新锁定隧道的所有平台均完全支持此功能。对于 Windows 与 iOS 17.0-17.3.1 的交互,您需要安装额外的驱动程序(我们不提供)
从 iOS 17.0 开始,Apple 引入了新的 CoreDevice 框架来与 iOS 设备配合使用。该框架依赖于 RemoteXPC 协议。为了与开发人员服务进行通信,您需要首先以两种形式之一创建可信隧道:
启动名为tunneld
隧道服务器来自动检测设备并建立连接
执行以下命令:
# 如果设备支持远程配对,例如 corellium 实例或 AppleTV,# 您需要首先将它们配对# 普通 iOS 设备不需要此步骤 python3 -m pymobiledevice3 远程配对# 在 Windows 上,使用特权 shellsudo python3 - m pymobiledevice3 远程隧道
使用start-tunnel
手动创建隧道
执行以下命令:
# 如果设备支持远程配对,例如 corellium 实例或 AppleTV,# 您需要首先将它们配对# 普通 iOS 设备不需要此步骤 python3 -m pymobiledevice3 远程配对# 注意:在 Windows 上,使用特权 shell对于以下命令#从 iOS 17.4 开始,您可以使用更快的锁定隧道 sudo python3 -m pymobiledevice3locking start-tunnel#如果您需要此连接类型也可通过 wifi 使用,您可以启用itpython3 -m pymobiledevice3 lock wifi-connections on# 在较旧的 iOS 版本上使用以下内容# 你可以通过 `-t wifi` 来强制建立 WiFi 隧道sudo python3 -m pymobiledevice3 远程启动隧道
将打印以下输出,为您提供所需的连接详细信息:
Interface: utun6 RSD Address: fd7b:e5b:6f53::1 RSD Port: 64337 Use the follow connection option: --rsd fd7b:e5b:6f53::1 64337
该命令必须以高权限运行,因为它创建一个新的 TUN/TAP 设备,这是一个高权限操作。
现在,(几乎)所有 pymobiledevice3 都接受额外的--rsd
/ --tunnel
选项,用于通过隧道连接到服务。具体来说,总是在出现InvalidServiceError
错误时隐式尝试使用--tunnel
选项,以简化开发人员服务的工作。您现在可以尝试执行其中任何一个,如下所示:
# 访问 DVT 服务# --tunnel 选项可以接受空字符串或特定设备的 UDID # UDID 可以以 :PORT 为后缀,以防通过隧道在非默认端口提供服务 python3 -m pymobiledevice3 Developer dvt ls / --tunnel ''# 或者简单地不使用 `--tunnel` 选项,假设隧道正在运行 python3 -m pymobiledevice3 Developer dvt ls /# 或者我们可以使用手动隧道详细信息python3 -m pymobiledevice3 Developer dvt ls / --rsd fd7b:e5b:6f53::1 64337# 我们还可以访问或其他“正常”锁定服务python3 -m pymobiledevice3 syslog live --隧道''
您可以使用pymobiledevice3
在设备上执行很多操作。这只是一些常见操作的 TL;DR:
# 列出已连接的设备pymobiledevice3 usbmux list# 使用 bonjourpymobiledevice3 bonjour rsd 浏览 RemoteXPC 设备 pymobiledevice3 bonjour rsd# 查看所有 syslog 行(包括调试消息)pymobiledevice3 syslog live# 仅过滤包含单词“SpringBoard”的消息 pymobiledevice3 syslog live -m SpringBoard# 重新启动 devicepymobiledevice3 诊断重启#从 devicepymobiledevice3 crash pull /path/to/crashes 中提取所有崩溃报告# 管理媒体目录pymobiledevice3 afc shell# 列出所有已安装的应用程序及其详细信息pymobiledevice3 apps list# 仅列出查询特定的一组操作系统应用程序pymobiledevice3 apps 查询BUNDLE_ID1 BUNDLE_ID2# 创建从主机到设备的TCP 隧道pymobiledevice3 usbmux 转发HOST_PORT DEVICE_PORT# 创建devicepymobiledevice3 backup2 backup --full DIRECTORY# 恢复给定的备份pymobiledevice3 backup2 Restore DIRECTORY# 通过给定的 IPSW 文件/url 执行软件更新:pymobiledevice3 Restore update -i /path/to/ipsw | url# 注意:以下 webinspector 子命令将需要打开 Web Inspector 功能# 在任何打开的选项卡上获取交互式 JavaScript shell pymobiledevice3 webinspector js-shell# 列出当前打开的选项卡是设备的浏览器pymobiledevice3 webinspector opening-tabs# 注意:以下 webinspector 子命令还需要打开远程自动化功能# 在新的远程自动化 tabpymobiledevice3 webinspector 上获取交互式 JavaScript shell js-shell --automation# 启动自动化会话以查看给定的 URL pymobiledevice3 webinspector 启动 URL# 获取类似 selenium 的 shellpymobiledevice3 webinspector shell# 注意:以下子命令需要打开 DeveloperMode。如果您的设备没有 pin 码,您可以使用以下命令自动打开它 pymobiledevice3 amfi enable-developer-mode# Mount the DDI (DeveloperDiskImage)pymobiledevice3 mounter auto-mount# 注意:以下子命令假设两个 DeveloperMode 均为 DeveloperMode打开并且已安装 DDI # 模拟一个 `lat long` 位置 (iOS < 17.0)pymobiledevice3 开发者模拟位置集 -- lat long # 模拟一个 `lat long` location (iOS >= 17.0)pymobiledevice3 Developer dvtsimulate-location set -- lat long# 播放 .GPX 文件pymobiledevice3developer dvtsimulate-location playroute.gpx# 在两次之间的时间上添加 -500 到 500ms 之间的随机定时噪声GPX文件中的点 pymobiledevice3developerdvtsimulate-locationplayroute.gpx 500#清除模拟位置:pymobiledevice3developerdvt simulate-locationclear#对设备进行截图:pymobiledevice3developerdvtscreenshot/path/to/screen.png#查看详细进程列表(包括ppid、uid、guid、沙盒等...)pymobiledevice3developerdvtsysmonprocesssingle # 嗅探 oslogpymobiledevice3 Developer dvt oslog# 杀死进程 pymobiledevice3 Developer dvt Kill PID# 列出给定目录中的文件(un-chrooted)pymobiledevice3 Developer dvt ls PATH# 通过其捆绑包名称启动应用程序pymobiledevice3 Developer dvt launch com.apple.mobilesafari# 嗅探所有 KDebug 事件以获取类似 `strace` 的输出:pymobiledevice3 Developer dvt core-profile-session parse -live# 将所有 KDebug 事件嗅探到文件中,以便稍后使用诸如[`pykdebugparser`](https://github.com/matan1008/pykdebugparser)、`fs_usage`等等...pymobiledevice3 Developer dvt core-profile-session save FILENAME# 获取设备扩展信息(内核名称、芯片组等) ...)pymobiledevice3 Developer dvt device-information# 监视特定 PID 的能耗pymobiledevice3 Developer dvt energy PID1 PID2 ...
要了解与lockdownd
通信的细节,或者如果愿意学习python API,建议您看一下这篇文章:
了解 iDevice 协议层
请参阅贡献。
请参阅杂项
库在 Windows 平台上使用 WindowsSelectorEventLoopPolicy 进行 asyncio。请参阅讨论杂项
本作品根据 GPL 3.0 获得许可,并归功于几个主要贡献者:
赫克托·马丁“marcan”[email protected]
马蒂厄·雷纳德
matan1008 [email protected]
盖·索尔顿
netanelc305 [email protected]