Ubicación de variable en un proceso[Help]

Iniciado por ignorantev1.1, 24 Octubre 2011, 22:01 PM

0 Miembros y 1 Visitante están viendo este tema.

ignorantev1.1

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!

_Enko

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
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.

ignorantev1.1

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 (cpp) [Seleccionar]
Int Variable;

Espero su ayuda!

Saludos y gracias!


_Enko

#3
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:


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.

.:UND3R:.

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

Solicitudes de crack, keygen, serial solo a través de mensajes privados (PM)

ignorantev1.1

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!

tena

¿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


.:UND3R:.

Cita de: ignorantev1.1 en 25 Octubre 2011, 03:03 AM
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

Solicitudes de crack, keygen, serial solo a través de mensajes privados (PM)

ignorantev1.1

@Under

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

CitarMOV EAX, [Local.73]

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

Saludos y gracias!