Foro de elhacker.net

Programación => Ingeniería Inversa => Mensaje iniciado por: Caster en 14 Diciembre 2013, 13:53 pm



Título: Problema con PUSH en Ollydbg
Publicado por: Caster en 14 Diciembre 2013, 13:53 pm
Buenas a todos, estoy leyendo unos tutoriales de Ricardo Narvaja del ollydbg, no se en que lección estoy porque vienen todas juntas, pero estoy leyendo sobre las instrucciones del stack, en concreto sobre la instrucción PUSH, que según entendi sirve para añadir valores al stack. Lo estoy probando con un Crackme que venia con los propios tutoriales y al meterlo en el Ollydbg la primera linea del desemsamblado es un PUSH 0, si me situo en esa línea y la ejecuto, en el stack queda de primero una direccion con el valor 00000000, hasta ahí todo bien, después explica la diferencia entre poner PUSH numerox que poner PUSH [numerox], si pongo PUSH 401008 en el stack queda de primero una direccion con el valor 401008, si busco en el dump la direccion 401008 contiene los valores CA 20 40 00, los que quiero introducir en el stack con la instrucción PUSH [401008] pero cuando la intento introducir en el desensamblador me pone: "Please specify operand size" y no entiendo que quiere decir eso, me fije tambien que en la foto que trae el tutorial en vez de PUSH [401008] pone PUSH DWORD PTR DS: [401008], si lo introduzco de esta manera si que funciona, pero en el tutorial explica que hay que introducir PUSH [401008] únicamente, quería saber si es problema de que algo estoy haciendo mal o el tutorial viene mal explicado.

Saludos


Título: Re: Problema con PUSH en Ollydbg
Publicado por: .:UND3R:. en 14 Diciembre 2013, 14:20 pm
Hola, al parecer el tutorial viene mal explicado ya que como vez la instrucción:
PUSH DWORD PTR DS: [401008]
Especifica su tamaño, de todas maneras casi el 99% de los casos el tamaño que debes usar es DWORD ya que la pila tiene este tamaño predeterminado.

El DWORD (doble palabra) como comenté, es la forma para que el procesador sepa cuantos datos debe sacar dentro de la dirección 401008, a diferencia de cuando empujas un address o valor directamente, este tiene un tamaño DWORD, saludos y suerte


Título: Re: Problema con PUSH en Ollydbg
Publicado por: Caster en 14 Diciembre 2013, 15:09 pm
En el tutorial viene explicado más abajo, no me fije (mea culpa), que el Olly traduce la instruccion PUSH [401008] por PUSH DWORD PTR DS: [401008] y que el DWORD le indica que debe seleccionar 4 bytes de la dirección de memoria, pero que el usuario debe introducir únicamente PUSH [401008], siendo PUSH DWORD PTR DS: [401008] la forma correcta, ¿que significa PTR DS?

Saludos y gracias.


Título: Re: Problema con PUSH en Ollydbg
Publicado por: .:UND3R:. en 14 Diciembre 2013, 15:20 pm
El operador PTR permite re-definir el tamaño en bytes de un operando

saludos


Título: Re: Problema con PUSH en Ollydbg
Publicado por: Caster en 14 Diciembre 2013, 15:49 pm
¿Y DS?


Título: Re: Problema con PUSH en Ollydbg
Publicado por: .:UND3R:. en 14 Diciembre 2013, 16:00 pm
Si mal no me equivoco es la especificación del segmento en donde se encuentran la cantidad de bytes a extraer,

DS = Data section o sección de datos (generalmente .DATA).

Aunque si se sacaran datos desde la sección CS debería ser
PTR CS, pro no sé si esto es aplicado en modo protegido.

PD: Eres muy curioso y eso es muy bueno  ;-)


Título: Re: Problema con PUSH en Ollydbg
Publicado por: Caster en 14 Diciembre 2013, 17:07 pm
Muchas gracias por las aclaraciones, ya me ha quedado claro.

Saludos