Ayuda con la Pila (Stack)

Iniciado por isidora, 30 Noviembre 2011, 00:56 AM

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

isidora

Hola :$

Primero que nada creo que este tema debería ir en el foro de Ingeniería Inversa, pero me referiré más a ASM. Estoy utilizando CheatEngine como herramienta para hacker algunos juegos, me he topado con una memoria que utilizan una gran variedad de juegos que se llama "Unreal Engine" donde la mayoría de los valores se almacena en la pila, por ejemplo esta es una típica dirección que accede a la vida del personaje:

mov eax,[esp+08]
mov ecx,[eax] < - - -[dirección que almacena la vida y muchos valore más]
mov edx,[esp+04]   


En el caso que inyecte esta dirección o la cambie, por ejemplo, darle 100 de vida al personaje: 

mov [eax], 64h < - - -[Al realizar esto lo único que conseguiré es que el juego arroje error]

En CheatEngine existe una herramienta que permite ver la pila, se ve algo asi:



Pero me preguntaba cómo lograr encontrar la dirección que verdaderamente accede  al valor que entra en la pila y luego poder inyectar un poco de código.
Les agradecería enormemente cualquier información sobre la pila y su comportamiento en tiempo de ejecución.
-De antemano Gracias!

.:UND3R:.

Creo que esto debería ir en Ingeniería inversa, en cuanto a tu error, que error exactamente te marca? podrías destildar el bypass exception en OllyDBG para ver que error te aparece, yo creo que puede ser que el nemónico que insertas junto con sus operandos son más grande que por lo que se nopean las instrucciones siguientes (por causa de falta de espacio). Para determinar exactamente el punto en donde se toma los valores, ya localizado el valor con CE se debe atachear el programa y luego de atacharlo ir a tal dirección y colocar un Hardware Breakpoint ya que este no relentiza el juego mientras se está puesto, si gustas puedes probar con un Memory breakpoint, realizas una operación con la vida, ej perder o ganar y se detendrá en una instrucción en donde utilice el valor de vida, lo más probable es que haya una instrucción SUB si perdimos vida o una ADD si esque ganamos, como solución se puede invertir el nemónico

PD: recuerda que el hardwarebreakpoint se detiene una instrucción a continuación
por lo que si tienes:
sub [eax],10
xor ebx,ebx

y se detiene en xor ebx,ebx por hardware breakpoint la instrucción a modificar es sub [eax],10

Saludos

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

isidora

Gracias por tu respuesta HUNDER, exactamente no es un error, me refería a que el juego se cierra inmediatamente. Te agradecería enormemente una explicación acerca de cómo realizar un Hardware Breakpoint en OllyDBG, ya que no tengo mucha experiencia con él.

Saludos!

Иōҳ

el problema es que en ollydbg el game si va a parar y si es ONLINE lo más probables es que te bote a patadas XD.

de todas maneras respondiendo a tu pregunta aquí encuentras un buen manual para ollydbg

http://ricardonarvaja.info/WEB/INTRODUCCION%20AL%20CRACKING%20CON%20OLLYDBG%20DESDE%20CERO/

EL CE también tiene esa misma opción (o casi la misma), en la address encontrada, una vez puesta en el listado del Cheat Table, haces click derecho "find out this address access" (o algo así XD), y te saldrá el listado de todas las address que acceden a ella.


HUNDER? xD, y cómo dice HUNDER el tamaño de esas instrucciónes es más grande, de la que estás sobreescribiendo, por ende pisa las instrucciones de abajo, lo que hace el CE es avisarte si deseas NOPearlos, y al hacer eso estás quitandole una instrucción al programa, la respuesta de es la esperada y el programa crashea (posiblemente) xD

Nox.
Eres adicto a la Ing. Inversa? -> www.noxsoft.net

x64core

Citarrealizar un Hardware Breakpoint en OllyDBG
brevemente lo que hace es parar el programa en el lugar o instruccion indicada, podes crear uno posicionando el foco
sobre el la instruccion donde quieras que pare el programa  y presionando F2

isidora

Hola Иōҳ

El juego no es Online, si no que utiliza una memoria complicada (Unreal Engine algo así como la protección Xlive, pero no actúa como una protección que a la hora de Debugear la detecta y cierra el programa, Unreal Engine trabaja introduciendo los valores a la pila)

Algo así es lo que yo realizo: Una vez que tengo el valor, por ejemplo 100 tipo 4Bytes y con CheatEngine le doy con el secundario  y presiono "find out this address Access" encuentro la dirección que accede a ese valor sin ningún problema, lo que ocurre luego es que esa dirección que encuentro,  los valores que están trabajando el ella (el valor de 100 que mencione y una serie de valores más) se almacenas en la pila :/, y no tengo idea como lograr saber esos valores y poder encontrar la dirección que accede a mi valor (100).

Cita de: RHL en 30 Noviembre 2011, 22:36 PM
brevemente lo que hace es parar el programa en el lugar o instruccion indicada, podes crear uno posicionando el foco
sobre el la instruccion donde quieras que pare el programa  y presionando F2

RHL, muchas gracias sé que me ayudara.

Иōҳ

#6
Si no tienen ningún tipo de comprobación de integridad, puedes hacer sin ningún problema un codecave justo despues del mov eax,[esp+08], haces un jmp, hacía al codecave, puedes usar un MSGBOX para "imprimir" el valor del que contenga EAX. Por si lo necesitas, o toquetear el valor de EAX, cómo se te venga en gana :P!, teniendo en cuenta que si no sabes lo que haces puedes hacer que el juego te bote a patadas!


en mi web tengo un escrito sobre CodeCave:

http://www.noxsoft.net/2011/11/codecave-in-assembly/




Podrías enfocarte en que dirección está la instrucción, y no tanto en que dirección de la pila está el valor que estás buscando (solo una sugerencia).

Nox.




Eres adicto a la Ing. Inversa? -> www.noxsoft.net