USBデバイスの偽のシリアル番号


9

USB経由でPCに携帯電話を接続しています。

を使用してデバイス情報を表示する場合

sudo udevadm info --attribute-walk

製品とベンダーIDは問題なく表示されますが、ATTR {serial}はありません。私が使用しているアプリケーション(Android adb)が正常に動作するには、デバイスがシリアル番号を報告する必要があります。

たとえばudevルールを使用して、デバイスのシリアル番号を偽造できる方法はありますか?

明確化:問題は、USBデバイスのシリアル番号を取得する方法ではなく、シリアル番号を設定する方法です。

USB経由でシリアル番号を報告しないAndroidフォンを持っていましたが、adbツールはこれをあまり好きではありませんでした。これまでのところ、これに対する簡単な解決策はないようです。ただし、適切なAndroidスマートフォンを開発用に購入することは非常に簡単です。


Androidフォンですか?そうでなければ、とにかくadbは機能しません。
Keith、

私はよ推測 ADBは実際のudevからこの情報を取得しないこと。おそらく代わりにsysfsから、またはデバイスから直接。おそらく最も簡単なアプローチであるadbへのパッチ適用を検​​討してください。
derobert 2013年

回答:


1

まず、シリアル番号を報告していないデバイスが本当に問題であることを確認します。adb devicesで対応するデバイスにアクセスする権限がない場合、シリアル番号がすべて疑問符として表示され/dev/bus/usb/ます。また、adbがサーバーを起動することを思い出してください。サーバーを再プローブするには、それを強制終了する必要がある場合があります。

それが本当にデバイスの問題であると想定して、私はすぐにadbソースコードをチェックしました。これは、デバイスから直接シリアル番号register_devicecore/adb/usb_linux.c読み取ります。(libusbソースコードをチェックする)sysfsから、またはデバイスから直接、それを取得するためのcore/adb/usb_libusb.c呼び出しlibusb_get_device_descriptor。残念ながら、udevの手口は役に立ちません。

あなたの選択は次のようになるでしょう:

  • シリアル番号なしでadbを機能させる方法を理解します。おそらく、パッチadb(それはオープンソースです)。これはスタックオーバーフローの問題だと思います。
  • カーネルのusbfsドライバーにパッチを適用して、adbの要求に対する応答を偽装します。これは、adbにパッチを当てるよりもはるかに難しいように思えます。
  • adbがlibusbを使用していると想定して、syfsでシリアル番号を偽造できるようにカーネルにパッチを適用します。
  • 壊れたハードウェアを修正します。

ありがとう-これはそれを説明します。私の場合、壊れたハードウェアを修正する方が簡単でした(より優れたハードウェアを購入する)。
ラルフ

1

特定のデバイス(例:/ dev / sdb)のデバイスノードがわかっている場合は、次のコマンドで検索できます。 udevadm info -a -p $(udevadm info -q path -n /dev/sdb)

通常、Androidデバイスの/etc/udev/rules.d/51-android.rulesにカスタムルールを作成しようとしている場合lsusb、端末に書き込むと次のように表示されますBus 002 Device 004: ID 062a:3270 Creative Labs 。「ID」の後の4文字(この場合はIDです)062aは、idVendorそのファイル内の特定を示すために使用されます。


これはudevルールの作成に役立ちますが、シリアル番号を変更するルールを作成する方法はありますか?
ラルフ

特定の電話についてはわかりませんが、私の経験では、udevルールが設定されると(adb start-serverルートとして実行されるか、sudoを使用して)、adbはシリアル番号を自分で読み取ることができます。
Drake Clarris、2013年

0

おそらくシリアルではなくFTDIなので、次のように試すことができます。

1)シリアルを入手する

sudo udevadm info --attribute-walk -n /dev/ttyUSB0  | sed -n '/FTDI/,/serial/p'

2)ルールを作成し、XXXXXXXXを見つけたシリアルまたはFAKEシリアルに置き換えます

sudo echo 'SUBSYSTEM=="tty", ATTRS{serial}=="XXXXXXXX", GROUP="users", MODE="0660", SYMLINK+="myusbphone"' | sudo tee /etc/udev/rules.d/99-myusbphone.rules

3)ルールをリロードします

sudo udevadm control --reload-rules

この場合は、この記事の作成者に連絡してください


OPがシリアルプロトコルについて話しているのではなく、USBデバイスのシリアル番号について話していると思います。これは、ベンダーおよび製品IDとともに、デバイス記述子で少し使用されるフィールドです。各デバイスに固有であることが想定されていますが、USB仕様では必須ではありません。それを偽造する方法の答えはありません、申し訳ありません。私はおそらくカーネルにパッチを当てるだろう...
ali1234
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.