Gefälschte Seriennummer des USB-Geräts

9

Ich habe ein Mobiltelefon über USB an meinen PC angeschlossen.

Beim Anzeigen der Geräteinformationen mit

sudo udevadm info --attribute-walk

Die Produkt- und Lieferanten- IDs werden ordnungsgemäß angezeigt , es gibt jedoch keine ATTR {serial} . Für eine von mir verwendete Anwendung (Android adb) muss das Gerät eine Seriennummer melden, damit sie ordnungsgemäß funktioniert.

Gibt es eine Möglichkeit, die Seriennummer des Geräts zu fälschen, beispielsweise mithilfe einer udev-Regel?

Erläuterung: Die Frage ist nicht, wie Sie die Seriennummer des USB-Geräts erhalten, sondern wie Sie die Seriennummer einstellen .

Ich hatte ein Android-Handy, das keine Seriennummer über USB meldet, und das ADB-Tool mochte dies nicht allzu sehr. Bisher scheint es dafür keine einfache Lösung zu geben. Heutzutage ist es jedoch sehr einfach, ein geeignetes Android-Handy für die Entwicklung zu kaufen.

Ralf
quelle
Ist es ein Android-Handy? Wenn nicht, funktioniert adb sowieso nicht.
Keith
Ich vermute, dass adb diese Informationen nicht von udev erhält. Wahrscheinlich stattdessen von sysfs oder direkt vom Gerät. Betrachten Sie das Patchen von adb, wahrscheinlich der einfachste Ansatz.
Derobert

Antworten:

1

Stellen Sie zunächst sicher, dass das Gerät, das keine Seriennummer meldet, wirklich das Problem ist. adb deviceslistet die Seriennummer als alle Fragezeichen auf, wenn keine Berechtigung zum Zugriff auf das entsprechende Gerät unter vorhanden ist /dev/bus/usb/. Denken Sie auch daran, dass adb einen Server startet. Möglicherweise müssen Sie diesen beenden, damit er erneut getestet wird.

Angenommen, es ist wirklich ein Problem mit dem Gerät, habe ich den adb-Quellcode schnell überprüft. Es erscheint register_devicein core/adb/usb_linux.cliest die Seriennummer direkt vom Gerät. core/adb/usb_libusb.cruft libusb_get_device_descriptordazu auf, was (Überprüfung des libusb-Quellcodes) es von sysfs oder direkt vom Gerät abruft. Leider hilft kein udev-Trick.

Ihre Wahl scheint zu sein:

  • Finden Sie heraus, wie adb ohne Seriennummer funktioniert. Möglicherweise Patch adb(es ist Open Source). Dies ist eine Frage mehr für Stack Overflow, denke ich.
  • Patch auf den Kernel-USBFS-Treiber, um eine Antwort auf die Anfrage von adb zu fälschen. Das klingt für mich viel schwieriger als adb zu patchen.
  • Patchen Sie den Kernel, um das Fälschen der Seriennummer in syfs zu ermöglichen, vorausgesetzt, adb verwendet libusb.
  • Beheben Sie die defekte Hardware.
derobert
quelle
Danke - das erklärt es. In meinem Fall war es einfacher, die defekte Hardware zu reparieren (bessere Hardware zu kaufen).
Ralf
1

Wenn Sie den Geräteknoten des jeweiligen Geräts kennen (z. B. / dev / sdb), können Sie ihn mit dem folgenden Befehl nachschlagen: udevadm info -a -p $(udevadm info -q path -n /dev/sdb)

Wenn Sie versuchen, eine benutzerdefinierte Regel in /etc/udev/rules.d/51-android.rules für Android-Geräte zu erstellen, wird beim Schreiben lsusbin Ihrem Terminal normalerweise Folgendes angezeigt Bus 002 Device 004: ID 062a:3270 Creative Labs . Die vier Zeichen nach "ID" - in diesem Fall wäre es 062a- werden verwendet, um das Spezifische idVendorin dieser Datei anzugeben .

ILMostro_7
quelle
Das hilft beim Schreiben von udev-Regeln, aber gibt es eine Möglichkeit, eine Regel zu schreiben, die die Seriennummer ändert?
Ralf
Ich weiß es nicht für Ihr bestimmtes Telefon, aber meiner Erfahrung nach adb start-serverkann adb die Seriennummer selbst lesen, sobald die udev-Regeln festgelegt sind (und Sie als root oder mit sudo ausgeführt werden).
Drake Clarris
0

Wahrscheinlich ist es nicht seriell, sondern FTDI, also können Sie es folgendermaßen versuchen:

1) Holen Sie sich die Seriennummer

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

2) Erstellen Sie die Regel und ersetzen Sie die XXXXXXXX durch die gefundene Seriennummer oder eine FAKE-Seriennummer

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

3) Laden Sie die Regeln neu

sudo udevadm control --reload-rules

.

Versuchen Sie in diesem Fall, den Autor dieses Artikels zu kontaktieren .

tmow
quelle
Ich denke nicht, dass OP über das serielle Protokoll spricht, sondern über die Seriennummer des USB-Geräts. Dies ist ein wenig verwendetes Feld im Gerätedeskriptor zusammen mit Hersteller- und Produkt-IDs. Es soll für jedes Gerät einzigartig sein, ist jedoch in der USB-Spezifikation nicht obligatorisch. Keine Antwort, wie man es vortäuscht, sorry. Ich würde wahrscheinlich den Kernel patchen ...
ali1234