[C]-[AYUDA] Encontrar una sección en ejecutable

Iniciado por Miky Gonzalez, 18 Febrero 2013, 20:05 PM

0 Miembros y 1 Visitante están viendo este tema.

Miky Gonzalez

Hola a todo el mundo!. Estoy programando... una cosilla... en C, pero tengo un problema; Explico:
Yo tengo un ejecutable, suponiendo con este codigo:
unsigned char string[255] = {0xef, 0xbe, 0xad, 0xde} // 0xdeadbeed
Y ahora tengo otro ejecutable con el siguiente codigo:
while (1) {
     if (read(archivo_fd, (void *) &numero_magico, 4) <= 3) break;
     if (numero_magico == 0xdeadbeef) goto ir_a_seccion;
     lseek(archivo_fd, 3, SEEK_CUR);
     printf("Numero magico (actual): %lx\n", numero_magico);
 }


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
Mi blog personal, con información acerca de programación, seguridad, desarrollo y electrónica:

EN CONSTRUCCIÓN

0xDani

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.

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?
I keep searching for something that I never seem to find, but maybe I won't, because I left it all behind!

I code for $$$
Hago trabajos en C/C++
Contactar por PM

Miky Gonzalez

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: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
Mi blog personal, con información acerca de programación, seguridad, desarrollo y electrónica:

EN CONSTRUCCIÓN

0xDani

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.
I keep searching for something that I never seem to find, but maybe I won't, because I left it all behind!

I code for $$$
Hago trabajos en C/C++
Contactar por PM

Miky Gonzalez

Nada eso lo probe ya antes, pero no funciona. Que podria hacer...
Mi blog personal, con información acerca de programación, seguridad, desarrollo y electrónica:

EN CONSTRUCCIÓN

0xDani

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.
I keep searching for something that I never seem to find, but maybe I won't, because I left it all behind!

I code for $$$
Hago trabajos en C/C++
Contactar por PM