หมายเลขซีเรียลปลอมของอุปกรณ์ USB


9

ฉันมีโทรศัพท์มือถือเชื่อมต่อกับพีซีผ่าน USB

เมื่อดูข้อมูลอุปกรณ์โดยใช้

sudo udevadm info --attribute-walk

ผลิตภัณฑ์และรหัสผู้ให้บริการแสดงขึ้นดี แต่ไม่มีATTR {} แอปพลิเคชันที่ฉันใช้ (Android adb) ต้องการให้อุปกรณ์รายงานหมายเลขซีเรียลเพื่อให้ทำงานได้อย่างถูกต้อง

มีวิธีใดบ้างที่ฉันสามารถปลอมหมายเลขซีเรียลของอุปกรณ์ตัวอย่างเช่นโดยใช้กฎ udev

การชี้แจง:คำถามไม่ได้อยู่ที่วิธีรับหมายเลขซีเรียลของอุปกรณ์ USB แต่เกี่ยวกับวิธีตั้งค่าหมายเลขซีเรียล

ฉันมีโทรศัพท์ Android ที่ไม่ได้รายงานหมายเลขซีเรียลผ่าน USB และเครื่องมือ adb ไม่ชอบสิ่งนี้มากเกินไป จนถึงขณะนี้ดูเหมือนจะไม่ได้มีทางออกที่ง่ายสำหรับเรื่องนี้ อย่างไรก็ตามมีวันที่ง่ายมากที่จะซื้อโทรศัพท์ Android ที่เหมาะสมสำหรับการพัฒนา


มันเป็นโทรศัพท์ Android หรือไม่? ถ้าไม่ adb จะไม่ทำงาน
Keith

ฉันเดาว่า adb ไม่ได้รับข้อมูลนี้จริงจาก udev อาจมาจาก sysfs แทนหรือโดยตรงจากอุปกรณ์ พิจารณาการแก้ไข adb อาจเป็นวิธีที่ง่ายที่สุด
Derobert

คำตอบ:


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(มันเป็นโอเพนซอร์ส) นี่เป็นคำถามเพิ่มเติมสำหรับ Stack Overflow ฉันคิดว่า
  • แพทช์ไปยังไดรเวอร์ usbfs ของเคอร์เนลเพื่อปลอมการตอบสนองต่อคำขอของ adb ฟังดูยากกว่าการ patch adb มาให้ฉัน
  • แก้ไขเคอร์เนลเพื่ออนุญาตให้แกล้งซีเรียล # ใน Syfs สมมติว่า adb ใช้ libusb
  • แก้ไขฮาร์ดแวร์ที่ชำรุด

ขอบคุณ - นี่มันอธิบาย ในกรณีของฉันการแก้ไขฮาร์ดแวร์ที่เสียหายนั้นง่ายกว่า (ซื้อฮาร์ดแวร์ที่ดีกว่า)
Ralf

1

หากคุณรู้จักโหนดอุปกรณ์ของอุปกรณ์เฉพาะ (เช่น / dev / sdb) คุณสามารถค้นหาได้ด้วยคำสั่งต่อไปนี้: udevadm info -a -p $(udevadm info -q path -n /dev/sdb)

โดยปกติแล้วถ้าคุณกำลังพยายามที่จะสร้างกฎที่กำหนดเองใน /etc/udev/rules.d/51-android.rules สำหรับอุปกรณ์ Android, เขียนlsusbในสิ่งที่จะแสดง terminal Bus 002 Device 004: ID 062a:3270 Creative Labs ของคุณเช่น อักขระสี่ตัวหลัง "ID" - ในกรณีนี้จะเป็น - 062aใช้เพื่อระบุเฉพาะidVendorภายในไฟล์นั้น


ที่ช่วยในการเขียนกฎ udev แต่มีวิธีการเขียนกฎที่เปลี่ยนหมายเลขหรือไม่
Ralf

ไม่ทราบสำหรับโทรศัพท์เฉพาะของคุณ แต่จากประสบการณ์ของฉันเมื่อตั้งกฎ udev (และคุณเรียกใช้adb start-serverในฐานะรูทหรือใช้ sudo) adb จะสามารถอ่านหมายเลขซีเรียลได้เอง
Drake Clarris

0

อาจไม่ใช่อนุกรม แต่เป็น FTDI ดังนั้นคุณสามารถลองวิธีนี้ได้:

1) รับอนุกรม

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

2) สร้างกฎและแทนที่ 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 นั่นเป็นฟิลด์ที่ใช้เพียงเล็กน้อยในตัวให้คำอธิบายอุปกรณ์พร้อมกับผู้ขายและรหัสผลิตภัณฑ์ มันควรจะไม่ซ้ำกันสำหรับแต่ละอุปกรณ์ แต่ไม่จำเป็นในข้อกำหนด USB ไม่มีคำตอบสำหรับวิธีการปลอมมันขอโทษ ฉันอาจจะแก้ไขเคอร์เนล ...
ali1234
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.