【发布时间】:2011-04-29 11:08:03
【问题描述】:
我们正在考虑使用 USB 设备的供应商和产品 ID(通过 IOKit 获得)来解锁应用程序的某些功能。我知道这些值可能会被欺骗,但我不确定在 OSX 上它有多容易完成。欺骗供应商和产品 ID 涉及什么?非程序员可以轻松做到吗?
【问题讨论】:
标签: security macos usb spoofing
我们正在考虑使用 USB 设备的供应商和产品 ID(通过 IOKit 获得)来解锁应用程序的某些功能。我知道这些值可能会被欺骗,但我不确定在 OSX 上它有多容易完成。欺骗供应商和产品 ID 涉及什么?非程序员可以轻松做到吗?
【问题讨论】:
标签: security macos usb spoofing
我怀疑(对于程序员来说)创建一个在内核空间中创建一个相当逼真的 IOUSBDevice 对象的 kext 会相当容易。但是,一旦完成,任何人都可以加载它。
也可以使用 AppleUSBMergeNub 构建无代码 kext 以将设备伪装成另一个设备(虽然我没有对此进行测试,但看起来它可能有效,假设您只尝试匹配 IOUSBDevice 而不实际使用它) .
在用户空间中劫持您的 API 调用并为您的软件提供预期的答案可能会更容易。
【讨论】:
非程序员无法做到这一点。你可以做的是为设备编写一个内核扩展(一个 IOKit 驱动程序),它有一个匹配设备的 real vendor-/product-ID 的匹配字典,这会导致系统自动加载连接此设备时的内核扩展并传递对设备对象的引用。驱动程序现在负责初始化设备并创建 IOKit 框架(用户空间库)与设备通信所需的所有必要用户空间信息。通常 Apple 为大多数 USB 设备类提供默认的 IOKit 驱动程序(这就是为什么您不需要为每个 USB 鼠标或键盘添加额外的驱动程序),但如果找到更具体的驱动程序,则将使用此驱动程序。并且在创建用户空间数据时,驱动程序当然可能撒谎关于供应商-/产品-ID,导致用户空间程序看到错误值。由于 IOKit 是用 C++ 编写的,并且严重依赖对象和对象继承,因此甚至不需要从头编写驱动程序,而是可以从 Apple 的默认驱动程序继承,只需覆盖一些方法,否则依赖于超级实现。然而,编写 IOKit 内核驱动程序并不是那么容易,即使是开发 Mac 软件多年的人也可能不知道如何做到这一点,而 IOKit 文档是 Apple 提供的最糟糕的文档之一。
所以回答你的问题:有可能吗?是的。这很容易吗?不,非程序员可以做到吗?当然不是,除非其他人为他们编写了一个随时可用的扩展,否则他们只需要安装。
【讨论】:
其实很简单,我绝对不是程序员!
谢谢,罗兰德!
我能够更改我在 eBay 上购买的 USB 以太网适配器的 ID,以便在 Mac OS X 10.8 上使用另一个驱动程序。
【讨论】:
由于到目前为止没有人回答,我偶然发现了a page,它基本上说你可以得到一个 Arduino 并对其进行编程以返回你想要的任何 VID/PID/序列。我仍然找不到任何纯软件方式来执行此操作。
【讨论】:
我可以在 Delphi 代码中创建一个 OCX 来做到这一点 并提供信息以向 USB 发送/接收数据,其他状态如下:- 它是否仍然连接。
当然,如果同一个芯片是从另一个产品连接的,我需要更多的细节。 例如友好名称、设备描述......
【讨论】: