Descriptores USB, VID/PID y qué significa clonar un descriptor
Qué contiene un descriptor HID USB y qué campos identifican a un dispositivo, por qué existen las listas de ratones compatibles y por qué un descriptor genérico es una identidad más débil que uno clonado.
Respuesta corta
Un descriptor HID USB es la forma que tiene un dispositivo de describirse a sí mismo al enchufarlo: su vendor ID, su product ID, sus cadenas de texto y su formato de reporte. Clonar el descriptor significa que el dispositivo de entrada presenta la identidad del ratón real que lleva conectado en vez de la suya propia y genérica.
En esta página10
- Qué es un descriptor USB
- Qué campos del descriptor identifican a un dispositivo
- Por qué no basta con cambiar el VID y el PID
- Por qué existen las listas de ratones compatibles
- Cómo funciona la clonación de descriptores
- Identidad de fábrica, genérica y clonada, comparadas
- Cómo auditar tu propio dispositivo
- Lo que un descriptor clonado no puede ocultar
- Preguntas habituales sobre descriptores
- Fuentes
Qué es un descriptor USB
Cuando enchufas cualquier dispositivo USB, el host le pide que se describa, y no pasa nada más hasta que responde. El dispositivo contesta con un conjunto de descriptores. El descriptor de dispositivo dice quién lo fabricó y qué modelo es, y el descriptor de configuración dice cuántas interfaces tiene. Los descriptores de interfaz y de endpoint dicen qué hace cada interfaz y cada cuánto quiere que la consulten. Todo lo que sea teclado, ratón o mando envía además un HID report descriptor, que describe la disposición exacta de los bytes de los mensajes que va a enviar. Este intercambio se llama enumeración y ocurre en milisegundos, antes de que se cargue ningún driver. Todo lo que el sistema operativo cree después sobre el dispositivo sale de esos milisegundos. Tu dispositivo de entrada responde a las mismas preguntas, y puede responderlas bien o mal.
Qué campos del descriptor identifican a un dispositivo
Esto no es toda la especificación USB, pero cualquier software del host puede leer todos los campos de esta lista sin permisos especiales.
| Campo | Qué contiene | Qué revela |
|---|---|---|
| idVendor (VID) | Un número de 16 bits que el organismo de estandarización de USB asigna a una empresa | Quién fabricó el dispositivo. El VID de un fabricante de ratones conocido en una máquina que tiene ese ratón no llama la atención. El VID de un fabricante de placas de desarrollo sí es una pregunta |
| idProduct (PID) | Un número de 16 bits que el fabricante asigna a un modelo concreto | Qué modelo es. El VID y el PID juntos son la identidad pública del dispositivo y la pareja con la que trabajan el emparejado de drivers, la telemetría y las herramientas de inventario |
| iManufacturer e iProduct | Índices a descriptores de cadena, que se leen como texto | El nombre legible que aparece en el Administrador de dispositivos. Es el campo que más se olvida y la pista más fácil cuando dice algo que ningún ratón diría |
| iSerialNumber | Un índice opcional a una cadena de número de serie | Un identificador por unidad. Algunos ratones lo tienen y muchos no. Windows lo usa para decidir si un dispositivo reconectado en otro puerto es el mismo dispositivo |
| bcdDevice | Un número de revisión del dispositivo que define el fabricante | La revisión de firmware. Los productos reales lo mueven de una versión a otra. Un valor que nunca cambia en ninguna unidad del mundo es por sí mismo un patrón |
| bcdUSB | La versión de la especificación USB que el dispositivo dice implementar | De qué época de la especificación se presenta, y si su comportamiento full speed o high speed encaja con el resto de lo que afirma |
| bDeviceClass y bInterfaceClass | Códigos de clase. La clase 3 es HID | Que esto es un dispositivo de interfaz humana y no almacenamiento, audio o un adaptador serie |
| Número de interfaces | Cuántas funciones expone un mismo dispositivo físico | Si esto es un ratón o un gadget compuesto que es ratón más puerto serie más otra cosa. Un ratón normal no suele ser tres cosas a la vez |
| bInterval del endpoint | El intervalo de sondeo que el dispositivo le pide al host | La tasa de reporte que dice querer. Un dispositivo cuyo descriptor pide un intervalo modesto mientras reporta mucho más rápido se está contradiciendo |
| HID report descriptor | Usage page y usages, tamaño de los campos de los ejes, número de botones, rueda y cualquier colección definida por el fabricante | La forma del dispositivo. Número de botones, si los ejes de movimiento son de 8 o de 16 bits, si hay rueda horizontal y si falta un bloque específico del fabricante que ese modelo debería tener |
Ninguno de estos campos es secreto, y ninguno necesita un driver para leerse. Cualquier proceso del host puede enumerar los dispositivos conectados y leer todos y cada uno de estos campos.
Aviso
Por qué no basta con cambiar el VID y el PID
La gente trata el vendor ID y el product ID como si fueran toda la identidad, y son lo primero que mira cualquiera, pero son solo dos números entre muchos. Imagina un dispositivo que lleva el VID y el PID de un fabricante de ratones conocido mientras su cadena de producto sigue nombrando una placa microcontroladora. Su report descriptor declara un número de botones distinto del que tiene ese modelo, y su endpoint pide un intervalo que ese modelo no usa jamás. Eso queda peor que dejar el dispositivo tal cual, porque una identidad copiada a medias no cuadra, y una incoherencia es exactamente lo que busca una comprobación. Si cambias los IDs, cambia todo lo que va con ellos.
Por qué existen las listas de ratones compatibles
El firmware de paso antiguo no analizaba el descriptor del ratón conectado. En su lugar llevaba perfiles fijos: una tabla de formatos de reporte para modelos concretos, escrita a mano. Si enchufabas un ratón de la lista, el firmware sabía cómo descodificar sus reportes y cómo copiar su identidad. Si enchufabas otra cosa, no obtenías nada o un movimiento revuelto. De ahí viene la pregunta de los ratones compatibles, y en el firmware de esa generación es una limitación real que tienes que comprobar antes de comprar un ratón. El firmware más nuevo lee la disposición del propio dispositivo durante la enumeración y se adapta, y el análisis automático del HID report descriptor de MAKCM es el ejemplo más claro. Por eso las listas han dejado de importar en los dispositivos actuales, aunque conviene comprobar a qué generación pertenece tu firmware en vez de suponerlo.
Cómo funciona la clonación de descriptores
Clonar un descriptor funciona en dos pasos. El dispositivo de entrada enumera el ratón real en su lado host y lee lo que ese ratón ha dicho de sí mismo, y luego presenta esas mismas respuestas al PC de juego por su lado device. La identidad que ve el PC de juego pertenece, por tanto, a un ratón que existe de verdad y que está enchufado de verdad, una capa más atrás. La clonación completa cubre los IDs, las cadenas, la revisión, la disposición de interfaces y el report descriptor, así que las respuestas concuerdan entre sí porque salieron de un único dispositivo real. La clonación parcial cubre los IDs pero deja las cadenas o el report descriptor con los valores propios del dispositivo de paso, lo que devuelve el problema de la incoherencia. Así que la pregunta útil sobre cualquier firmware no es si puede falsear un VID, sino cuánta parte del descriptor copia.
Consejo
Identidad de fábrica, genérica y clonada, comparadas
Una identidad de fábrica es la placa de paso anunciándose como lo que es. En un Teensy sin tocar, eso significa el vendor ID y las cadenas de producto de una placa de desarrollo en una máquina que no tiene ningún otro motivo para llevar una. Una identidad genérica es un ratón inventado que parece bastante real: un ratón HID compatible con la clase y cadenas neutras. Por sí sola no llama la atención, pero no coincide con ningún producto que nadie venda, y es la misma para todo el que use ese firmware. Una identidad clonada es el descriptor del ratón que tienes de verdad en la mano. Es coherente, coincide con un producto que existe y cambia de un usuario a otro porque sus ratones son distintos. Son tres posiciones diferentes y forman una escala. Ninguna de ellas, eso sí, es prueba de nada, porque la escala habla de cuánta anomalía presentas, no de seguridad.
Cómo auditar tu propio dispositivo
Haz esto desde el PC de juego con un visor de dispositivos USB, para ver tu dispositivo de entrada tal y como lo ve el PC de juego. Te lleva cinco minutos y te dice más que cualquier hilo de foro.
- Las cadenas de producto y de fabricante se leen como las de un ratón, no como las de un microcontrolador o una placa de desarrollo
- El vendor ID y el product ID van juntos y corresponden a un producto que existe de verdad
- El número de botones y la rueda del report descriptor coinciden con los del modelo que dice ser
- El dispositivo presenta una única interfaz HID de ratón, no un ratón más un puerto serie más un teclado que no usas
- El intervalo de sondeo que pide es uno que el modelo declarado usaría de forma verosímil
- La cadena de número de serie está o no está, igual que en el modelo declarado
- En el Administrador de dispositivos no aparece ningún nombre que no esperarías ver en un PC de juego normal
Aviso
Lo que un descriptor clonado no puede ocultar
Un descriptor clonado a la perfección hace que el dispositivo no llame la atención durante la enumeración, pero no hace nada por el tiempo ni por la forma del movimiento que inyecta después. Esa capa posterior es donde ocurre el análisis, y es la que de verdad preocupa a la gente. Un movimiento que salta de golpe se ve dijera lo que dijera el descriptor, y un movimiento demasiado suave también. Lo mismo vale para un movimiento con una curva de aceleración idéntica en cada flick, o para uno que corrige la posición de un objetivo más rápido de lo que puede hacerlo una mano. El trabajo con descriptores elimina una clase de señal fácil. Lo necesitas, pero por sí solo no basta, y darlo por suficiente es la forma en que gente con montajes excelentes acaba pillada por comportarse como un programa.
Preguntas habituales sobre descriptores
¿Puede un juego leer el descriptor de mi ratón?
Un proceso de la máquina puede enumerar los dispositivos USB conectados y leer sus descriptores sin permisos especiales, y un anticheat que corre con acceso a kernel desde luego puede hacerlo. Si un título concreto lo hace, y qué hace con el resultado, no es algo que nadie de fuera de esa empresa te pueda decir honestamente.
Si clono el descriptor de mi ratón real, ¿habrá dos dispositivos idénticos?
No, porque tu ratón real está conectado al lado host del dispositivo de entrada y no al PC de juego, así que el PC de juego solo ve un dispositivo con esa identidad. Si además enchufas el ratón real directamente al PC de juego, creas justo el duplicado que querías evitar.
¿Clonar un descriptor es ilegal?
Presentar el vendor ID de otra empresa es usar indebidamente un identificador asignado a esa empresa, y además es un asunto de términos de servicio con el juego. No somos abogados y esto no es asesoramiento legal. Lo que sí es, técnicamente, es posible.
¿Cambiar el descriptor afecta al rendimiento?
El report descriptor sí. Si declaras ejes relativos de 16 bits en vez de 8, los deltas de movimiento grandes caben en un solo reporte en lugar de recortarse y partirse. Esa es la diferencia entre un movimiento suave y uno a escalones en los flicks largos, mientras que los campos de identidad no afectan al rendimiento en absoluto.
Mi cheat tiene una opción de spoof del descriptor. ¿Basta con activarla?
Es mejor que dejarla apagada, pero por sí sola no es una respuesta completa. Averigua qué cambia realmente: solo los IDs, o también las cadenas y el report descriptor. Y después audita el resultado desde el PC de juego con un visor de dispositivos en vez de fiarte de la etiqueta de la casilla.
¿Debería usar un ratón barato como donante?
Usa el ratón con el que juegas de verdad. La gracia de clonar es que la identidad coincida con un dispositivo que es plausible que tengas y uses, y tu ratón real es el más plausible que tienes.
Fuentes
La clasificación entre identidad de fábrica, genérica y clonada es lectura nuestra, igual que la lista de auditoría, que sale de pruebas en banco.
- 01Microsoft Learn, USB device descriptors
los campos idvendor, idproduct, de cadena y de clase de la tabla, y cómo los usa windows para emparejar drivers
learn.microsoft.com
- 02Microsoft, Windows debugging tools (WDK)
de dónde sale el usb device viewer que usamos en la lista de auditoría
learn.microsoft.com
- 03MAKCM firmware, GPL-3.0
que el firmware makcm actual analiza el hid report descriptor del ratón conectado en vez de usar una lista de modelos
github.com
Sigue leyendo
¿Sigues atascado? Abre un ticket en Discord
Todas las guías