Autor
|
Tema: Loader para memoria variable (Leído 3,715 veces)
|
Marcelo!
Desconectado
Mensajes: 14
|
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
|
|
|
En línea
|
|
|
|
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!
|
|
|
En línea
|
MCKSys Argentina "Si piensas que algo está bien sólo porque todo el mundo lo cree, no estás pensando."
|
|
|
Marcelo!
Desconectado
Mensajes: 14
|
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]
|
|
|
En línea
|
|
|
|
Geovane
Desconectado
Mensajes: 207
|
¡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
|
|
|
En línea
|
|
|
|
MCKSys Argentina
|
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!
|
|
|
En línea
|
MCKSys Argentina "Si piensas que algo está bien sólo porque todo el mundo lo cree, no estás pensando."
|
|
|
Marcelo!
Desconectado
Mensajes: 14
|
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?
|
|
|
En línea
|
|
|
|
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... Saludos!
|
|
|
En línea
|
MCKSys Argentina "Si piensas que algo está bien sólo porque todo el mundo lo cree, no estás pensando."
|
|
|
Marcelo!
Desconectado
Mensajes: 14
|
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.
|
|
|
En línea
|
|
|
|
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!
|
|
|
En línea
|
MCKSys Argentina "Si piensas que algo está bien sólo porque todo el mundo lo cree, no estás pensando."
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
[MANUAL] Crear loader paso a paso con ABEL Loader Generator v2.31 by fêñR¡§
Ingeniería Inversa
|
Canuto-JuanJ1
|
0
|
7,995
|
13 Septiembre 2007, 17:56 pm
por Canuto-JuanJ1
|
|
|
Crear la misma variable en diferentes posiciones de memoria
Programación C/C++
|
naderST
|
2
|
2,407
|
20 Mayo 2011, 01:37 am
por naderST
|
|
|
Corrupción de memoria en C++ al pasar una variable
Programación C/C++
|
egyware
|
4
|
2,655
|
27 Noviembre 2011, 17:39 pm
por Eternal Idol
|
|
|
[Duda]Como resuelve el PE Loader direcciones de memoria en secciones ejecutables
Programación C/C++
|
BloodSharp
|
2
|
2,597
|
24 Septiembre 2014, 19:46 pm
por BloodSharp
|
|
|
¿Cuánto espacio ocupa una variable de Ruby en memoria?
Programación General
|
Ali Baba
|
0
|
2,539
|
15 Marzo 2018, 05:04 am
por Ali Baba
|
|