苹果USB低级过滤器,可帮助控制操作系统使用USB配置(下) - 嘶吼 RoarTalk – 网络安全行业综合服务平台,4hou.com

苹果USB低级过滤器,可帮助控制操作系统使用USB配置(下)

xiaohui 技术 2023-11-16 11:54:00
52597
收藏

导语:在本文中,我们探讨了苹果的USB低级过滤器是如何在Windows设备上工作的,以及它在提供不同体验方面的作用。

苹果USB低级过滤器,可帮助控制操作系统使用USB配置(上)

PTP还是MTP?

本文中,我们将重点讨论为什么iphone没有像我们期望的使用MTP协议的设备那样提供一整套存储操作,还将研究USB接口类/子类和WPD_DEVICE_PROTOCOL属性之间不匹配的原因。为了回答这些问题,我们将了解如何创建WPD设备、如何“挂载”存储以及如何设置WPD属性。

首先对比一下使用PTP连接的Android设备和iPhone之间WPD设备协议属性的差异:

9.jpg

考虑到iPhone中的WPD协议属性,我们期望有一组更丰富的选项来与设备交互,可以通过查看设备的接口描述符来快速回答为什么iPhone表现为PTP设备。

iPhone和小米在PTP和MTP模式下的描述如下:iPhone有多种配置,但无论选择哪一种,创建WPD的接口PDO总是包含类6和子类1的接口。

10.png

尽管已经回答了最大的问题,但仍然有一些细节,比如为什么iPhone不允许创建或复制任何东西到它,而另一方面,小米即使使用PTP也允许创建对象,所以对于喜欢深入了解事物的人来说,仅仅浏览界面描述是不够的。

由于此描述符将生成CompatibleId USB\Class_06&SubClass_01&Prot_01,因此寻找与此ID匹配的INF,我们找到wpdmtp.inf。在此INF中,可以获得WPD设备的UMDF部分的以下组件:

WpdMtp.dll:MTP核心协议组件;

WpdMtpUS.dll:Usbscan MTP驱动程序的传输层;

WpdMtpDr.dll:Windows便携式设备媒体传输协议驱动程序;

作为内核方面的一部分,INF将添加WinUSB.sys作为LowerFilter,并添加反射器WUDFRd.sys作为函数驱动程序。

从上面提到的三个二进制文件中,WpdMtpDr是将在WUDFHost中运行的主要WPD MTP驱动程序。这是一个UMDFv1驱动程序,它将基于COM并用C++编写,基于WpdWudfSampleDriver,几乎就不需要逆转,但该驱动程序没有更新为使用UMDFv2,因为UMDFv1几乎已经被弃用,并且几乎不支持新功能。

11.jpg

如上所述,入口点是OnDeviceAdd例程。在这个函数中,创建了CDevice对象,它将我们带到CDevice::OnPrepareHardware例程,在该例程中,通过调用WpdBaseDriver::Initialize来初始化WpdBaseDriver。不幸的是,这是Sample代码和WpdMtpDr开始出现差异的部分。示例代码没有真正的设备可以通信,但在本文的示例中,WpdMtp.dll的作用所在,充当WpdMtpDr和真正设备之间的粘合剂。MTP核心库包含CMtpDevice类,它表示真实的设备。在WpdBaseDriver初始化期间,加载MTP核心库,并打开与设备的会话,如以下简化代码片段所示:

11.png

加载MTP核心模块后,触发初始化例程来检索MTP DeviceInfo Dataset。这是发送到设备的初始MTP请求之一,DeviceInfo结构在其返回时填充。值得注意的是,该结构包含关键信息,如模型、制造商和各种MTP版本标识符。这些信息在稍后设置WPD属性时起着至关重要的作用。

MTP核心发送请求并将响应解析为CDeviceInfo结构,而WpdMtpDr利用缓存系统存储指向WpdMtp返回的类的COM指针。这种方法可以防止频繁地向设备重新发出PTP/MTP请求,从而优化I/O操作。

下面的堆栈显示了这个函数第一次被调用:

12.png

在UM中,WPD应用程序通常使用WPD API构建WPD命令,WPD API将序列化该WPD命令并将其打包到IOCTL请求中,这将到达驱动程序,驱动程序将反序列化命令并相应地采取行动。

一旦设备准备好接收I/O操作,操作系统将尝试检索WPD设备属性,该信息存在于device objectID中(此objectID是预定义的,始终表示device对象)。这个请求将到达WPD驱动程序,它将用CDeviceInfo的信息填充WPD设备属性。对于WPD_DEVICE_PROTOCOL的情况,该值将如何设置:

13.png

现在如果看一下iPhone返回的DeviceInfo Dataset,可以看VendorExtId和VendorExtVersion,可以最终回答为什么WPD_DEVICE_PROTOCOL被设置为MTP 15.20。MICROSOFT_VENDOR_EXT_ID是由MS作为WMDRM协议的一部分定义的,这是MTP响应器需要在DeviceInfo Dataset中设置的值之一,以告诉MTP启动器它支持AAVT,令人惊讶的是,iPhone只添加了这个必需的值,而不是其他值。

14.jpg

