使用libimobiledevice在linux上挂载iphone6

准备环境:

Linux: Ubuntu 16.04 LTS on VirtualBox
iPhone6: iOS10.0.2
第三方安装包:libimobiledevice

说明:

一般情况下如果连接iPhone到linux,Windows机器上,如果没有安装iTunes或者其他第三方软件,则只能识别照片,其他文件都是无法读取的,除非越狱后也是可以的。

libimobiledevice是一款基于GPL2.0开源协议的跨平台访问iOS设备的协议库,它是独立的软件库,没有苹果公司授权,也不需要依靠其它苹果授权的第三方软件和对设备越狱,可以帮助解决iPhone,iPod,iPad,Apple TV连接到其它非Mac OS设备,也允许其他软件访问这些设备的文件系统,管理安装的应用程序,以及获取其他的权限。但是这里并不是所有的权限,苹果考虑到其系统的安全性,有些功能还是被禁止访问的。

编译时linux系统需要提前安装的依赖:
make, autoheader,automake,autoconf, libtool, pkg-config, gcc

libimobiledevice中其他库文件介绍:
- libplist:
是以以二进制或者XML处理苹果属性列表文件的小的可移植的C语言库
- libusbmuxd:
通过usbmuxd后台程序提供的socket和iOS设备多路复用连接的客户端库。
- usbmuxd:
和iOS设备多路连接的socket守护进程,usbmuxd全称是“USB multiplexing daemon“,该进程通过USB和iOS设备复用连接。iTunes和iPhone通信使用的也是usbmux协议,所有和iOS设备通过USB通信都是需要usbmux, 当iOS设备通过USB插入时,usbmuxd作为中间媒介连接到设备,像TCP那样复用连接到设备的sockets,可以并行创建多个TCP 端口。
- ifuse:
实现访问iOS系统内容的fuse系统

官网:

  • http://www.libimobiledevice.org
  • https://github.com/libimobiledevice

安装:

可以到github上面下载源码
或者安装git, 使用git命令操作
配置git时,如果使用的是代理,需要设置http.proxy:

$git config --global http.proxy http://:@:
$git config --global user.name 
$git config --global user.email 

为便于管理,建立新文件夹用于对libimobiledevice的安装:

$mkdir libimobiledevice
$cd libimobiledevice

克隆源码包到本地:

$git clone https://github.com/libimobiledevice/libplist.git
$git clone https://github.com/libimobiledevice/usbmuxd.git
$git clone https://github.com/libimobiledevice/libusbmuxd.git 
$git clone https://github.com/libimobiledevice/ideviceinstaller.git
$git clone https://github.com/libimobiledevice/ifuse.git
$git clone https://github.com/libimobiledevice/libirecovery.git
$git clone https://github.com/libimobiledevice/libideviceactivation.git

注意以下包的安装顺序,因为包和包之间有前后依赖关系,可能因为系统安装包的不同,需要安装的插件会不同,如果已经安装了相应的插件,则不许用重新安装,这里测试的是新安装的Ubuntu16.04 LTS

  1. libplist 1.13.0:

    $cd plist
    $vim README
    $sudo apt-get install make automake autoconf libtool pkg-config
    $sudo apt-get install python-dev
    $./autogen.sh
    $sudo make
    $sudo make install
  2. libusbmuxd 1.1.0:

    $cd libusbmuxd
    $vim README
    $./autogen.sh
    $sudo make
    $sudo make install
  3. libimobiledevice 1.2.1:

    $cd ../libimobiledevice/
    $vim README
    $sudo apt-get install libssl-dev
    $./autogen.sh
    $sudo make && make install
  4. usbmuxd 1.1.1:

    $cd ../usbmuxd
    $vim README
    $sudo apt-get intall libusb-1.0-0-dev
    $./autogen.sh
    $sudo make
    $sudo make install
  5. ifuse 1.1.3:

    $cd ../ifuse/
    $vim README
    $sudo apt-get install libfuse-dev
    $./autogen.sh
    $sudo make && make install

设置lockdown权限,iOS7以上的系统通过lockdown管理和iOS设备之间的派对(通过idevicepair命令):

$sudo chmod 0777 -R /var/lib/lockdown/

建立新的挂载目录,并且设置正确的用户属性和权限,不然挂载时会出现没有权限,或者操作类型不支持等各种问题,导致失败。

$sudo mkdir -p /media/iphone
$sudo chown $USER:$USER /media/iphone -R
$sudo chmod 0777 /media/iphone

验证:

通过USB连接手机和Ubuntu,手机端弹出是否信任对话框时,选择 信任
所有请求手机端有应答的操作都必须保持手机处于解锁状态

派对手机:

$idevicepair pair
ERROR: Could not validate with device 94062c249078ef7931bf08ee83a2ba730bc7e352 because a passcode is set. Please enter the passcode on the device and retry.
$idevicepair pair
SUCCESS: Paired with device 94062c249078ef7931bf08ee83a2ba730bc7e352

