Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: Miky Gonzalez en 18 Febrero 2013, 20:05 pm



Título: [C]-[AYUDA] Encontrar una sección en ejecutable
Publicado por: Miky Gonzalez en 18 Febrero 2013, 20:05 pm
Hola a todo el mundo!. Estoy programando... una cosilla... en C, pero tengo un problema; Explico:
Yo tengo un ejecutable, suponiendo con este codigo:
Código
  1. unsigned char string[255] = {0xef, 0xbe, 0xad, 0xde} // 0xdeadbeed
Y ahora tengo otro ejecutable con el siguiente codigo:
Código
  1. while (1) {
  2.      if (read(archivo_fd, (void *) &numero_magico, 4) <= 3) break;
  3.      if (numero_magico == 0xdeadbeef) goto ir_a_seccion;
  4.      lseek(archivo_fd, 3, SEEK_CUR);
  5.      printf("Numero magico (actual): %lx\n", numero_magico);
  6.  }

El problema está, antes de nada, el código de antes está en crear un archivo ejecutable y con otro ejecutable abrir el archivo y buscar el contenido de numero magico (0xdeadbeef) para sustituir de ahí en adelante por una cadena. El problema se encuentra en que no me encuentra el número mágico... alguien podría ayudar. Gracias


Título: Re: [C]-[AYUDA] Encontrar una sección en ejecutable
Publicado por: 0xDani en 19 Febrero 2013, 16:19 pm
Por el contexto supongo que es un ejecutable en formato ELF no? De todas formas piensa que si lees de cuatro en cuatro y la cadena no esta situada en un offset alineado a 4 en el archivo es normal que no la encuentres.

Código
  1. lseek(archivo_fd, 3, SEEK_CUR);

Y si encima luego mueves el puntero de lectura 3 bytes mas adelante cada vez...

No se como quieres encontrar el numero magico, o que suposiciones estas haciendo.

¿Que es lo que quieres hacer?


Título: Re: [C]-[AYUDA] Encontrar una sección en ejecutable
Publicado por: Miky Gonzalez en 19 Febrero 2013, 17:24 pm
Si es un ejecutable en formato ELF, pero eso no tiene nada que ver con el proposito a llevar (no esque este buscando el numero magico de los archivos ELF... xD)
Haber leo de 4 en 4 en cuatro porque se supone que que los datos estan almacenados como:
Código
  1. unsigned char string[260] = {..., ..., ..., ...}
entonces ahí se supone que la forma de encontrarmelos es como se colocan, en una longitud de 4 bytes. Luego si muevo el puntero para buscar los siguientes 4 bytes de archivo y ver si coinciden con el codigo magico (0xdeadbeef).
La verdad esque no se bien como hacer esto, asi que necesito ayuda. Para aclarar, exactamente lo que quiero hacer es:
En un ejecutable tengo un 'numero magico' que esta guardado en la sección de datos del programa (reservados 260, menos 4 del numero magico, lo que me hacen poder meter hasta una cadena de 255chr + '\0'). Con otro ejecutable busco ese numero magico y empiezo a sustituir a partir de ahí (hasta un maximo de  255chr).

Alguna ayudita? Gracias


Título: Re: [C]-[AYUDA] Encontrar una sección en ejecutable
Publicado por: 0xDani en 19 Febrero 2013, 19:49 pm
Prueba a cambiar el 3 que le pasas a lseek() por un -3, para que lea 4 bytes, compruebe si son el numero magico, reste 3 al puntero de lectura (es decir pase al siguiente byte) y vuelva a iterar.


Título: Re: [C]-[AYUDA] Encontrar una sección en ejecutable
Publicado por: Miky Gonzalez en 21 Febrero 2013, 20:35 pm
Nada eso lo probe ya antes, pero no funciona. Que podria hacer...


Título: Re: [C]-[AYUDA] Encontrar una sección en ejecutable
Publicado por: 0xDani en 21 Febrero 2013, 20:51 pm
mmap()'ealo, ve recorriendo la zona de memoria en la que esta el mapping y ve comparando el byte en el que estes y los 3 siguientes con tu numero magico. Quiza sea cosa del orden de los bytes, los has puesto como little endian, prueba a cambiarlo.