USB デバイスのベンダー ID と製品 ID (IOKit 経由で取得) を使用して、アプリケーションの特定の機能のロックを解除することを検討しています。これらの値がスプーフィングされる可能性があることは承知していますが、OSX 上でどれだけ簡単に偽装できるかはわかりません。ベンダーと製品 ID のスプーフィングには何が関係していますか? プログラマーでなくても簡単にできることですか?
5 に答える
かなり現実的な IOUSBDevice オブジェクトをカーネル空間に作成する kext を作成するのは (プログラマーにとって) かなり簡単だと思います。ただし、一度実行すると、誰でもそれをロードできます。
AppleUSBMergeNub を使用してデバイスを別のデバイスに偽装するコードレス kext を構築することも可能かもしれません (私はこれをテストしていませんが、IOUSBDevice を実際に使用せずに一致させようとすると、うまくいくようです)。
ユーザー空間で API 呼び出しをハイジャックして、ソフトウェアに期待する答えを与える方がおそらく簡単でしょう。
非プログラマーはそれを行うことはできません。あなたができることは、実際のものと一致する一致する辞書を持つ、デバイスのカーネル拡張 (IOKit ドライバー) を作成することです。デバイスのベンダー/製品 ID。これにより、このデバイスが接続されたときにシステムが自動的にカーネル拡張機能をロードし、デバイス オブジェクトへの参照を渡します。ドライバーは、デバイスの初期化を担当し、IOKit フレームワーク (ユーザー空間ライブラリ) がデバイスと通信するために必要なすべてのユーザー空間情報を作成します。通常、Apple はほとんどの USB デバイス クラスに対してデフォルトの IOKit ドライバーを用意しています (そのため、たとえば、すべての USB マウスやキーボードに追加のドライバーは必要ありません) が、より具体的なドライバーが見つかった場合は、代わりにこのドライバーが使用されます。そして、ユーザー空間のデータを作成するとき、もちろんドライバーは嘘をつくかもしれませんvendor-/product-ID について、ユーザー空間プログラムに誤った値が表示される原因となります。IOKit は C++ で記述されており、オブジェクトとオブジェクトの継承に大きく依存しているため、ドライバを最初から記述する必要さえありませんが、代わりに Apple のデフォルト ドライバから継承し、いくつかのメソッドをオーバーライドするだけで、スーパー実装に依存することができます。ただし、IOKit カーネル ドライバーを作成するのはそれほど簡単ではありません。何年も Mac ソフトウェアを開発している人々でさえ、その方法がわからない可能性があります。また、IOKit のドキュメントは、Apple が提供する最悪のものの 1 つです。
だからあなたの質問に答えるために:それは可能ですか?はい。それはかなり簡単ですか?いいえ、プログラマーでなくてもできますか? 確かに、他の誰かがすぐに使用できる拡張機能を作成していない限り、インストールするだけでよいわけではありません。
これまで誰も回答していないので、基本的にArduinoを入手して、必要なVID / PID /シリアルを返すようにプログラムできると書かれているページに出くわしました。これを行うためのソフトウェアのみの方法はまだ見つかりません。
それを行うために Delphi コードで OCX を作成し、次のような他の状態で USB にデータを送受信するための情報を提供できます。- まだ接続されていますか。
当然、別の製品から同じチップが接続されている場合は、もう少し詳細が必要です。わかりやすい名前、デバイスの説明の例......................