Поддельный серийный номер USB-устройства


9

У меня есть мобильный телефон, подключенный к ПК через USB.

При просмотре информации об устройстве с помощью

sudo udevadm info --attribute-walk

идентификатор продукта и поставщика отображается нормально, но нет ATTR {serial} . Приложение, которое я использую (Android ADB), нуждается в устройстве, чтобы сообщить серийный номер, чтобы работать должным образом.

Есть ли способ подделать серийный номер устройства, например, с помощью правила udev?

Пояснение: Вопрос не в том, как получить серийный номер устройства USB, а в том, как установить серийный номер.

У меня был телефон Android, который не сообщает серийный номер через USB, и инструмент adb не очень понравился. Пока что не существует простого решения для этого. Однако в наши дни очень просто купить подходящий телефон Android для разработки.


Это телефон на андроид? Если нет, ADB не будет работать, в любом случае.
— Кит

Я предполагаю, что adb на самом деле не получает эту информацию от udev. Возможно, вместо sysfs или напрямую с устройства. Рассмотрим исправление adb, возможно, самый простой подход.
— Дероберт

Ответы:


1

Во-первых, убедитесь, что устройство, не сообщающее серийный номер, действительно является проблемой. adb devicesперечислит серийный номер как все вопросительные знаки, если у него нет разрешения на доступ к соответствующему устройству под /dev/bus/usb/. Также запомните, что adb запускает сервер, вам может потребоваться убить его, чтобы заново его проверить.

Предполагая, что это действительно проблема с устройством, я быстро проверил исходный код adb. Появляется register_deviceв core/adb/usb_linux.cсчитывает серийный номер прямо с устройства. core/adb/usb_libusb.cвызывает libusb_get_device_descriptorдля этого, который (проверка исходного кода libusb) захватывает его из sysfs или непосредственно с устройства. Так что никакая хитрость udev не поможет, к сожалению.

Ваш выбор будет выглядеть так:

  • разберись как заставить работать adb без серийного номера. Возможно, патч adb(это с открытым исходным кодом). Это вопрос больше к переполнению стека, я думаю.
  • патч к драйверу ядра usbfs для фальсификации ответа на запрос adb. Это звучит намного сложнее, чем исправление ADB для меня.
  • исправьте ядро, чтобы разрешить подделку serial # в syfs, предполагая, что adb использует libusb.
  • исправить сломанное оборудование.

Спасибо - это объясняет В моем случае починка сломанного оборудования была проще (покупка лучшего оборудования).
— Ральф

1

Если вы знаете узел устройства конкретного устройства (например, / dev / sdb), вы можете найти его с помощью следующей команды: udevadm info -a -p $(udevadm info -q path -n /dev/sdb)

Обычно, если вы пытаетесь создать пользовательское правило в /etc/udev/rules.d/51-android.rules для устройств Android, запись lsusbв вашем терминале будет отображать что-то вроде Bus 002 Device 004: ID 062a:3270 Creative Labs . Четыре символа после «ID» - в данном случае это будет 062aиспользовано - используются для обозначения конкретного idVendorфайла.


Это помогает при написании правил udev, но есть ли способ написать правило, которое изменяет серийный номер?
— Ральф

Не знаю для вашего конкретного телефона, но по моему опыту, как только правила udev установлены (и вы запускаете adb start-serverот имени root или используете sudo), adb сможет читать серийный номер самостоятельно.
— Дрейк Кларрис

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. Это мало используемое поле в дескрипторе устройства вместе с идентификатором производителя и продукта. Он должен быть уникальным для каждого устройства, но не является обязательным в спецификации USB. Нет ответа на то, как это подделать Я бы наверное
— исправил
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.