挂载iPhone:

$ifuse /media/iphone

无任何错误信息,说明挂载成功。

使用结束后,记得通过下面命令解除挂载:

$fusermount -u /media/iphone

我尝试在Ubuntu14.04虚拟机中挂载时,始终会包错误:lock down error code -21, 始终解决不了,包括尝试在新建的系统中安装,官网提了issue,也没有回复。
https://github.com/libimobiledevice/libimobiledevice/issues/188

派对成功后,使用命令读取手机信息:
这里读取的信息非常全面,包括IMEI,手机硬件电路信息,手机颜色代码,手机号码,基带,时区等等,都是一些很重要的信息!

这里我删除了部分隐私信息

$ideviceinfo
ActivationState: Activated
ActivationStateAcknowledged: true
BasebandActivationTicketVersion: V2
BasebandCertId: 3840149528
BasebandChipID: 8343777
BasebandKeyHashInformation: 
 AKeyStatus: 2
 SKeyHash: u+/tcCwvaQ+1Y9t40I4yegCEmB28mALlaROhaIVGBWo=
 SKeyStatus: 0
BasebandMasterKeyHash: 
BasebandRegionSKU: 
BasebandSerialNumber: Cn4jog==
BasebandStatus: BBInfoAvailable
BasebandVersion: 5.24.00
BluetoothAddress: 
BoardId: 6
BrickState: false
BuildVersion: 14A456
CPUArchitecture: arm64
CarrierBundleInfoArray[1]: 
 0: 
  CFBundleIdentifier: com.apple.CMCC_cn
  CFBundleVersion: 25.1
  IntegratedCircuitCardIdentity: 898600910915f1011209
  InternationalMobileSubscriberIdentity: 460006144159788
  MCC: 460
  MNC: 00
  SIMGID1: /////w==
  SIMGID2: /////w==
CertID: 3840149528
ChipID: 28672
ChipSerialNo: Cn4jog==
DeviceClass: iPhone
DeviceColor: #e1e4e3
DeviceName: iPhone
DieID: 
EthernetAddress: 
FirmwareVersion: iBoot-3406.1.79
FusingStatus: 3
HardwareModel: N61AP
HardwarePlatform: t7000
HostAttached: true
IntegratedCircuitCardIdentity:
InternationalMobileEquipmentIdentity: 
InternationalMobileSubscriberIdentity: 
MLBSerialNumber: F3Y50620ZR1F98FE
MobileEquipmentIdentifier: 
MobileSubscriberCountryCode: 460
MobileSubscriberNetworkCode: 00
ModelNumber: MG492
NonVolatileRAM: 
 auto-boot: dHJ1ZQ==
 backlight-level: MTQ2OQ==
 boot-args: 
 com.apple.System.tz0-size: MHhDMDAwMDA=
PartitionType: 
PasswordProtected: true
PhoneNumber: 
PkHash: 
ProductName: iPhone OS
ProductType: iPhone7,2
ProductVersion: 10.0.2
ProductionSOC: true
ProtocolVersion: 2
ProximitySensorCalibration: 
RegionInfo: CH/A
SBLockdownEverRegisteredKey: true
SIMGID1: /w==
SIMGID2: /w==
SIMStatus: kCTSIMSupportSIMStatusReady
SIMTrayStatus: kCTSIMSupportSIMTrayInsertedWithSIM
SerialNumber: F1DP6UKCG5MQ
SoftwareBehavior: QQEAAAAAAAAAAAAAAAAAAA==
SoftwareBundleVersion: 
SupportedDeviceFamilies[1]: 
 0: 1
TelephonyCapability: true
TimeIntervalSince1970: 1480061624.803156
TimeZone: Asia/Shanghai
TimeZoneOffsetFromUTC: 28800.000000
TrustedHostAttached: true
UniqueChipID: 8554561647182886
UniqueDeviceID: 94062c249078ef7931bf08ee83a2ba730bc7e352
UseRaptorCerts: true
Uses24HourClock: false
WiFiAddress: 
kCTPostponementInfoPRIVersion: 0.1.175
kCTPostponementInfoPRLName: 0
kCTPostponementInfoServiceProvisioningState: true
kCTPostponementStatus: kCTPostponementStatusActivated

查看iPhone中的文件:

打开Ubuntu文件管理:

使用libimobiledevice在linux上挂载iphone6_第1张图片

读取音频文件:

可以正常播放iPhone应用程序博客里的音频文件:

使用libimobiledevice在linux上挂载iphone6_第2张图片

读取视频文件:

可以正常播放iPhone应用程序博客里的音频文件:

不知道其他第三方app可不可以也实现这样通信。测试中出了podcasts没有其他app识别出来,可能是没有实现通信的协议,需要进一步研究。如果第三方app也能成功实现通信,那将可以在很多基于Linux系统的设备中使用。不过商业项目最好还是申请MFi账号,通过苹果认证,以防出现其他法律风险。

你可能感兴趣的:(C,opensource,Linux)