Título: problema con una violacion de segmento usando opcodes Publicado por: Belial & Grimoire en 1 Septiembre 2013, 22:23 pm Hola
Estaba haciendo un ejemplo de como usar los opcodes para ejecutarlos en un C, por ejemplo Este codigo es el clasico en esamblador de exit(0), y usando objdump quedo asi Código
el programa lo compilo de esta forma ya que lo estoy analizando como 32 bits y mi sistema es de 64bits gcc -m32 -ggdb -mpreferred-stack-boundary=2 -o salida salida.c pero cuando lo ejecuto me sale una violacion de segmento, me imagino que falla exit(0) y no sale correctamente el programa Alguien me podria decir porque falla el codigo? Título: Re: problema con una violacion de segmento usando opcodes Publicado por: Stakewinner00 en 1 Septiembre 2013, 23:01 pm es raro por que lo compile sin querer usando
Código: g++ main.cpp luego probe y me da error si pongo Código: -mpreferred-stack-boundary= Título: Re: problema con una violacion de segmento usando opcodes Publicado por: Belial & Grimoire en 1 Septiembre 2013, 23:39 pm Es para alinear el stack
Citar -mpreferred-stack-boundary lo que no entiendo, es porque el codigo en ensamblador que compile en 32 bits si funciona cuando lo ejecuto, pero el archivo en C hay una violacion de segmento, solo como tu dices, si lo compilo de forma normal, no sale ningun error, pero acaba compilado como 64 bits, con opcodes de 32 bits Título: Re: problema con una violacion de segmento usando opcodes Publicado por: Eternal Idol en 2 Septiembre 2013, 00:03 am Supongo que la clave es que exits esta en una sección de datos y no en una de codigo, al menos en Windows muere ahi al depurarlo...
Título: Re: problema con una violacion de segmento usando opcodes Publicado por: Belial & Grimoire en 2 Septiembre 2013, 00:21 am cierto, ya lo movi a la sección de código y se ejecuto bien... ya funciona, gracias
solo una ultima pregunta, en el archivo asm puse a ebx con 20, no es necesario pero es de practica mov ebx, 20 mov eax, 1 int 0x80 cuando lo ejecuto, funciona bien y obtengo el registro de ebx [linux]$echo $? 20 pero con el archivo hecho en C, me aparece un numero aleatorio [linux]$echo $? 28 [linux]$echo $? 146 [linux]$echo $? 44 es normal? salu2 Título: Re: problema con una violacion de segmento usando opcodes Publicado por: Eternal Idol en 2 Septiembre 2013, 01:11 am De nadas, no se, fijate si depuras el programa y ejecuta exactamente el codigo correcto, de ser asi no tengo ni idea ...
Título: Re: problema con una violacion de segmento usando opcodes Publicado por: xv0 en 2 Septiembre 2013, 03:14 am lo que no entiendo, es porque el codigo en ensamblador que compile en 32 bits si funciona cuando lo ejecuto, pero el archivo en C hay una violacion de segmento, solo como tu dices, si lo compilo de forma normal, no sale ningun error, pero acaba compilado como 64 bits, con opcodes de 32 bits Si intentas ejecutar la interrupcion al vector 0x80 en un sistema de 64 bits, tendras problemas tienes que usar la instruccion syscall, es mas rapida que la interrupcion al vector asi que no se porque estas en 32 bits. Te dejo un codigo, devuelve el valor correcto y esta mucho mas optimizado, ya que solo me limito a saltar a la direccion de la shellcode, y esa misma es menos pesada pero no mas rapida. Código
Compilado sin ninguna opcion. Un saludo. Título: Re: problema con una violacion de segmento usando opcodes Publicado por: Belial & Grimoire en 2 Septiembre 2013, 04:08 am gracias cpu2, tendre en cuenta el codigo que me diste... y tienes razon por lo de 64 bits, por eso tenia la duda de hacerlo funcionar como 32 bits para evitar esos problemas ;D
y lo otro si era normal, habia olvidado desactivar randomize del kernel :silbar: Tambien hay que quitar la proteccion de stack -fno-stack-protector -z execstack Y con eso, ya funciona con char en los datos Código
salu2 Título: Re: problema con una violacion de segmento usando opcodes Publicado por: Eternal Idol en 2 Septiembre 2013, 09:33 am ¿Eso quiere decir que los programas de 32 bits tienen que ser recompilados? En Windows hay una emulacion que da soporte al codigo legacy :silbar:
Título: Re: problema con una violacion de segmento usando opcodes Publicado por: xv0 en 2 Septiembre 2013, 10:39 am No, si tu sistema es multilibreria te permite ejecutar binarios de x86 en una amd64. Me acuerdo cuando utilizaba Gentoo en la instalacion te daba ha escojer un perfil si lo querias multilibreria o un amd64 puro, es decir nada de emulacion de binarios x86 y como ejecutes una interrupcion al vector 0x80 un core dumped.
Pero no se ya hace tiempo que no toco Linux, solo Backtrack. Pero es lo que me sucede con OpenBSD ya que es un sistema de 64 bits puro, es por eso que le dije lo de la interrupcion al vector 0x80. Un saludo. Título: Re: problema con una violacion de segmento usando opcodes Publicado por: Eternal Idol en 2 Septiembre 2013, 11:02 am Ah, debe tener habilitado el soporte para 32 bits entonces.
|