伪造的USB设备序列号


9

我有一部通过USB连接到PC的手机。

使用查看设备信息时

sudo udevadm info --attribute-walk

产品和供应商ID显示正常,但没有ATTR {serial}。我正在使用的应用程序(Android adb)需要设备报告序列号才能正常工作。

有什么方法可以伪造设备的序列号,例如使用udev规则?

说明:问题不在于如何获取 USB设备的序列号,而在于如何设置序列号。

我有一部Android手机,该手机无法通过USB报告序列号,而adb工具对此却不太喜欢。到目前为止,似乎还没有任何简单的解决方案。但是,有时候,只需购买合适的Android手机进行开发就非常容易。


它是Android手机吗?否则,adb将无法正常工作。
基思

adb实际上没有从udev获取此信息。可能是通过sysfs,或直接从设备。考虑修补adb,这可能是最简单的方法。
derobert

Answers:


1

首先,确保设备没有报告序列号确实是问题所在。adb devices如果没有允许访问对应设备的权限,它将列出序列号为所有问号/dev/bus/usb/。还请记住,adb启动了服务器,您可能需要终止该服务器才能重新进行探测。

假设设备确实存在问题,我迅速检查了adb源代码。它出现register_devicecore/adb/usb_linux.c直接从设备读取序列号中。core/adb/usb_libusb.c调用libusb_get_device_descriptor以执行此操作,该操作(检查libusb源代码)从sysfs或直接从设备获取。因此,不幸的是,没有udev骗局会有所帮助。

您的选择似乎是:

  • 弄清楚如何使adb在没有序列号的情况下工作。可能是补丁程序adb(它是开源的)。我认为这是堆栈溢出的一个问题。
  • 修补内核usbfs驱动程序以伪造对adb请求的响应。这听起来比向我修补adb困难得多。
  • 修补内核以允许伪造syfs中的序列号(假设adb使用libusb)。
  • 修复损坏的硬件。

谢谢-这可以解释。就我而言,修复损坏的硬件比较容易(购买更好的硬件)。
2013年

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规则,但是有什么方法可以编写更改序列号的规则?
2013年

对于您的特定手机不知道,但是根据我的经验,一旦设置了udev规则(并且您adb start-server以root身份或使用sudo 运行),adb将能够自行读取序列号。
德雷克·克拉里斯2013年

0

可能不是串行而是FTDI,因此您可以尝试以下方式:

1)获取序列号

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

2)创建规则,并用找到的序列或FAKE序列替换XXXXXXXX

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
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.