Reverse engineering USB HID
Bonjour,
Je suis en train de d’étudier le comportement une clef USB capteur de température. Celle-ci est reconnu comme une interface HID.
Avec le logiciel usbsniff, je récupère les trames d’échange lors d'une utilisation avec son logiciel d'origine.
Voici le genre de trame que je recupere:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| [2590219 ms] UsbSnoop - FdoHookDispatchInternalIoctl(a2dff1ea) : fdo=89263b70, Irp=891e4008, IRQL=0
[2590219 ms] >>> URB 134 going down >>>
-- URB_FUNCTION_CLASS_INTERFACE:
TransferFlags = 00000000 (USBD_TRANSFER_DIRECTION_OUT, ~USBD_SHORT_TRANSFER_OK)
TransferBufferLength = 00000020
TransferBuffer = a75f8f91
TransferBufferMDL = 00000000
00000000: 0a 0b 0c 0d 00 00 02 00 00 00 00 00 00 00 00 00
00000010: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
UrbLink = 00000000
RequestTypeReservedBits = 00000022
Request = 00000009
Value = 00000200
Index = 00000001
[2590242 ms] UsbSnoop - MyInternalIOCTLCompletion(a2dff126) : fido=88d6c480, Irp=891e4008, Context=8906b548, IRQL=2
[2590242 ms] <<< URB 134 coming back <<<
-- URB_FUNCTION_CONTROL_TRANSFER:
PipeHandle = 88f3d548
TransferFlags = 0000000a (USBD_TRANSFER_DIRECTION_OUT, USBD_SHORT_TRANSFER_OK)
TransferBufferLength = 00000020
TransferBuffer = a75f8f91
TransferBufferMDL = 88e78b30
UrbLink = 00000000
SetupPacket =
00000000: 21 09 00 02 01 00 20 00 |
J'arrive a reproduire ce comportement en appelant WriteFile sur le handle du device et en rajoutant 0 au premier byte du buffer.
Maintenant j'ai un autre type de trame :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| [2590920 ms] UsbSnoop - FilterDispatchAny(a2dfefd2) : IRP_MJ_INTERNAL_DEVICE_CONTROL
[2590920 ms] UsbSnoop - FdoHookDispatchInternalIoctl(a2dff1ea) : fdo=89263b70, Irp=88b1f810, IRQL=0
[2590920 ms] >>> URB 144 going down >>>
-- URB_FUNCTION_CLASS_INTERFACE:
TransferFlags = 00000001 (USBD_TRANSFER_DIRECTION_IN, ~USBD_SHORT_TRANSFER_OK)
TransferBufferLength = 00000100
TransferBuffer = a72f9501
TransferBufferMDL = 00000000
UrbLink = 00000000
RequestTypeReservedBits = 00000022
Request = 00000001
Value = 00000300
Index = 00000001
[2591051 ms] UsbSnoop - MyInternalIOCTLCompletion(a2dff126) : fido=88d6c480, Irp=88b1f810, Context=8906b548, IRQL=2
[2591051 ms] <<< URB 144 coming back <<<
-- URB_FUNCTION_CONTROL_TRANSFER:
PipeHandle = 88f3d548
TransferFlags = 0000000b (USBD_TRANSFER_DIRECTION_IN, USBD_SHORT_TRANSFER_OK)
TransferBufferLength = 00000100
TransferBuffer = a72f9501
TransferBufferMDL = 892b34f0
00000000: 57 5a 14 00 14 00 53 00 00 00 00 00 00 00 00 00
00000010: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
.../... |
On voit qu'il n'existe pas de grande différence avec la trame précédente si ce n'est le TransferFlags, et Request. Comment est-il possible de générer ce type de trame? Il me semble qu'avec WriteFile le request est forcé à 9.
Merci d'avance pour tout information.