原文由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.syslog_relay 服务

2020-12-15 14:04:53,987 - plist_service.py[line:88] - DEBUG: 发送 Plist: {'Request': 'StartService', 'Label': 'pyMobileDevice', 'Service': 'com.apple.syslog_relay'}
2020-12-15 14:04:53,987 - plist_service.py[line:90] - DEBUG: 发送 Plist byte: b'<?xml version="1.0" encoding="UTF-8"?>\n<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">\n<plist version="1.0">\n<dict>\n\t<key>Label</key>\n\t<string>pyMobileDevice</string>\n\t<key>Request</key>\n\t<string>StartService</string>\n\t<key>Service</key>\n\t<string>com.apple.syslog_relay</string>\n</dict>\n</plist>\n'

Instruments 服务

想要与 Instruments 服务进行通讯,第一个我们需要找到入口,第二个我们需要知道交换 DTXMessage 数据流格式,并对其进行编解码

这里如何开启通道,以及数据解析,就要看向Troy Bowman 大佬在逆向工程大会上发布的演讲。

大佬的两个项目连接共大家参考

https://github.com/troybowman/dtxmsg

https://github.com/troybowman/ios_instruments_client

好了知道相关流程了,开始抄作业吧

使用纯 python 实现 Instruments 协议,跨平台 (win,mac,linux) 获取 iOS 性能数据相关推荐

  1. Sublime Text 2 - 性感无比的代码编辑器!程序员必备神器!跨平台支持Win/Mac/Linux,支持32与64位,支持各种流行编程语言的语法高亮、代码补全等...

    Sublime Text 2 - 性感无比的代码编辑器!程序员必备神器!跨平台支持Win/Mac/Linux,支持32与64位,支持各种流行编程语言的语法高亮.代码补全等-- 语法高亮.代码提示补全. ...

  2. Sublime Text 2 - 程序员必备神器!跨平台支持Win/Mac/Linux

    代码编辑器或者文本编辑器,对于程序员来说,就像剑与战士一样,谁都想拥有一把可以随心驾驭且锋利无比的宝剑,而每一位程序员,同样会去追求最适合自己的强大.灵活的编辑器,相信你和我一样,都不会例外. 我用过 ...

  3. Sublime Text 2 - 性感无比的代码编辑器!程序员必备神器!跨平台支持Win/Mac/Linux

    原文:http://www.iplaysoft.com/sublimetext.html 代码编辑器或者文本编辑器,对于程序员来说,就像剑与战士一样,谁都想拥有一把可以随心驾驭且锋利无比的宝剑,而每一 ...

  4. Lua sublime Text 2 - 性感无比的代码编辑器!程序员必备神器!跨平台支持Win/Mac/Linux

    sublime Text 2 - 性感无比的代码编辑器!程序员必备神器!跨平台支持Win/Mac/Linux [  编程开发,  编辑输入 -  Windows,  Mac,  Linux // 20 ...

  5. 每次打开百度太麻烦?用程序直接打开网页 Python实现百度划词搜索功能(获取剪切板数据)

    浏览顺序 实现划词功能 运行错误 解决问题 转载声明 实现划词功能 说是划词翻译,实际上我们是通过获取用户的剪切板内容,通过一系列的操作得到的.首先呢,我们就先实现如何获取剪切板内容的程序 首先先在桌 ...

  6. nuke linux 插件,Nuke 插件:镜头光晕 Optical Flares v1.0.86(含预设)Win/Mac/Linux

    [插件介绍] Video Copilot 强大的镜头光晕插件 Optical Flare  终于支持 Nuke软件啦(注:Nuke为节点式特效合成软件,AE为图层式特效合成软件)! Nuke版本的Op ...

  7. CSDN首例Python自动化运维实战:从Linux系统中收集数据

    目录:导读 从Linux系统中收集数据 通过邮件发送收集的数据 使用time和date模块 定期运行脚本 从Linux系统中收集数据 使用Linux命令可以查看当前系统状态和运行状况的相关数据.然而, ...

  8. Python网络爬虫:某度地图API获取城市餐厅数据 并提取内容展示结果

    hello,大家好,我是wangzirui32,最近笔者的文章总访问突破1万了,这一路来感谢大家的支持,谢谢!这也是我的第60篇原创博文,希望你能认真的学习完它. 开始学习吧! 1. 百度API接口 ...

  9. python制作的游戏如何转化为swf_从纯Python中的Flash文件(.swf)获取维度

    How would I extract the dimensions (width and height) from a flash file? I intend on using this code ...

最新文章

  1. The Fuctions of LWAPP
  2. [置顶]       Mybatis技术(二) MyBatis-Spring
  3. 获取不到时间_一月自考成绩查询时间一出,看了文章这次稳过
  4. 一个机器周期 计算机_计算机科学组织| 机器周期
  5. 做一个项目,平时都用到哪些工具提高效率(上)[转]
  6. 七牛云与python交互的教程
  7. 深入理解jvm虚拟机(面试复习)
  8. qq企业邮箱的发送邮件服务器地址,腾讯企业邮箱注册和SMTP发件设置教程
  9. html怎样让线段显示长度,CAD想要知道线段的长度有什么技巧吗?
  10. html为什么链接无效,如何揪出网页中的无效链接
  11. 虚言妙诀终虚见,面试躬行是致知,Python技术面试策略与技巧实战记录
  12. 薪水被应届生倒挂了,很不爽,我应该跳槽吗?
  13. Java8新特性——Optional 类
  14. 《圈外课程学习记录》3.2 数据化强力说服
  15. 教你正确选择光伏组件与逆变器!
  16. DDOS攻击 — 棋牌游戏创业公司的生死劫
  17. Module-Huey任务队列
  18. 小爱音箱 电脑 麦克风_开箱,小米小爱音箱万能遥控版,这样的操作你知道吗?...
  19. Leet Code知识点总结 - 594
  20. cad填充密度怎么调整_如何在CAD中设置密度参数?

热门文章

  1. 网络营销推广怎么做 微信如何吸引粉丝
  2. android 下划线edittext,Android实现EditText添加下划线
  3. LApacheMP基础环境搭建
  4. 如何快速识别两张照片的相似程度(用百分比)
  5. c++ 原子操作 赋值_请问c++如何实现原子性操作?
  6. Hrbust 1837 Dream【dp】
  7. 关闭VM中虚拟机与主机时间同步
  8. JAVA打字小游戏,面向对象完成
  9. 回头再说说音乐--江湖笑 周华健
  10. 基于gmssl SM2 签名验签测试程序