elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.
 
Inicio Ayuda Buscar Ingresar Registrarse
28 Mayo 2012, 01:20  


Tema destacado: Suscripción al boletín mensual de elhacker.net

+  Foro de elhacker.net
|-+  Programación
| |-+  Ingeniería Inversa (Moderadores: Shaddy, karmany)
| | |-+  Ubicación de variable en un proceso[Help]
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 Ir Abajo Respuesta Imprimir
Autor Tema: Ubicación de variable en un proceso[Help]  (Leído 1,475 veces)
ignorantev1.1


Desconectado Desconectado

Mensajes: 424


/\ Así acabo cuando quiero programar...


Ver Perfil WWW
Ubicación de variable en un proceso[Help]
« en: 24 Octubre 2011, 22:01 »

Buenas, He estado toqueteando la memoria de cierto programa, me interesan algunos datos de ciertos offsets, el problema es que cada vez que inicia la aplicación la ubicación de esas variables cambian de offset, mi pregunta:

¿Hay alguna forma de ubicar estas variables atravez, por ejemplo, de una API que me diga en qué dirección se empiezan a alamacenar las variables?  :silbar:

Disculpen, si la pregunta o la idea no está bien redactada, o si el tema ya existe pero no sé como plantearlo en el  buscador, pero estoy en ceros en esto...  :-\

Muchas gracias y saludos!
En línea


_Enko


Desconectado Desconectado

Mensajes: 301



Ver Perfil
Re: Ubicación de variable en un proceso[Help]
« Respuesta #1 en: 24 Octubre 2011, 22:15 »

Hola, nunca tuve que hacer algo asi, pero se me ocurre esta solucion:


Si es Objeto (instancia de una clase) de una aplicacion programada con algun lenguaje orientado a objetos, ni idea que hacer.
(seria instancia de una clase creada con new si fuera cpp)

Si es un bloque creado con HeapAlloc, malloc podrias hacer esto:
1)Agregar un segmento extra a la ejecutable con el tamaño suficiente para que entre el bloque creado. (o bien buscar un espacio vacio grande dentro de la ejecutable)
2)En el lugar que se llama HeapAlloc/Malloc, simplemente reemplazas la instruccion por
Código:
mov eax, offset_segmento_nuevo

De esta manera, la ejecutable usaria como nuevo bloque de memoria el segmento extra que le agregaste que siempre estaria en la misma direccion.


Posible problema... cuando se llame a Free la ejecutable tirará un error. Si el bloque es contantemente realocado no va servir. Solo te serviria si llama a HeapAlloc/Malloc una sola vez.


Saludos.
En línea


Servicio tecnico Blackberry http://www.serviciotecnicocelular.com
ignorantev1.1


Desconectado Desconectado

Mensajes: 424


/\ Así acabo cuando quiero programar...


Ver Perfil WWW
Re: Ubicación de variable en un proceso[Help]
« Respuesta #2 en: 25 Octubre 2011, 00:17 »

No entiendo tu planteamiento(me parece muy técnico), como te digo: "Estoy en ceros"  :-\

No modificaré el programa, ni siquiera pienso hacerlo ya puesto en memoria.
Aunque no conozco de esto, me imagino que existe una posibilidad a mi idea, ya que el mismo programa usa esta, digamos "variable" constantemente, por lo que debe existir una referencia "intacta" al lugar de la variable. Ten por seguro que "ha de ser" una simple variable, corriente, que seguramente ha sido declarada de la forma más común del lenguaje en el que haya sido programada la aplicación(seguramente C++):

Código
Int Variable;

Espero su ayuda!

Saludos y gracias!

En línea


_Enko


Desconectado Desconectado

Mensajes: 301



Ver Perfil
Re: Ubicación de variable en un proceso[Help]
« Respuesta #3 en: 25 Octubre 2011, 00:49 »

Habria que ver el programa en cuestion.
En el caso de "int Variable" si es cierto, es una direccion fija.

Pero que pasa si es esto:

Código:
class CClass{
public:
    int Variable
};

CClass *MiClase;


MiClase = new CClass;
MiClass->Variable = 5;

