原文由YueChen发表于TesterHome社区网站,点击原文链接可与YueChen交流。
前言
获取 iOS 性能数据,一直都是比较麻烦的事情,之前在构建测试框架&平台的时候,获取 iOS 性能也是没有什么好的办法,也只能使用比较原始的方式,获取非越狱 iOS 性能数据,例如 xcode 调试可以获取,Instruments 获取数据,用起来也是极为不便。
到现在能做到跨平台,对非越狱 iOS 机器进行监控数据的貌似只有腾讯一家 PerfDog,确实非常优秀,但是腾讯对于 PerfDog 的技术还是比较保密的,GitHub 上比较有名的关于 iOS 设备控制仓库上例如 facebook idb,libimobiledevice 等,也都没有获取性能数据相关内容。
目前已经实现
使用纯 Python 代码跨平台(win,mac,linux) 获取 iOS 部分性能数据&其他数据,10.3 < iOS version < 14.2 虽然可以获取绝大部分 iOS 设备性能数据,当然也有部分设备没有兼容,也希望有兴趣的同学可以一起探讨共同开发。最终开源项目地址会在文章末尾开放
基本工作原理介绍
- Usbmux
- Lcokdown
- LaunchDaemon
- Instruments 通道
- Framework
- DeveloperDiskImage.dmg
- MobileDevice.framework
- DTXMessage 流
Usbmux
usbmuxd 的主要作用就是,通过 usb 来构建一条 socket 通道来实现 Mac OS 与 iOS 之间的通讯
windows 上则是 C:\Program Files\Common Files\Apple\Mobile Device Support\AppleMobileDeviceService.exe 驱动来监听 27105 端口与 iOS 之间进行通讯
想做相关工具开发,获取数据显然必不可少,下面监听 usbmuxd
### 转移 usbmuxd
sudo mv /var/run/usbmuxd /var/run/usbmuxx
### 监听 usbmuxd
sudo socat -t100 -x -v UNIX-LISTEN:/var/run/usbmuxd,mode=777,reuseaddr,fork UNIX-CONNECT:/var/run/usbmuxx
### socat 工具是以文本来展示的,看起来相当费劲,
### 通过管道转到 wiershark 上面,wireshark 查看 usbmuxd
sudo socat -d -d -lf /dev/stdout -x -v 2>&1 UNIX-LISTEN:/var/run/usbmuxd,mode=777,reuseaddr,fork UNIX-CONNECT:/var/run/usbmuxx | awk '/^[<>]/{a=0; $1 == "<" ? "I" : "0"; next}{$0 = substr($0, 1, 48);printf "%.4x %s\n",a,$0;a+=NF}' | text2pcap - - | wireshark -ki -
### 很重要 !!!用完之后必须要复位,不然你的电脑之后就找不到手机了,必须重启电脑才行
sudo mv /var/run/usbmuxx /var/run/usbmuxd
LaunchDaemon & Lcokdown
用于与设备配对并启动其他服务。
成功配对后才能访问其他服务。成功配对需要解锁设备,并且用户单击手机屏幕上的“信任此设备”。后面主要都是与 Lcokdown 服务进行交互通讯
主要交互方式通过 plist 格式文件进行交互来启动相关服务,这里咱们使用 python plistlib 来进行 byte 流转换
例如启动 com.apple