2011-04-29 66 views
3

我們正在考慮使用USB設備的供應商和產品ID(通過IOKit獲取)來解鎖應用程序的某些功能。我知道這些值可能會被欺騙,但我不確定在OSX上可以輕鬆完成這些操作。涉及欺騙供應商和產品ID的是什麼?這是非程序員可以輕鬆完成的事情嗎?USB供應商ID和產品ID值如何在OSX上被欺騙?

回答

1

非程序員不能這樣做。你可以做的是爲設備編寫一個內核擴展(一個IOKit驅動程序),它有一個匹配字典匹配的設備的供應商/產品ID,這會導致系統在此時自動加載內核擴展設備連接並傳遞設備對象的引用。驅動程序現在負責初始化設備並創建IOKit框架(用戶空間庫)與設備通信所必需的所有必要用戶空間信息。通常,Apple對大多數USB設備類都有默認的IOKit驅動程序(這就是爲什麼您不需要爲每個USB鼠標或鍵盤添加額外驅動程序的原因),但是如果找到更具體的驅動程序,則將使用該驅動程序。當創建用戶空間數據時,當然驅動程序可能會在有關供應商/產品ID的,導致用戶空間程序查看錯誤的值。由於IOKit是用C++編寫的,主要依賴於對象和對象的繼承,所以甚至不必從頭開始編寫驅動程序,而是可以繼承Apple的默認驅動程序,只需重寫一些方法並依賴超級實現。然而,編寫IOKit內核驅動程序並不那麼容易,即使是開發Mac軟件多年的人也可能不知道該怎麼做,而IOKit文檔是Apple提供的最差的文檔之一。

所以要回答你的問題:這可能嗎?是。這很容易嗎?不可以。非程序員可以這樣做嗎?當然不是,除非別人已經爲他們寫了一個可以使用的擴展,他們只需要安裝。

0

由於沒有人回答到目前爲止,我偶然發現了a page,它基本上說你可以得到一個Arduino並編程它返回你想要的任何VID/PID /序列。我仍然無法找到任何純軟件的方法來做到這一點。

1

我懷疑這對於創建一個在內核空間中創建合理實際的IOUSBDevice對象的kext是相當容易的(對於程序員來說)。但是,一旦完成,任何人都可以加載它。

也可以使用AppleUSBMergeNub構建無代碼Kext來僞裝設備作爲另一個設備(雖然我沒有測試過它,但它看起來可能工作,假設您只嘗試匹配IOUSBDevice而不實際使用它)。

只需在用戶空間中劫持您的API調用併爲您的軟件提供預期的答案可能會更容易。

-1

我可以在Delphi代碼中創建一個OCX來做到這一點 並提供信息發送/接收數據到USB與其他狀態,如: - 它仍然連接。

Natraly我需要比從其他產品連接相同芯片的情況稍微詳細一些。 示例frendly名稱,設備描述.............

1

這實際上是相當容易的,我絕對不是程序員!

發現這裏的引導 http://rolande.wordpress.com/2012/10/25/getting-the-aten-usb-serial-adapter-working-with-mac-osx-lion

謝謝,羅朗德!

我能夠更改我在eBay上購買的USB以太網適配器的ID,以便在Mac OS X 10.8中使用另一個驅動程序。

+1

這不會改變硬件上的實際供應商/產品ID,也不會通過軟件欺騙它們。它只是改變特定kext期望看到的ID。 – bug 2014-01-23 14:56:27

相關問題