al llamar new CClass, la variable se almacena en algun lado de memoria que no es fijo. El offset del puntero de MiClass si es constante, pero a donde apunta si varia.

Hay que ver de que programa en cuestion se trata.
« Última modificación: 25 Octubre 2011, 00:58 por _Enko » En línea


Servicio tecnico Blackberry http://www.serviciotecnicocelular.com
.:UND3R:.


Desconectado Desconectado

Mensajes: 1.960


Ingeniería inversa


Ver Perfil WWW
Re: Ubicación de variable en un proceso[Help]
« Respuesta #4 en: 25 Octubre 2011, 02:18 »

Hola te invito a que lo subas, para ver que tal y comenta detalladamente que parámetros quieres cambiar o que modificación quieres hacerle al programa.

Saludos
En línea

ignorantev1.1


Desconectado Desconectado

Mensajes: 424


/\ Así acabo cuando quiero programar...


Ver Perfil WWW
Re: Ubicación de variable en un proceso[Help]
« Respuesta #5 en: 25 Octubre 2011, 03:03 »

No es un programa propio(claro está), no quiero hacerle ninguna modificación al programa, solo quiero leer datos en la memoria del programa, creo no me están entiendo.

Saludos!
En línea


tena


Desconectado Desconectado

Mensajes: 668



Ver Perfil
Re: Ubicación de variable en un proceso[Help]
« Respuesta #6 en: 25 Octubre 2011, 04:26 »

¿la direccion en donde se le asigna el valor a la variable no te sirve?

Ej.
401200 mov [variable] , valor

Si la direccion de la variable cambia, pues ponele un bpmw para ver donde le asigna un valor, y de esta forma tendrias por ej que en 401200 se le asigna el valor a dicha variable.

Luego te haces un loader debuguer, con el componente de Suei o lo que sea, un script etc. pones un bp en 401200, y cuando pare en el bo tomas el contenido de la variable.

o directamente desde ollydbg, le pones un bp conditional log, que cada vez que pase por 401200 te loguee el valor de [variable].

slds
En línea
tena


Desconectado Desconectado

Mensajes: 668



Ver Perfil
Re: Ubicación de variable en un proceso[Help]
« Respuesta #7 en: 25 Octubre 2011, 04:45 »

o como explica en este tute
http://foro.elhacker.net/ingenieria_inversa/tutorial_hallar_pointers_offset_con_ce_mhs5-t342767.0.html
En línea
.:UND3R:.


Desconectado Desconectado

Mensajes: 1.960


Ingeniería inversa


Ver Perfil WWW
Re: Ubicación de variable en un proceso[Help]
« Respuesta #8 en: 25 Octubre 2011, 16:09 »

No es un programa propio(claro está), no quiero hacerle ninguna modificación al programa, solo quiero leer datos en la memoria del programa, creo no me están entiendo.

Saludos!

Creo que te estoy entendiendo quieres saber localizar el lugar(address) en donde el programa realiza una modificación de una variable.

ayer realicé un tutorial sobre eso explica como encontrar una variable de un juego y luego encontrar el address en donde modifica esa variable:

http://foro.elhacker.net/ingenieria_inversa/tutorialcreacion_de_trainers_con_ollydbg_y_cheat_engine-t342664.0.html

Si tienes dudas con el tutorial (si es que solventa la pregunta que tienes jeje) te las respondo inmediatamente, saludos
En línea

ignorantev1.1


Desconectado Desconectado

Mensajes: 424


/\ Así acabo cuando quiero programar...


Ver Perfil WWW
Re: Ubicación de variable en un proceso[Help]
« Respuesta #9 en: 25 Octubre 2011, 19:06 »

@Under

Al poner el BP en la posición de memoria de la variable que necesito me aparece lo siguiente:

Citar
MOV EAX, [Local.73]

Eso no me sirve, ya que sigue siendo relativa la ubicación que busco.

Saludos y gracias!
En línea


.:UND3R:.


Desconectado Desconectado

Mensajes: 1.960


Ingeniería inversa


Ver Perfil WWW
Re: Ubicación de variable en un proceso[Help]
« Respuesta #10 en: 25 Octubre 2011, 19:55 »

@Under

