LoPelut escribió:wuepe escribió:
...
Haber si podemos sacar la documentacion necesaria, eso que me indicastes me suena haberlo visto, pero en la fuente original del groove no viene esos datos, viene un descriptor.h pero viene en forma de struct.
...
Si te fijas, en el device_descriptor original (el del PSGroove) hay 18 bytes en forma hex. En la estructura que usais en vuestro código tambien hay 18 bytes, solo que distribuidos en 10 chars y 4 shorts (*2 bytes cada uno, 8). En total 18 también. Por que no ir a saco? me refiero:
//original
const char HUB_Device_Descriptor[] = {
0x12, 0x01, 0x00, 0x02, 0x09, 0x00, 0x01, 0x08,
0xAA, 0xAA, 0xCC, 0xCC, 0x00, 0x01, 0x00, 0x00,
0x00, 0x01,
};
// Propio
struct DeviceDescriptor
{
unsigned char bLength;
unsigned char bDescriptorType;
unsigned short bcdUSB;
unsigned char bDeviceClass;
unsigned char bDeviceSubClass;
unsigned char bDeviceProtocol;
unsigned char bMaxPacketSize0;
unsigned short idVendor;
unsigned short idProduct;
unsigned short bcdDevice;
unsigned char iManufacturer;
unsigned char iProduct;
unsigned char iSerialNumber;
unsigned char bNumConfigurations;
} __attribute__ ((aligned(4)));
struct DeviceDescriptor *descriptor_hi;
//nuevo
memcpy ( descriptor_hi, &HUB_Device_Descriptor, 18 );
//send a saco
no hagais caso a la sintaxis, estoy más que oxidado con C...
Saludos!
Edito: Por cierto, no sigais testeando con windows . En caso de que reconociera el hub, al continuar con los demás dispositivos lo único que haréis será hacer saltar alguna BSOD, ya que en ello consiste el exploit (escribir datos de código en zonas de memoria protegida).
Edito2: La info concuerda, al menos en el primer campo: unsigned char bLength = 0x12 hex => 18 dec...