Foro de elhacker.net

Programación => Ingeniería Inversa => Mensaje iniciado por: Eaa en 3 Septiembre 2008, 19:34 pm



Título: Ollydbg, problema dll.
Publicado por: Eaa en 3 Septiembre 2008, 19:34 pm
 Buenas estoy siguiendo un tuto de stack overflow del foro. Lo compilo todo en Visual c++, y el problema es el siguiente:

Cuando abro el olly donde deberia poner poner por ejemplo:

Código:
004012D2  |. E8 79170000    CALL <JMP.&msvcrt.printf>                ; \printf
Donde msvcrt seria la dll para buscar el offset de system en mi caso.


A mi me pone:
Código:
004012D2  |. E8 79170000    CALL vuln1.&.printf>                ; \printf

Donde vuln1 es como se llama mi archivo, y no me da ninguna dll para buscar el offset como pone en el tuto.

Saludos...


Título: Re: Ollydbg, problema dll.
Publicado por: ........... en 3 Septiembre 2008, 20:28 pm
Teniendo el exe para echarle un vistazo sería de ayuda.

He mirado las opciones de olly, y ninguna produce lo que a ti te pasa.

De todas formas, si sobre ese comando pulsas la barra espaciadora, verás la dirección de esa llamada, que si la sigues, te debe conducir a la dirección de esa función dentro de la msvcrt.


Título: Re: Ollydbg, problema dll.
Publicado por: Eaa en 3 Septiembre 2008, 20:41 pm
Código:
//* vuln1.c por Rojodos */

#include <stdio.h>  // librería stdio.h, funciones básicas de Entrada/Salida
#include <string.h>

int main (int argc, char **argv){  // La función "principal" del programa

char buffer[64]; //Declaramos un array con 64 bytes de espacio
if (argc < 2){  // Si los argumentos son menores que 2...
printf ("Introduzca un argumento al programa\n"); //Printeamos
return 0;  // y retornamos 0 a la función main, y el programa acaba
        }
strcpy (buffer, argv[1]); // Aqui es donde esta el fallo.

return 0;  // Devolvemos 0 a main, y el programa acaba.
}

Na la llamada esa no me conduce a ningun msvcrt.
Con el dev c++ me aparece la dichosa dll, pero el asm esta muy cambiado,me pierdo -.-.

Saludos...


Título: Re: Ollydbg, problema dll.
Publicado por: ........... en 3 Septiembre 2008, 21:20 pm
Lo acabo de compilar con el dev c++ y me funciona bien

(http://img371.imageshack.us/img371/92/snap14oc8.gif)

Te paso mi ollydbg.ini, por si fuera algún problema de configuración. Supongo que estás usando un olly en condiciones, versión 1.10.

http://rapidshare.com/files/142382430/ollydbg.ini.html

Los pasos son:
- cargar el exe en olly
- botón derecho, search for / all intermodular calls
- pinchas dos veces sobre msvcrt.prinft lo que te llevará a la línea donde está esa llamada
- barra espaciadora y te aparece el comando, donde ves la dirección a la que apunta el call
- situándote en esa dirección, ya ves la dirección que te he puesto en la imagen

Igual te preguntas por qué no hay un call directo: CALL 77C1186A
La razón es porque esas direcciones de las funciones que exportan las dll son variables, pueden cambiar según el sistema operativo, o incluso usando el mismo s.o. Entonces lo que hacen los programas es tener una tabla de direcciones, la IAT, que el s.o. rellena con dichas direcciones al cargar el ejecutable en memoria. Entonces, la llamada de hace forma indirecta. La razón de que NO sea un CALL [dir] que es más directo que un CALL a un JMP [dir], como estás viendo, no la recuerdo ahora mismo.


Título: Re: Ollydbg, problema dll.
Publicado por: Eaa en 3 Septiembre 2008, 22:32 pm
 Perfecto, muchas gracias :) .