Al poner el BP en la posición de memoria de la variable que necesito me aparece lo siguiente:

Eso no me sirve, ya que sigue siendo relativa la ubicación que busco.

Saludos y gracias!

si pones un breakpoint on memory en Local.73?, el método del tutorial serviría para encontrar el address dentro del ejecutable, que es lo que buscas.
 ya que encontraste MOV EAX, [Local.73] puedes hacer un injerto para operar con el contenido de Local.73 y de manera indirecta tendría siempre la variable.
también puede ser que la variable sea asignada por el sistema (VirtualAlloc) y desde el retorno de tal API podrías hacer un injerto que guardara en otro lugar el valor de EAX, que sería el VA en donde se localizó la nueva memoria virtual

Saludos
En línea

tena


Desconectado Desconectado

Mensajes: 668



Ver Perfil
Re: Ubicación de variable en un proceso[Help]
« Respuesta #11 en: 26 Octubre 2011, 04:35 »

Si solo queres loguear valores, Podes poner un bp conditional log en la direccion de dicha variable, y que te loguee el contenido de la [variable] cuando escribe ahi.

Saludos
En línea
ignorantev1.1


Desconectado Desconectado

Mensajes: 424


/\ Así acabo cuando quiero programar...


Ver Perfil WWW
Re: Ubicación de variable en un proceso[Help]
« Respuesta #12 en: 28 Octubre 2011, 04:36 »

Mmmm, pues sigo intentando, las posiciones varían segun la maquina, lo de "hacer el injerto" no me sirve...



Intentaré lo del bp condicional... a ver qué resulta...

También he leido algo y me topé con que "base address", no sé qué con eso...

A ver, a ver: ¿Cómo encuentro la dirección absoluta ese dato?, Sumandole qué con qué o restandole qué con qué... ¿Quién ayuda?
Saludos y gracias!
« Última modificación: 28 Octubre 2011, 04:44 por ignorantev1.1 » En línea


.:UND3R:.


Desconectado Desconectado

Mensajes: 1.960


Ingeniería inversa


Ver Perfil WWW
Re: Ubicación de variable en un proceso[Help]
« Respuesta #13 en: 28 Octubre 2011, 05:06 »

Puedes utilizar un script que hice en donde colocas la address y te entrega el RAW (lo que comúnmente muestran los editores hexadecimales)
 

http://foro.elhacker.net/ingenieria_inversa/scriptscript_para_calcular_offset_de_un_ejectuable-t340094.0.html

Si eres de los que quiere entender de manera manual y no a través de script puedes ver el comentario del script ya que expliqué detalladamente como es la "fórmula"

de todas formas para ejecutar el script necesitas el plugins para olly OllyScript

luego vas a la pestaña plugins verás OllyScript te ubicas en el y presionas RUN y eliges el script que está en el post que previamente lo guardaste en txt y lo eliges con eso saldrá una ventana preguntando el address a calcular tan simple como eso

Saludos
En línea

ignorantev1.1


Desconectado Desconectado

Mensajes: 424


/\ Así acabo cuando quiero programar...


Ver Perfil WWW
Re: Ubicación de variable en un proceso[Help]
« Respuesta #14 en: 29 Octubre 2011, 19:20 »

A ver, a ver si te entiendo:

¿Los datos se empiezan a almacenar en la sección ".data"?
Bueno, supongo que a esa sección corresponde "RAW" o "RVA" del que haces referencia, pero para que sea valido es necesario sumarle "imagebase"... ¿sí?

Ahora:

Estos datos se pueden obtener leyendo la info PE del programa, y el programa para cualquier maquina tiene la misma cabecera(ya lo comprobé), o sea que "RAW" + "imagebase" es igual para todas las maquinas, pero hay algo que cambia, y supongo "en tiempo de ejecución".

Disculpame si no entiendo, pero no tengo mucha experiencia en esto, así que si estoy mal, por favor, ¿a qué datos te refieres?...

Gracias y saludos!
En línea


Páginas: [1] 2 Ir Arriba Respuesta Imprimir 

Ir a:  

Powered by SMF 1.1.16 | SMF © 2006-2008, Simple Machines