该属性将在函数CDevicePropContext::GetDeviceType上检索,该函数将使用SetupAPI获得compatibleid,无论协议是PTP还是MTP,设备中的每个存储对象(由以s开头的storageid表示)都有自己的属性。同样,当设备上开始I/O操作时,操作系统使用两个关键操作从存储对象中检索信息:getstorageid (0x1004)(检索storageid列表)和GetStorageInfo (0x1005)(定义存储对象的行为方式)。我们将重点关注后者,因为它返回一个包含以下三个关键字段的StorageInfo数据集。

存储类型

文件系统类型

访问功能

当WPD驱动程序第一次尝试获取设备的StorageInfo时,该请求将通过MTP核心模块。该模块向设备发送PTP/MTP操作请求,并将结果StorageInfo数据集返回给驱动程序。

15.png

因此,如果看一下iPhone是如何响应这个请求的,将能够根据上面提到的三个字段来确定Storage对象的行为。

16.jpg

我们可以从上图得到以下信息:存储类型==固定RAM,这是相当标准的移动设备。文件系统类型== DCF, DCF代表Camera FS的设计规则,你可以会从著名的DCIM根目录中认出它。DCF标准定义了在目录和文件上设置只读属性的选项。访问能力==只读,不能删除对象,这是致命的。这将定义对Storage对象的访问限制,操作系统将遵守这些限制。例如,这将影响iPhone的上下文菜单中显示的选项。

这就是为什么iPhone上的文件选项如此有限。为了便于比较,下图显示了使用PTP插入小米设备时的StorageInfo数据集。

17.jpg

事实证明,这就是为什么即使使用PTP协议连接,也能够在小米设备上创建对象的原因。然而,值得注意的是小米的MTP响应器似乎有问题,无论在设备上选择PTP还是MTP,在响应GetStorageInfo请求时都会返回相同的Dataset,至少在红米Note 8模型上是这样。

这样,我们就可以更清楚地理解Apple设备的运行方式,以及如何为设备配置WPD属性。

苹果软件对苹果设备栈的影响

接下来总结一下,当我们在主机上安装iTunes时会发生什么,以及它是如何实现诸如从设备复制文件之类的操作的。

如上所述,由于Storage对象中的限制,WPD API将仅在iPhone上提供有限的操作子集,然而,当安装iTunes后,它增加了一个不同的层,可以更全面地访问设备。

正如我们在AppleLowerFilter中看到的,一旦iTunes被安装,它将允许设备选择一个不同的USB配置描述符。没有iTunes,我们被限制在配置1,另一方面,一旦iTunes被默认安装,选择的配置将是3。以下是这两种配置及其接口:

18.png

选择配置3,将使usbccgp生成deviceID USB\VID_xxxx&PID_yyyy&MI_01(01从bInterfaceNumber中提取)。这些deviceid是在appleusb中定义的。它定义了以下文件的副本:

19.png

这两个驱动程序将成为被苹果公司称为“苹果移动设备USB设备”设备的一部分,该设备使用专有协议而不是MTP或PTP与iPhone进行通信,可以通过查看libimobiledevice的源代码来了解有关该协议的更多信息。一旦驱动程序安装并运行,iTunes本身就会使用标准WPD API调用和定制的苹果特定命令的组合与iPhone进行通信。这使得iTunes能够提供从设备中复制文件、管理应用程序和备份以及更新设备固件等功能。

下图提供了iPhone的整个设备堆栈的简化概述,包括安装iTunes和创建AppleUsbMux设备的场景:

20.jpg

总结

在本文中,我们探讨了苹果的USB低级过滤器是如何在Windows设备上工作的,以及它在提供不同体验方面的作用,还深入研究了Windows便携式设备(WPD)和用户模式驱动程序框架(UMDF)等主题,以更好地理解苹果设备堆栈的内部工作原理。

我们谈到WPD设备是如何初始化和设置的,这帮助我们了解了为什么WPD设备协议属性和Apple设备中接口描述符定义的类之间存在不匹配。我们还研究了WPD设备的Storage对象是如何设置的,以及它如何在不使用第三方软件的情况下在iPhone上操作的限制中发挥作用。最后,我们简要讨论了安装iTunes对苹果移动设备栈的影响,以及iTunes如何妥善管理设备内容。

苹果希望保护某些信息,限制与iPhone存储交互的现成选项,但如果有一个更混合的解决方案,用户可以在一定的限制下拥有更大的灵活性。虽然iTunes为管理iPhone内容提供了一个强大的解决方案,但有时安装第三方软件可能不是一个选择。然而,随着iTunes最近作为微软商店应用程序的发布,这种限制可能会减少。

文章翻译自:https://n4r1b.com/posts/2023/03/the-intersection-of-apples-usb-lower-filter-and-iphone-wpd-integration/如若转载,请注明原文地址
  • 分享至
取消

感谢您的支持,我会继续努力的!

扫码支持

打开微信扫一扫后点击右上角即可分享哟

发表评论

 
本站4hou.com,所使用的字体和图片文字等素材部分来源于原作者或互联网共享平台。如使用任何字体和图片文字有侵犯其版权所有方的,嘶吼将配合联系原作者核实,并做出删除处理。
©2024 北京嘶吼文化传媒有限公司 京ICP备16063439号-1 本站由 提供云计算服务