Fałszywy numer seryjny urządzenia USB

9

Mam telefon komórkowy podłączony do mojego komputera przez USB.

Podczas przeglądania informacji o urządzeniu za pomocą

sudo udevadm info --attribute-walk

identyfikator produktu i dostawcy pokazuje się dobrze, ale nie ma ATTR {serial} . Aplikacja, której używam (Android adb) potrzebuje urządzenia do zgłaszania numeru seryjnego, aby działać poprawnie.

Czy jest jakiś sposób na sfałszowanie numeru seryjnego urządzenia, na przykład za pomocą reguły udev?

Wyjaśnienie: Pytanie nie dotyczy tego, jak uzyskać numer seryjny urządzenia USB, ale jak ustawić numer seryjny.

Miałem telefon z Androidem, który nie zgłasza numeru seryjnego przez USB, a narzędziu adb nie podobało się to zbytnio. Jak dotąd wydaje się, że nie ma na to żadnego prostego rozwiązania. Jednak w dzisiejszych czasach bardzo łatwo jest po prostu kupić odpowiedni telefon z Androidem do programowania.

Ralf
źródło
Czy to telefon z Androidem? Jeśli nie, adb i tak nie będzie działać.
Keith,
Jestem zgadywania , że adb nie rzeczywiście dostać to info z udev. Prawdopodobnie z sysfs zamiast lub bezpośrednio z urządzenia. Zastanów się nad łataniem adb, prawdopodobnie najłatwiejszym podejściem.
derobert

Odpowiedzi:

1

Po pierwsze, upewnij się, że problem z urządzeniem, który nie zgłasza numeru seryjnego. adb deviceswyświetli numer seryjny jako wszystkie znaki zapytania, jeśli nie ma uprawnień dostępu do odpowiedniego urządzenia pod /dev/bus/usb/. Pamiętaj też, że adb uruchamia serwer, być może będziesz musiał go zabić, aby ponownie go sondować.

Zakładając, że to naprawdę problem z urządzeniem, szybko sprawdziłem kod źródłowy adb. Pojawia się register_devicew core/adb/usb_linux.cwczytuje numer seryjny prosto z urządzenia. core/adb/usb_libusb.cwywołań, libusb_get_device_descriptoraby to zrobić, co (sprawdzenie kodu źródłowego libusb) pobiera go z sysfs lub bezpośrednio z urządzenia. Więc niestety żadne sztuczki udev nie pomogą.

Twoje wybory wydają się być:

  • dowiedzieć się, jak sprawić, by adb działał bez numeru seryjnego. Prawdopodobnie łatka adb(jest to oprogramowanie typu open source). To pytanie dotyczy bardziej przepełnienia stosu.
  • łatka do sterownika usbfs jądra, aby sfałszować odpowiedź na żądanie adb. To brzmi o wiele trudniej niż łatanie adb.
  • załataj jądro, aby umożliwić sfałszowanie numeru seryjnego w syfs, zakładając, że adb używa libusb.
  • naprawić zepsuty sprzęt.
derobert
źródło
Dzięki - to wyjaśnia. W moim przypadku naprawienie uszkodzonego sprzętu było łatwiejsze (zakup lepszego sprzętu).
Ralf
1

Jeśli znasz węzeł urządzenia określonego urządzenia (np. / Dev / sdb), możesz to sprawdzić za pomocą następującego polecenia: udevadm info -a -p $(udevadm info -q path -n /dev/sdb)

Zwykle, jeśli próbujesz utworzyć niestandardową regułę w /etc/udev/rules.d/51-android.rules dla urządzeń z Androidem, pisanie lsusbw twoim terminalu wyświetli coś podobnego Bus 002 Device 004: ID 062a:3270 Creative Labs . Cztery znaki po „ID” - w tym przypadku byłoby to 062a- służą do wskazania określonego idVendorw tym pliku.

ILMostro_7
źródło
Pomaga to w pisaniu reguł udev, ale czy jest jakiś sposób na napisanie reguły, która zmienia numer seryjny?
Ralf
Nie wiem dla twojego konkretnego telefonu, ale z mojego doświadczenia wynika, że ​​po ustawieniu reguł udev (i uruchomisz adb start-serverjako root lub używasz sudo), adb będzie w stanie samodzielnie odczytać numer seryjny.
Drake Clarris
0

Prawdopodobnie nie jest to serial, ale FTDI, więc możesz spróbować w ten sposób:

1) Zdobądź serial

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

2) Utwórz regułę i zastąp XXXXXXXX znalezionym numerem seryjnym lub numerem seryjnym FAKE

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

3) Załaduj ponownie zasady

sudo udevadm control --reload-rules

.

W takim przypadku spróbuj skontaktować się z autorem tego artykułu .

tmow
źródło
Nie sądzę, że OP mówi o protokole szeregowym, ale o numerze seryjnym urządzenia USB. To mało używane pole w deskryptorze urządzenia wraz z identyfikatorami dostawcy i produktu. Powinien być unikalny dla każdego urządzenia, ale nie jest obowiązkowy w specyfikacji USB. Niestety, nie ma odpowiedzi na pytanie, jak to sfałszować. Prawdopodobnie
załatałbym