Pointers y offset de World of Warcraft

Iniciado por Sefi, 8 Abril 2012, 02:07 AM

0 Miembros y 5 Visitantes están viendo este tema.

Sefi

Hola muy buenas a todos, después de 1 semana de buscar me he decidido a postear mi primer post.

Quería pedir a ver si alguien me hecha una pequeña mano en el problema que tengo (no pido solución, solo orientación).

El tema es el siguiente:

Estoy haciendo un pequeño programa en C++ para aprender mas en general, el programa se basa en ver la vida del personaje del WOW (o al menos para empezar).

Actualmente consigo llegar a la dirección de memoria que almacena la vida del personaje en tiempo de ejecución, pero como todos sabran una vez que se reinicia el juego la dirección de memoria cambia y se "pierde" hay que buscarla de nuevo, de ahí viene el titulo del post, necesitaría encontrar el Pointer y el offset que apuntan a este valor, mas bien como a prender a buscar estos valores necesitaría.
He conseguido que en C++ ver la vida a través de la dirección de memoria.

Me he leído ya una infinidad de tutoriales, a cual cada uno se acerca mas a lo que quiero.

Actualmente "creo" que se llegar al pointer + offset he utilizado este vídeo como referencia:
http://www.youtube.com/watch?v=asDRjFCg87o
Ya que busca el pointer y el off set en varios niveles.

Actualmente sigo los pasos y cuando al fin creo que he llegado al pointer estático con los offset, que actualmente me funcionan, incluso cambio de mapa y de char y de servidor y sigue en funcionamiento, pero salgo del juego y entro de nuevo... desaparecen






Tambien he intentado utilizar el ollydbg como referencia y buscarlo a través como indica este post de otro foro:
http://www.blizzhackers.cc/viewtopic.php?f=181&t=345914

Citar
1. Google: ollydbg. Unzip and run ollydbg.exe
2. Start Wow.exe
3. In Ollydbg. File -> Attach -> WoW.exe -> Attach. Give the debugger a few seconds to parse the big list of modules and hurry up to resume the execution (press the "play" button on toolbar), so WoW can be happy.
4. View -> executable modules (or press ALT-E) and select WoW. Press Enter or double click it.
5. Right-click -> Analysis -> Analyse code (or press CTRL-A). Wait for the debugger to parse the modules. This is good that we will be able to spot beginning/ends and params of the functions found.
6. In the new window, right click -> Search for -> All referenced text strings. Wait a few seconds for the debuger to parse the modules.
7. In the new window, right-click -> Search for text. Type "Usage:" and make sure the entire scope is checked. Press Enter on a found entry to get sent in the CPU window to the function body.
8. Use the markings made by the analysis to find the beggining of the function.
9. Press CTRL-L in the text strings window to go to the next function

The good part, these pointers never change, they are static.
The sad part, these are all public LUA function, so nothing juicy like your character position, orientation or things like that.

But its always "healthier" to call UnitHealth(player) than trying to read the health variable directly from the data segment, because that one is different each time you load the game.

I'd like some feedback from anyone who found any more "juicy" internal functions. C'mon, don't be "shy"  

Pero en este caso ni siquiera me acerco veo las direcciones "usage health("unit");" pero nada mas...

PD: El cheat engine no lo puedo utilizar el wow tiene un spyscann que detecta el programa y me lo cierra, utilizo el mhs ya que se "esconde" de manera brutal ;)

En breves subiré un vídeo y fotos. Saludos y gracias de antemano


By sirvivi at 2012-04-07


By sirvivi at 2012-04-07

Иōҳ

Has hecho el tutorial del CE?, viene incluido y te será de mucha ayuda!, si es que la vida se maneja del lado del cliente puedes hacer bastante...

Recuerda que pueden haber punteros de muchas bases, o como lo llama el CE Multi level pointer.

A veces lo más "fácil" es hacer un Scanner Signature o Scanner AoB, simplemente un scanner de bytes.

