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