viernes, 9 de julio de 2010

Ing inversa de un dispositivo USB

La idea es instalar un Windows en una maquina virtual, instalar el driver del dispositivo USB en la maquina virtual y desde Linux (o el OS que haga de host) monitorear el puerto USB para descifrar como que tipo de comunicacion usa el dispositivo, la velocidad, etc.
Para monitorear un puerto USB se puede usar el modulo de kernel usbmon, que, de manera resumida, se puede iniciar asi:
#mount -t debugfs none_debugs /sys/kernel/debug
#modprobe usbmon

#ls -l /sys/kernel/debug/usb/usbmon/
0s 0u 1s 1t 1u 2s 2t 2u

Estos archivos tienen el formato: (numero_de_bus)(s|u|t). Se debe saber el numero de bus al que el dispositivo esta conectado. Esto se puede lograr con un
#dmesg
, o con un
#cat /proc/bus/usb/devices

Para monitorear el trafico hacemos:
#cat /sys/kernel/debug/usb/usbmon/2u

Luego de monitear todo el trafico necesario, usamos la libreria libusb para hacer la comunicacion con el puerto USB y hacer el driver. Libusb tiene implementaciones para Linux y Windows.

//FIXME

No hay comentarios:

Publicar un comentario