2021-03-09
使用libimobiledevice + ifuse提取iOS沙盒文件
简介
libimobiledevice:一个开源包,可以让Linux支持连接iPhone/iPod Touch等iOS设备。
Git仓库:https://github.com/libimobiledevice/libimobiledevice.git
ifuse: 也是一个开源包,可以用来访问iDevice的工具
Git仓库:https://github.com/libimobiledevice/ifuse.git
我们可以利用libimobiledevice与ifuse进行shell封装,辅助实现自动化的测试过程。
这里我们用来提取iOS设备上APP沙盒中的日志文件
快速直接安装libmobiledevice的方法
MacOS上安装libimobiledevice
brew update
brew install libimobiledevice
#libimobiledevice中并不包含ipa的安装命令,所以还需要安装
brew install ideviceinstaller
Ubuntu下安装libimobiledevice
sudo add-apt-repository ppa:pmcenery/ppa
sudo apt-get update
apt-getinstall libimobiledevice-utils
sudo apt-getinstall ideviceinstaller
常用功能
1. 获取设备已安装app的bundleID
ideviceinstaller -l
演示:
Jackeys-MacBook-Pro:/ jackey$ ideviceinstaller -l
Total: 13 apps
com.zhouxi.xiaoailiteios - 小米同学20com.apple.test.WebDriverAgentRunner-Runner - WebDriverAgentRunner-Runner1com.apple.store.Jolly - Apple Store5.0.0.0302com.apple.clips - 可立拍4141.1.91com.apple.mobilegarageband - 库乐队4878.17com.apple.Keynote - Keynote 讲演5625com.apple.Numbers - Numbers 表格5625com.apple.Pages - Pages 文稿5625com.apple.iMovie - iMovie3709.9.72com.apple.itunesu - iTunes U2360com.sogou.sogouinput - 搜狗输入法148198com.tencent.xin - 微信6.7.4.44com.ss.iphone.ugc.AwemeInhouse - 抖音短视频内测43006Jackeys-MacBook-Pro:/ jackey$
2. 安装ipa包,卸载应用
//命令安装一个ipa文件到手机上,如果是企业签名的,非越狱机器也可以直接安装了。ideviceinstaller -i xxx.ipa//命令卸载应用,需要知道此应用的bundleIDideviceinstaller -U [bundleID]
卸载演示:
Jackeys-MacBook-Pro:/ jackey$ ideviceinstaller -U com.zhouxi.xiaoailiteios
Uninstalling 'com.zhouxi.xiaoailiteios'- RemovingApplication (50%)
- GeneratingApplicationMap (90%)
- Complete
Jackeys-MacBook-Pro:/ jackey$
安装演示:
Jackeys-MacBook-Pro:Code jackey$ ideviceinstaller -i QQ音乐\8.9.7.ipa
Copying 'QQ音乐 8.9.7.ipa' to device... DONE.
Installing 'com.tencent.QQMusic'- CreatingStagingDirectory (5%)
- ExtractingPackage (15%)
- InspectingPackage (20%)
- TakingInstallLock (20%)
- PreflightingApplication (30%)
- VerifyingApplication (40%)
- CreatingContainer (50%)
- InstallingApplication (60%)
- PostflightingApplication (70%)
- SandboxingApplication (80%)
- GeneratingApplicationMap (90%)
- Complete
Jackeys-MacBook-Pro:Code jackey$
这里补充一个: ipa我们可以通过itunes来进行下载, 下载完后可以在iTunnes偏好设置中看到存放目录
如果连接了多部手机需要分别安装时,请使用UDID指定:ideviceinstaller -u udid -i *.ipa
3. 查看系统日志
idevicesyslog
4. 查看当前已连接的设备的UUID
idevice_id --list
5. 截图
idevicescreenshot
6. 查看设备信息
ideviceinfo
7. 获取设备时间
idevicedate
8. 设置代理
iproxy
usage: iproxy LOCAL_TCP_PORT DEVICE_TCP_PORT [UDID]
9. 获取设备名称
idevicename
10. 查看和操作设备的描述文件
ideviceprovision list
11. 挂载DeveloperDiskImage,用于调试(这个在我的机器上面不能用, 应该是缺少什么东西了)
ideviceimagemounter
12. 调试程序
idevicedebug
如果在运行上面指令出现以下错误:
"Could not connect to lockdownd. Exiting."
使用以下方式重新安装
brew uninstall ideviceinstaller
brew uninstall libimobiledevice
brew install --HEAD libimobiledevice
brew link --overwrite libimobiledevice
brew install --HEADideviceinstaller
brew link
--overwrite ideviceinstaller
重新安装过程中如果出现以下错误:
A recent change to libimobiledevice bumped the constraint on libusbmuxd to >= version1.1.0. The current usbmuxd homebrew packageisversion1.0.10.
As a result, homebrew --HEAD installs of libimobiledevice no longer build without a --HEAD install of usbmuxd.
使用以下指令升级usbmuxd:
brew update
brew uninstall --ignore-dependencies usbmuxd
brew install --HEAD usbmuxd
brew link --overwrite usbmuxd
升级后接着安装libimobiledevice
挂载文件系统工具:ifuse
安装方式:
brew cask install osxfuse
brew install ifuse
或者通过官网安装 osxfuse
然后使用上面指令安装ifuse
1. 安装好后使用ifuse -h会打印详细使用说明
Usage: ifuse MOUNTPOINT [OPTIONS]
Mount directories of an iOS device locally using fuse.
-o opt,[opt...] mount options
-u, --udid UDID mount specific device by its40-digit device UDID
-h, --help print usage information
-V, --version print version
-d, --debug enable libimobiledevice communication debugging
--documents APPID mount'Documents' folder of app identified by APPID
--container APPID mount sandbox root of an app identified by APPID
--root mount root file system (jailbroken device required)
Example:
$ ifuse /media/iPhone --root
This mounts the root filesystem of the first attached device on
thiscomputerinthe directory /media/iPhone.
Jackeys-MacBook-Pro:Code jackey$
2. 挂在媒体文件目录:
//注意,此处的挂载点必须要真实存在,需要预先创建好目录,否则挂载失败ifuse [挂载点]
演示:
1sudo mkdir /myapp
Jackeys-MacBook-Pro:/ jackey$ sudo ifuse myapp/Password:
Jackeys-MacBook-Pro:/ jackey$
卸载挂载点
fusermount -u [挂载点]
这个指令在我的电脑上不行, 我改用的sudo umount /myapp
3. 挂载某个应用的documents目录
ifuse --documents [要挂载的应用的bundleID] [挂载点]//注意,iOS 8.3之后要求应用的UIFileSharingEnabled权限要开启,否则可能没有权限访问,会有如下的错误提示ERROR: InstallationLookupFailed
The App 'com.wsgh.test'iseither not present on the device, or the'UIFileSharingEnabled'keyisnotsetinits Info.plist. Starting with iOS8.3thiskeyismandatory to allow access to an app's Documents folder.
演示:
Jackeys-MacBook-Pro:/ jackey$ sudo ifuse --documents com.zhouxi.xiaoailiteios /myapp
Password:
ERROR: InstallationLookupFailed
Jackeys-MacBook-Pro:/ jackey$
报这个错是因为我们app没有开启文件共享,需要在app的info.plist添加一下字段
我们再试试
Jackeys-MacBook-Pro:/ jackey$ sudo ifuse --documents com.zhouxi.xiaoailiteios /myapp
Password:
mount_osxfuse: mount point /myappisitself on a OSXFUSE volume
这里报错的原因是我们不能把文件挂在到根目录, 我们先删除之前的挂载
重新挂在到Document目录下我们自己的文件夹中
ifuse --documents com.zhouxi.xiaoailiteios /Users/jackey/Documents/Xiaomi/myapp
OK, 这次没有出错, 打开Finder进入所在目录发现myapp文件夹没有了, 但增加了一个OSXFUSE Volume的目录
打开里面就是我们的Documents目录
使用umount可卸载
umount /Users/jackey/Documents/Xiaomi/myapp
4. 挂在某应用的整个沙盒目录
ifuse --container [要挂载的应用的bundleID] [挂载点]
演示:
ifuse --container com.zhouxi.xiaoailiteios /Users/jackey/Documents/Xiaomi/myapp/xiaoailite
打开finder可以看到整个沙盒目录都挂在上来了
如果需要自动提取沙盒日志,这里我们可以写脚本使用挂在的目录去获取里面的内容
Jackeys-MacBook-Pro:xiaoailite jackey$ pwd/Users/jackey/Documents/Xiaomi/myapp/xiaoailite
Jackeys-MacBook-Pro:xiaoailite jackey$ ls
Documents Library SystemData tmp
Jackeys-MacBook-Pro:xiaoailite jackey$