Estoy intentando ejecutar una shellcode que genero con el programa xxd de esta manera:
Código:
xxd -i executable >> some.c
Una vez tengo la shell generada en el fichero some.c intento ejecutarlo de esta manera:
Código:
unsigned char shell[] = { ... };
void (*sh)();
sh = (void (*)())shell;
(void)(*sh)();
Al compilar el programa no da ningún error. Cuando lo ejecuto me da violacion de segmento.
También he probado cargando en memoria el programa de esta manera:
Código:
void *f = mmap ( 0, sizeof ( shell ), PROT_READ|PROT_WRITE|PROT_EXEC,
MAP_PRIVATE|MAP_ANON, -1, 0 );
memcpy ( f, shell, sizeof ( shell );
void (*sh)() = (void (*)())f;
(void)(*sh)();
Y me pasa lo mismo xd. ¿Cómo puedo ejecutar codigo en hexadecimal en C? Es decir, lo que viene a ser coger el codigo en lenguaje máquina codificado en hex y ejecutarlo en otro programa en C.
Yo creo que lo que tengo que hacer es cargarlo en memoria y ejecutar esa posicion de memoria, pero no sé qué hago mal en este proceso ni el por qué de la violación de segmento.
Gracias de antemano.