Encuentra una dirección de inicio (Byte Signature), luego un patrón único de bytes, con esos datos podes scanear en memoria, teniendo en cuenta que cada región de memoria tiene sus propios permisos.

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

Sefi

http://foro.elhacker.net/empty-t342767.0.html
[Tutorial] Hallar Pointers & Offset con CE & MHS5

Sí, me lo he leído, también hay un tutorial de Plants vs Zombies (entre otros).

Voy a probar con el Scanner AoB a ver.

Sefi

#3
Vale creo que lo estaba haciendo mal...
En vez de ir a buscar quien escribía el valor de la vida, iba a buscar aquien accedia a ese valor, y claro acceder podría acceder muchisimas funciones del wow para verificar cosas, pero escribir la vida solo 1.

Escogía al "azar" de todos los valores para encontrar el puntero y obviamente estaba mal..

Pero ahora solo me sale que para escribir el valor es solo 1 dirección, lo cual me estoy acercando, el problema que no entiendo lo que significa:

[EAX+EDX*4],ECX

la sentencia mov y ptr la entiendo pero a donde la mueve / apunta?

dejo imagen al respecto



Uploaded with ImageShack.us

Edit:


Mas abajo se ve la tabla y se ve que el valor de ECX es mi vida actual.

Pero es el valor en sí no apunta a ningún sitio.
EAX+EDX*4 es en la dirección de memoria a guardar que justamente es la que obtuve ya.

La pregunta es de donde saca el valor ECX? no apunta a ningún sitio, como si de "arte de magia" supiera que valor le toca...

El valor ECX es: 21DFF = 138751  , justamente mi vida

El valor  [EAX+EDX*4] = 2B56FDE8, casualmente es la dirección de memoria que almacena la vida actualmente.

Hay algo que se me escapa... y no se el que

Edit2:

Corregidme si me equivoco, según veo el valor de ECX se lo da un poco mas arriba (si movéis un poco la imagen donde tengo subrayado en negrita)

MOV ECX, DWORD PTR[EBP+C]
// ECX = Dirección de EBP + 12
Pues voy a la posición de memoria que indica EBP + C (y también miro en EBP) y no hay nada
Creo que me estoy calentando el coco en cosas que realmente son fáciles pero no las veo..


Arkangel_0x7C5

lo que estas viendo es una función, parece que esta echo en c++ o algo de eso. los parametros en las funciones se pasan a partir de [ebp+8], el siguiente parámetro estaría en [ebp+0x0C] y asi sucesivamente. el puntero a this se lo están pasando por ecx. Yo lo que haría seria buscar los call a esa función.

Saludos

.:UND3R:.


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

Sefi

Gracias UND3R ^^ pero ya me habia leído el tuto =P, recuerdo también que no puedo utilizar cheat engine ya que tienen controlado este software, pero me estoy acercando muchiiiiiisimo ya! haber si me sale y os cuento ;)

Sefi

Ahora si que estoy totalmente perdido:

Los Static Pointers segun el CE y el MHS se ven verde no?

Al fin cuando lo logro alcanzar, y obtengo también los offsets, y el programa me funciona perfectamente... al reiniciar el wow ese "STATIC" pointer desaparece...

address =  0x01EA5C20;  //Pointer estatico
Nivel_1 =  0x80D0;  // Offset Nivel 1
Nivel_2 =  0x100;  //Offset Nivel2

Adjunto imagen... ya no sé por done tirar a buscar, si la teoría no es ni correcta no sé que hacer ya. Algún consejo?



Uploaded with ImageShack.us

Иōҳ

Como NOTA:

Cuando yo hacía cheats, el puntero era de color negro y funcionaba para todas las pcs  :silbar:

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

Sefi

Correcto, pero el valor que obtenías era diferente para cada vez que inicias el juego, mi idea es hace un programa, lo cual necesito el valor de origen, el estático.