[CODIGO FUENTE] FindDMAAddy - Función de puntero multinivel de C ++

  • Hola Invitado, ¿Quieres ganar dinero con GamerzHacking?, estamos necesitando creadores de contenido en game hacking o pirateria de juegos ingresa al siguiente enlance para mayor informacion AQUI
  • Hola Invitado, ¿Creas contenido sobre game hacking en tu blog o sitio web?, ¿Te gustaria formar una alianza para asi poder generar mas trafico en tu sitio y seguir creciendo como comunidad? INGRESA AQUI


24
Me Gusta
16
Temas

Mstik

Moderador
Registrado
4 May 2021
Temas
16
Mensajes
36
Mejores respuestas
0
¡Esta es una pregunta común!
¿Cómo encuentro la dirección final de un puntero multinivel usando C ++?
¿Cómo usar un puntero en C ++?
¿Cómo calcular punteros con compensaciones?

Un puntero en sí mismo apunta a una sola dirección. Pero cuando tiene una lista de desplazamientos(offsets), puede recorrer esa lista de punteros para encontrar la dirección final.

Cuando encuentra un puntero en Cheat Engine, lo que esta encontrando es una ruta de una dirección a otra usando punteros y compensaciones relativas. Así es como las computadoras ubican y actúan sobre los datos almacenados en la memoria. ¡No es magia! La lógica detrás de esto se basa en 2 características importantes de la programación orientada a objetos moderna:
  • Las aplicaciones se vuelven eficientes en memoria al asignar dinámicamente objetos de memoria solo cuando es necesario y asignar punteros para señalarlos solo cuando sea necesario.
  • Las clases pueden contener variables miembro que son punteros, específicamente punteros a otros objetos en la memoria.

La baseAddress o el primer puntero en la cadena de punteros es generalmente uno que existe en la memoria estática, lo que significa que siempre está ubicado en la misma dirección o se puede acceder a él usando un desplazamiento relativo de la dirección base de un módulo.

Imagina este código:

C++:
Porfavor, Acceder o Registrarse para ver el contenido de los códigos!

Clase:
la salud está en la compensacion 0x0, el escudo está en la compensacion 0x4 y el nombre está en la compensacion 0x8, porque int es una variable de 4 bytes en este ejemplo (32 bits x86)

Primera línea:
PlayerClass es el nombre de la clase, el "*" le dice al compilador que este es un puntero a un objeto de tipo PlayerClass y su identificador es "localPlayer". En este ejemplo, no se inicializa. Es decir, no se le ha asignado memoria.

Segunda línea:
cuando el jugador inicia un juego, al objeto localPlayer se le asigna un lugar en la memoria en el montón y al puntero se le asigna la dirección del objeto.

La dirección del objeto localPlayer no sería coherente y necesitaría encontrar un puntero. Si utilizó "Buscar qué accede a esta dirección" de Cheat Engine o el escáner de puntero, encontrará un puntero con la BaseAddress del puntero localPlayer y un desplazamiento de 0x8.

Simplemente usa la misma lógica que la computadora para encontrar la dirección de la variable. En el código fuente de esta aplicación, si quisiera obtener el valor de la variable de nombre, usaría el "->" (el operador de desreferencia de la estructura) así: "localPlayer-> nombre".

Cuando el compilador compila este código en ensamblador, la lógica que sigue el código es la siguiente:
  1. Desreferencia del puntero localPlayer para obtener la dirección dinámica del objeto
  2. Agregue desplasamiento de 0x8 para llegar al puntero de nombre
  3. Desreferencia del puntero de nombre para obtener la dirección dinámica del valor del nombre

Podemos hacerlo manualmente para cada puntero haciendo algo similar a:
C++:
Porfavor, Acceder o Registrarse para ver el contenido de los códigos!

Pero no quiere perder el tiempo haciendo eso para cada puntero, en su lugar, crea una función que lo hace por usted:

queremos emular esa lógica exacta en nuestra función y hacer que pueda manejar la eliminación de referencias de múltiples compensaciones .

Aquí hay una función que hace eso para x86 y x64, es un híbrido de código de Fleep, Rake & IXSO

External:
C++:
Porfavor, Acceder o Registrarse para ver el contenido de los códigos!

Para obtener la dirección de munición de arma actual, lo haría así:
C++:
Porfavor, Acceder o Registrarse para ver el contenido de los códigos!
Interno:
C++:
Porfavor, Acceder o Registrarse para ver el contenido de los códigos!
 
Última edición:
AdBlock Detectado

Lo sentimos, los anuncios son molestos!

Claro, el software de bloqueo de anuncios hace un gran trabajo al bloquear anuncios, pero también bloquea funciones útiles de nuestro sitio web. Para obtener la mejor experiencia en el sitio, deshabilite su AdBlocker.

He desactivado AdBlock    No, gracias