Loader para memoria variable

Iniciado por Marcelo!, 10 Mayo 2019, 15:54 PM

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

Marcelo!

Hola a todos, solamente una gota de su conocimiento.
Hay alguna forma, o algún generador de loader para poder realizar como en el siguiente ejemplo?

Mov dword ptr ds:[D65E40],eax
Mov dword ptr ds:[eax],39383938

Mi intención es sobeescribir con el valor 39383938hex cualquier valor que haya en la dirección que indica eax que es variable y además se encuentra en memoria.
La dirección D65E40 es fija.
Cualquier ayuda plis esperaré su respuesta.
Gracias

MCKSys Argentina

Hola!

Ingresa "loader" en el buscador de la web de ricardo narvaja:


http://ricardonarvaja.info.info/WEB/buscador.php


y encontraras muchas teorias sobre como crear tu propio loader.

Saludos!
MCKSys Argentina

"Si piensas que algo está bien sólo porque todo el mundo lo cree, no estás pensando."


Marcelo!

Ok gracias sr MCKSys, anteriormente ya había ingresado a la página con el mismo fin, pero seguramente me pasé por alto muchas cosas, lo volveré a revisar.

En realidad estaba practicando con dup y process patcher, y logré parchear código en memoria en otros progs.

La única dificultad que encuentro es la siguiente, ya que este ejecutable detecta los parcheos en memoria:

Por ejemplo
1. El programa calcula una dirección en memoria cada vez distinta en eax, por ejemplo eax=00B4B4B4 y lo guarda en otra dirección conocida la cual no cambia:

mov dword ptr ds:[D65E40],eax
En este caso eax=00B4B4B4



2. Ahora ingreso mi serial falso y por supuesto, el programa hace muchas transformaciones y vuelteos y lo convierte por ejemplo en 39383938 y lo guarda en la dirección que había calculado antes:

mov dword ptr ds:[00B4B4B4],39383938

Luego compara mi clave ya transformada con la clave correcta, la cual me anoté en papel y verifiqué que la clave correcta se mantiene en cada ejecución, al menos en la computadora que uso.

3. Si cambio en el dump en olly mi clave falsa por la clave correcta, el programa aparece registrado y funcional pero solamente hasta que se cierre.

Entonces cómo puedo decirle al loader que tome la dirección calculada (00B4B4B4) y en ella cargue la clave que tengo anotada? Ya que esta dirección cambia en cada ejecución.

Cualquier ayuda es muy apreciada e incluso me gustaría pensar en alguna compensación por los logros obtenidos en el foro.[/i][/i]

Geovane

¡Hola

Si al cerrar él pierde la activación, es porque está editando en una región fuera de las secciones ejecutables.

Usted necesita saber dónde dentro del intervalo de memoria, dentro de las secciones fijas, donde usted define o busca por la serie.

Saludos
Para servicios, envíe un mensaje privado, sólo para servicios en curso hasta fecha de 10/06/2019

MCKSys Argentina

Cita de: Marcelo! en 11 Mayo 2019, 20:00 PM
Entonces cómo puedo decirle al loader que tome la dirección calculada (00B4B4B4) y en ella cargue la clave que tengo anotada? Ya que esta dirección cambia en cada ejecución.

Hola!

Seguramente, esa direccion esta apuntada por otra variable. Busca hacia atrás en el codigo y seguramente, encontraras el lugar donde esta el puntero a dicha variable.

Saludos!
MCKSys Argentina

"Si piensas que algo está bien sólo porque todo el mundo lo cree, no estás pensando."


Marcelo!

Gracias Geovanne por la respuesta, me fijaré esa parte de las secciones en la memoria.

Asimismo al Sr. MCKSys
Citar:
Seguramente, esa direccion esta apuntada por otra variable. Busca hacia atrás en el codigo y seguramente, encontraras el lugar donde esta el puntero a dicha variable.

Es justamente lo que voy haciendo, solamente que ya encontré el puntero a esa variable y justamente es D65E40, en esa dirección se guarda la variable, esta variable es la dirección donde se encuentra mi clave.

A partir de ahí es que no sé cómo hacer para que el loader vaya a la dirección que muestra la variable y escriba los valores.
Es posible hacer esto con alguna herramienta?

MCKSys Argentina

Hola!

A ver si te entiendo:

En 0xD65E40 se guarda el valor que quieres cambiar o el puntero al valor que quieres cambiar?

Si es lo primero, puedes hacer WriteProcessMemory en 0xD65E40 con el valor que quieres colocar.

Si es lo segundo, haces ReadProcessMemory en 0xD65E40 y luego WriteProcessMemory en el valor devuelto.

A menos que no sea ninguna de las anteriores...  :P

Saludos!
MCKSys Argentina

"Si piensas que algo está bien sólo porque todo el mundo lo cree, no estás pensando."


Marcelo!

Citar:
A ver si te entiendo:

En 0xD65E40 se guarda el valor que quieres cambiar o el puntero al valor que quieres cambiar?

Si es lo primero, puedes hacer WriteProcessMemory en 0xD65E40 con el valor que quieres colocar.

Si es lo segundo, haces ReadProcessMemory en 0xD65E40 y luego WriteProcessMemory en el valor devuelto.



Ok gracias MCKSys Argentina, justamente es lo segundo, en D65E40 se guarda el puntero al valor que quiero cambiar.

Ahora si no es mucho una consultica más ya que no soy programador, habrá alguna herramienta que se pueda usar o que me puedan recomendar para esta tarea? O necesariamente se tendría que programar. Ya que al menos quedaría conforme con saber si está dentro de mis posibilidades o ver otra opción.

MCKSys Argentina

No estoy seguro de conocer alguna tool que te permita hacer eso. Los patcher te permiten cambiar codigo del binario, pero no creo que te permitan trabajar sobre un puntero a variable.

Lo mas sencillo de hacer seria usar topo para agregar una sección (o encontrar una "cueva") en el binario, redirigir el entrypoint y hacer tus cambios en esa parte y luego dejar que el programa corra.
Ahora, si el programa cambia esa direccion luego, vas a tener que hacer un hook para que luego de ese cambio, se ejecute tu codigo y asi registrar la app.

Lamentablemente, no conozco algo automatico.

Saludos!
MCKSys Argentina

"Si piensas que algo está bien sólo porque todo el mundo lo cree, no estás pensando."