USB hacka genom Reverse Engineering (3 / 12 steg)
Steg 3: Bestäm beskrivare
Det nästa bästa att göra när du har fastställt VID/PID-numret är att identifiera deskriptorn av enheten. En säkerhetsbeskrivning är ett slags "meny" med vad enheten kan göra och hur det gillar att överföra data. Varje enhet har i allmänhet en deskriptor. Ibland en enhet har mer än en deskriptor och du kan välja vilken som du vill men inte fruktansvärt vanligt så vi ska bara ignorera det. Ett fantastiskt sätt att få deskriptorn utan har till skriva någon programvara är att köra lsusb - vv på en linux-dator. Vi har inte hittat en motsvarighet för Windows eller Mac, så hitta en vän med en Linux-dator. (Prova verktyget "USB-Prober" från Apple för Mac OS X.)
Här är resultatet av lsusb för NUI Motor
Enhetsbeskrivningen:
bLength 18
bDescriptorType 1
bcdUSB 2,00
bDeviceClass 0 (definierade på gränssnittet nivå)
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 64
idVendor 0x045e Microsoft Corp.
idProduct 0x02b0
bcdDevice 1,05
iManufacturer 1 Microsoft
iProduct 2 Xbox NUI Motor
iSerial 0
bNumConfigurations 1
Konfiguration beskrivningen:
bLength 9
bDescriptorType 2
wTotalLength 18
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0xc0
Själv drivs
MaxPower 100mA
Interface beskrivningen:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 0
bInterfaceClass 255 specifika leverantörsklass
bInterfaceSubClass 0
bInterfaceProtocol 0
iInterface 0
Enhetsstatus: 0x0000
(Bussen driv)
Låt oss se vad vi har. Du kan se den VID- och PID där uppe. Därefter ska vi titta på bNumConfigurations (hur många olika beskrivningar vi har) och tur för oss är 1. Nästa, titta på gränssnittet deskriptorn i synnerhet bNumEndpoints som är 0. Detta innebär att det finns inga slutpunkter.
Slutpunkter är en typ av USB "data pipe" - det finns 4 typer:
Bulk slutpunkter är för överföring av en hel del data, som en hårddisk. Det är OK om det tar lite längre tid men vi vill att stora paket. Denna slutpunkt går endast i en riktning (så att läsa och skriva du två)
Avbryta slutpunkter är för överlämnande små mängder data mycket snabbt, som för en USB-mus. I det här fallet har enheten vara lyhörd så vi vill ha snabba rörelser. Denna slutpunkt går endast i en riktning
Isokrona slutpunkter med är för att överföra en hel del data där data måste Visa samtidigt och om det inte kan det bör bara släppas. Det är för saker som ljud och Video där timing är nyckel. Denna slutpunkt går endast i en riktning (så dubbelriktat ljud för hörlurar och mikrofon skulle ha två EPs)
Kontrollslutpunkter är här konstiga inte-helt-an-slutpunkten slutpunkt. De används för att överföra små mängder data att säga slå en enhet på eller av. De är väldigt "billigt" att utveckla, och varje enhet har en även om inte nämns.
En serieport kan till exempel ha två avbrott slutpunkter för överföring av data in och ut och sedan en kontrollslutpunkt för att ange baudvärde.
För mer information föreslår vi verkligen att läsa allt på lvr.com om USB-som det är komplexa.
Denna motor enheten har inga slutpunkter, men det betyder inte att du inte kan kommunicera med den. Det betyder bara att det endast använder en dubbelriktad kontrollslutpunkt. Detta är inte förvånande, motorer är långsam och inte kräver mycket data till kontroll.
Jämför detta videokamera/enheten:
Enhetsbeskrivningen:
bLength 18
bDescriptorType 1
bcdUSB 2,00
bDeviceClass 0 (definierade på gränssnittet nivå)
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 64
idVendor 0x045e Microsoft Corp.
idProduct 0x02ae
bcdDevice 1.0b
iManufacturer 2 Microsoft
iProduct 1 Xbox NUI kamera
iSerial 3 A00366A08793039A
bNumConfigurations 1
Konfiguration beskrivningen:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0xc0
Själv drivs
MaxPower 16mA
Interface beskrivningen:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 255 specifika leverantörsklass
bInterfaceSubClass 255 leverantör specifik underklass
bInterfaceProtocol 255 leverantören särskilt protokoll
iInterface 0
Slutpunktsbeskrivning:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 1
Överföringstyp isokrona
Synch skriver ingen
Användningsdata typ
wMaxPacketSize 0x0bc0 2 x 960 byte
bInterval 1
Slutpunktsbeskrivning:
bLength 7
bDescriptorType 5
bEndpointAddress 0x82 EP 2 IN
bmAttributes 1
Överföringstyp isokrona
Synch skriver ingen
Användningsdata typ
wMaxPacketSize 0x0bc0 2 x 960 byte
bInterval 1
Enheten Qualifier (för andra enheten hastighet):
bLength 10
bDescriptorType 6
bcdUSB 2,00
bDeviceClass 0 (definierade på gränssnittet nivå)
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 64
bNumConfigurations 1
Enhetsstatus: 0x0001
Själv drivs
Enheten har två isokrona slutpunkter som båda är i typ (data kommer in i datorn). Detta är logiskt: Kinect har en IR-djup kamera och en vanlig VGA-kamera. Två kameror, två ändpunkter. Naturligtvis finns det också en kontrollslutpunkt som inte nämnts här, kontrollslutpunkt kan användas för att ställa in saker som bländare, gammakorrektion, något slags inbyggt filter, etc.