IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windows Discussion :

Reverse engineering USB HID


Sujet :

Windows

  1. #1
    Membre confirmé Avatar de themadmax
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    446
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 446
    Points : 496
    Points
    496
    Par défaut 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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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.
    ________________________________________________
    http://bliquid.fr : Blog sur Android et l'Acer Liquid

  2. #2
    Membre confirmé Avatar de themadmax
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    446
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 446
    Points : 496
    Points
    496
    Par défaut
    Bon ben j'ai résolu mon problème comme un grand.

    La fonction HidD_GetFeature permet d'envoyer ce type de requête.
    J'ai trouvé cette info dans la spécification HID (Device Class Definition for Human Interface Devices (HID) Firmware Specification—6/27/01 Version 1.11 ) p 51.
    The following table defines valid values of bRequest.
    Value Description
    0x01 GET_REPORT 1
    0x02 GET_IDLE
    0x03 GET_PROTOCOL 2
    0x04-0x08 Reserved
    0x09 SET_REPORT
    0x0A SET_IDLE
    0x0B SET_PROTOCOL 2
    ________________________________________________
    http://bliquid.fr : Blog sur Android et l'Acer Liquid

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Est-il possible de bloquer le reverse engineering ?
    Par fugi dans le forum Assembleur
    Réponses: 39
    Dernier message: 31/07/2007, 02h33
  2. Schéma du modèle de données : reverse engineering
    Par slefevre01 dans le forum Designer
    Réponses: 2
    Dernier message: 20/08/2005, 09h38
  3. cherche outil de reverse engineering
    Par peppena dans le forum PostgreSQL
    Réponses: 8
    Dernier message: 14/06/2005, 15h59
  4. [HELP] Reverse Engineering
    Par ArKhAn dans le forum x86 32-bits / 64-bits
    Réponses: 7
    Dernier message: 13/12/2004, 21h15
  5. reverse engineering en C#
    Par Bouboubou dans le forum Rational
    Réponses: 3
    Dernier message: 07/10/2004, 10h28

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo