ANELKAOS Y YO hemos estado echando un vistazo a tu source y no nos gusta para nada XDDD
1º.... veamos pongo el sopurce y lo analizamos:
Código:
#include <stdio.h>
#include <stdlib.h>
#include <bluetooth/bluetooth.h>
#include <bluetooth/hci.h>
#include <bluetooth/hci_lib.h>
int main (int argc, char **argv)
{
bdaddr_t bdaddr;//Estructura bdaddr_t para almacenar la direccion MAC
char MAC_dev[248];//Direccion MAC del dispositivo
char nombre_dev[248];//Nombre del dispositivo
int id_dev;//Identificador del dispositivo
int socket;//Socket HCI
if(argc < 2)
{
printf("Sintaxis: %s <direccion MAC>\n",argv[0]);
exit(1);
}
printf("+ BlueResolver por Gospel [elblogdegospel.blogspot.com]\n\n");
strcpy(MAC_dev,argv[1]);
printf("Detectando nombre del dispositivo <%s>...\n",MAC_dev);
baswap(&bdaddr, strtoba(MAC_dev));
id_dev = hci_get_route(&bdaddr);
if (id_dev < 0)
{
printf("[!] Error. Dispositivo no encontrado.\n");
exit(1);
}
socket = hci_open_dev(id_dev);
if (socket < 0)
{
printf("[!] Error. Fallo al intentar abrir HCI.\n");
exit(1);
}
int timeout = 10000;
if (hci_read_remote_name(socket,&bdaddr,sizeof(nombre_dev), nombre_dev, timeout) == 0)
{
printf("Dispositivo encontrado:\n\tMAC: %s\n\tNombre: %s\n",MAC_dev,nombre_dev);
}
else
{
printf("[!] Error. No se ha podido obtener el nombre del dispositivo Bluetooth.\n");
}
close(socket);
return(0);
}
Citar
char MAC_dev[248];//Direccion MAC del dispositivo
Yo esto lo ubiera declarado como puntero, asi prebeemos un stack overflow y si tienes el fallo pues kedaria en un heap overflow
y luego esto ya si q si XD:
Citar
strcpy(MAC_dev,argv[1]);
asi a capon? reservas 248 bytes peor si meten 83476593847659324 ale pa dentro pa la pila no? y na menos en un programa que rekiere privilegios de root XD.
yo lo que aria primero seria declarar ese array como punteo y luego antes de hacer el:
strcpy hacer una comprobacion de los bytes que ocupa argv[1] y si supera los q tu kieres saltar un error y esas cosas...
Sigue con el taller que me interesa