4

USB デバイスのベンダー ID と製品 ID (IOKit 経由で取得) を使用して、アプリケーションの特定の機能のロックを解除することを検討しています。これらの値がスプーフィングされる可能性があることは承知していますが、OSX 上でどれだけ簡単に偽装できるかはわかりません。ベンダーと製品 ID のスプーフィングには何が関係していますか? プログラマーでなくても簡単にできることですか?

4

5 に答える 5

2

かなり現実的な IOUSBDevice オブジェクトをカーネル空間に作成する kext を作成するのは (プログラマーにとって) かなり簡単だと思います。ただし、一度実行すると、誰でもそれをロードできます。

AppleUSBMergeNub を使用してデバイスを別のデバイスに偽装するコードレス kext を構築することも可能かもしれません (私はこれをテストしていませんが、IOUSBDevice を実際に使用せずに一致させようとすると、うまくいくようです)。

ユーザー空間で API 呼び出しをハイジャックして、ソフトウェアに期待する答えを与える方がおそらく簡単でしょう。

于 2011-05-02T09:54:08.997 に答える
1

非プログラマーはそれを行うことはできません。あなたができることは、実際のものと一致する一致する辞書を持つ、デバイスのカーネル拡張 (IOKit ドライバー) を作成することです。デバイスのベンダー/製品 ID。これにより、このデバイスが接続されたときにシステムが自動的にカーネル拡張機能をロードし、デバイス オブジェクトへの参照を渡します。ドライバーは、デバイスの初期化を担当し、IOKit フレームワーク (ユーザー空間ライブラリ) がデバイスと通信するために必要なすべてのユーザー空間情報を作成します。通常、Apple はほとんどの USB デバイス クラスに対してデフォルトの IOKit ドライバーを用意しています (そのため、たとえば、すべての USB マウスやキーボードに追加のドライバーは必要ありません) が、より具体的なドライバーが見つかった場合は、代わりにこのドライバーが使用されます。そして、ユーザー空間のデータを作成するとき、もちろんドライバーは嘘をつくかもしれませんvendor-/product-ID について、ユーザー空間プログラムに誤った値が表示される原因となります。IOKit は C++ で記述されており、オブジェクトとオブジェクトの継承に大きく依存しているため、ドライバを最初から記述する必要さえありませんが、代わりに Apple のデフォルト ドライバから継承し、いくつかのメソッドをオーバーライドするだけで、スーパー実装に依存することができます。ただし、IOKit カーネル ドライバーを作成するのはそれほど簡単ではありません。何年も Mac ソフトウェアを開発している人々でさえ、その方法がわからない可能性があります。また、IOKit のドキュメントは、Apple が提供する最悪のものの 1 つです。

だからあなたの質問に答えるために:それは可能ですか?はい。それはかなり簡単ですか?いいえ、プログラマーでなくてもできますか? 確かに、他の誰かがすぐに使用できる拡張機能を作成していない限り、インストールするだけでよいわけではありません。

于 2011-05-03T13:02:32.833 に答える
0

これまで誰も回答していないので、基本的にArduinoを入手して、必要なVID / PID /シリアルを返すようにプログラムできると書かれているページに出くわしました。これを行うためのソフトウェアのみの方法はまだ見つかりません。

于 2011-05-02T06:30:55.250 に答える
-2

それを行うために Delphi コードで OCX を作成し、次のような他の状態で USB にデータを送受信するための情報を提供できます。- まだ接続されていますか。

当然、別の製品から同じチップが接続されている場合は、もう少し詳細が必要です。わかりやすい名前、デバイスの説明の例......................

于 2011-05-17T02:05:32.453 に答える