导读
对于android的开发以及测试人员,对adb命令一定会很熟悉,adb工具可谓android测试的入门神器,安装、卸载、抓log、截图等等一应俱全。很多自动化以及性能工具都一定程度上要依赖adb工具。
刚开始接触iOS时,一直希望iOS有一套类似adb工具的东西,结果都被告知要用itools、ituns类的图形化界面工具。后来经过研究,要在iOS上实现一套类adb工具理论上是没有问题,有很多开源库可以使用,所以就做了一套idb出来(目前适用于windows平台),作为iOS的测试的基础工具,主要实现了两个功能。
1、让用户可以使用idb对iOS手机进行基础的操作,就如同使用adb操作android手机;
2、封装好了一键抓取网络包(生成pcap文件)以及log的方式,提高相应的效率。
完整idb工具下载地址(仅供交流学习):
https://share.weiyun.com/f28c0e8f6fbd240cdb3006da7fc56699 。
原理
iTunes是如何连接手机的?
第一步:首先通过usbmux技术,和手机建立连接。usbmux是一种可以通过usb管道(也就是一个usb端口)建立多路复用连接的系统。这是一个类TCP系统,通过这种系统,主机的端口号可以和手机中的特定端口号建立连接并通信。
第二步:连接手机的lockdown服务,对应的端口号为62708,然后通过和lockdown服务传输数据,实现相应的功能。这个服务通常只能通过usb端口建立相应的tcp连接(也就是第一步说的usbmux系统)。Lockdown服务可以用来做很多事情,安装应用、查看文件、重启等等。
通信协议从低到高如下:
1、USB协议:通过usb端口传输多个连接的数据,类似于网络中的数据链路层;
2、usbmuxd协议:打开设备上TCP端口连接,类型于网络中的运输层;
3、lockdownd协议:用于和lockdown服务传输数据,类似于网络中的应用层。
idb原理介绍
了解到iTunes的原理后,很多人便开始自己开发一些库,实现一样的功能,最有名的就是libimobiledevice是基于C语言实现的,编译配置比较麻烦,学习成本也较高。后来也出了对应的python库,即pymobiledevice。idb就是基于这个python库实现的。
idb架构设计上分为5层:
1、usbmux层:usb驱动