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.

.:UND3R:.

Cita de: ignorantev1.1 en 25 Octubre 2011, 19:06 PM
@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

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

tena

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

ignorantev1.1

#12
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!

.:UND3R:.

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

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

ignorantev1.1

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!

_Enko

No vi el programa en cuestion, pero estoy seguro que en este momento el problema que estas teniendo es porque no entiendes el concepto de un puntero, y para el caso, hasta puede ser puntero a puntero a putnero etc...

suponte este codigo

int var_a = 5


Que significa eso?
"var_a"  es un entero igual a 5.

pero ese en un lenguaje de programacion. para el cpu no existe tal cosa como "var_a"

Para el cpu existe una direccion de momeria, digamos 40100. El contenido de esa direccion de memoria es 5.

Para que veas la diferencia en pseudo codigo de maquina:

var_a seria equivalente a 40100
[var_a] contenido var_a seria equivalente a 5
[40100] conenido de 40100 es equivalente a 5


Ahora que pasa si el contenido es una direccion de memoria?

[var_a] = 40200
contenido de var_a es equivalente a 40200 que es otra direccion de memoria

por ejemplo, se podria dar el caso de
var_b = 6
donde var_b seria equivalente a la direccion de memoria 40200

de esta manera, var_a apuntaria a donde se encuentra var_b


Entonces, para llegar a "6" a partir de var_a tendrias que:
Citar
tomar el contenido de var_a
ese contenido seria 40200
luego, tomar el contenido de 40200
y ahi llegarias a  [40200]  == 6
recuerda que puede ser puntero a puntero a puntero a puntero a "tu variable"



ignorantev1.1

@Enko_

:xD Claro que sé lo que es un puntero, ese no es el problema, en serio.

Mira:



Supongamos que en otra maquina, abro el proceso y leo el offset 4146D2, me dá "0". Por que, supongo, el rango de valores no es el mismo, ¿por qué?, no sé, memoria disponible, OS, 86 o 64, ¿qué sé yo?, pero no es el mismo...

Saludos y gracias!





_Enko

#17
si la variable realmente es "LOCAL" entonces esta metida en la pila, y no en el segmento .DATA

4146D2 es .CODE segment, es decir, no es la variable, es la direccion de ejecucion del programa, no tiene nada que ver con una variable.. la variable serial LOCAL.78 y no tenemos ni idea de lo que es... como ya te dije, si realmente es local, es una direccion de la pila.

Estas traceando algo mal... y con la screenshot no se ayuda mucho




.:UND3R:.

Cita de: ignorantev1.1 en 29 Octubre 2011, 22:25 PM
@Enko_

:xD Claro que sé lo que es un puntero, ese no es el problema, en serio.

Mira:



Supongamos que en otra maquina, abro el proceso y leo el offset 4146D2, me dá "0". Por que, supongo, el rango de valores no es el mismo, ¿por qué?, no sé, memoria disponible, OS, 86 o 64, ¿qué sé yo?, pero no es el mismo...

Saludos y gracias!






Cito la info de mi script:
CitarFórmula:
     RVA: Valor relativo en memoria (Relative Value Address)                                 
     VA: Valor absoluto en memoria (Value Absolute)                                                               
     RAW: Dirección en el disco

     -OllyDBG Nos muestra por defecto direciones de tipo VA
     VA(Value Absolute)=ImageBase+RVA     

     Ejemplo: 40101D=400000(ImageBase)+101D(RVA)

     -Si queremos saber el raw de un address ubicado en la cabezera PE (PE header)
     se debe restar address-ImageBase=RVA=RAW     

     Ejemplo: 400056(VA)-400000(ImageBase)=56h(RAW)   

     -Si queremos saber el raw de un address ubicado en una sección     
     se debe hacer lo siguiente:

     Obtener el RVA del addres:
     Address-ImageBase=RVA

     luego a RVA restarle los siguientes valores:     
     RVA-(VirtualAddress-PointerToRawData)=RAW     

     *VirtualAddress y PointerToRawData varían en cada sección


No todas las cabeceras PE son iguales,el address que comentas es un VA que es lo muestra OllyDBG con el script colocas esa address y te dará el RAW teniendo el RAW que es la dirección del ejecutable en el disco duro abres un editor hexadecimal verás lo mismo, puedes corroborar nopeando el OP-Code del address (click derecho fill with nop's) eso hará que en el address se escriban 90 hexadecimal si con un editor hex pones el RAW deberías ver 90 obviamente si guardaste los cambios

Podrías enviarnos el ejecutable para que te saquemos de las dudas

Saludos

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

ignorantev1.1

CitarNo todas las cabeceras PE son iguales

Claro, pero la cabecera del programa en cuestión es la misma para todas las maquinas.

CitarRVA: Valor relativo en memoria (Relative Value Address)                                 
     VA: Valor absoluto en memoria (Value Absolute)                                                               
     RAW: Dirección en el disco

¿Estos datos son de la info del PE?

No quería llegar a esto, pero si gustan el programa en custión aquí está, solo que deben registrarse para poderlo usar:

http://download.tibia.com/tibia931.exe

Saludos y gracias!