Todos los archivos .exe y .dll cuando se cargan en la memoria se denominan "módulos".
Al agregar direcciones a su tabla de Cheat Engine, y especialmente al usar punteros, a menudo encontrará la dirección que se muestra de esta manera:
O tal vez así:
server.dll + 004EE83
Esto está usando el desplazamiento relativo de la dirección de un módulo. Para ver si una dirección está desplazada de un determinado módulo, asegúrese de habilitar esto:
Luego, en el visor de memoria, use "Ir a la dirección" a la dirección. Independientemente de si se trata de datos o código, esto le dirá de qué módulo está desplazado.
Para ver todos los módulos cargados por el proceso en Cheat Engine y ver sus direcciones, haga esto:
También puede usar Dissect PE Headers para ver información relativa:
MZ-Start es la dirección del módulo tal como está actualmente cargado en la memoria. ImageBase preferido se analiza directamente desde el encabezado PE y es la ubicación en la que prefiere cargarse. Si esta dirección de memoria ya está tomada, se reubicará.
Cuando se ejecuta un .exe, el cargador de Windows crea un proceso para él y le da su propio espacio de memoria virtual. El cargador carga el ejecutable en la memoria y luego en los archivos .dlls que son llamados por el proceso. El encabezado PE para .dll define una dirección de ImageBase. El cargador de Windows intentará cargar el archivo .dll en el espacio de memoria virtual del proceso que lo requiere. Si ese espacio ya está ocupado, se cargará en una ubicación diferente. Si esto sucede, las direcciones de códigos rígidos en nuestros hacks no funcionarán.
Ahora digamos que tenemos un puntero:
ac_client.exe + 109B74
Ahora el ImageBase extraído del encabezado PE de ac_client.exe es "00400000".
Solo podemos tener un ejecutable para cada proceso, que es un espacio de memoria vacío hasta que se carga ac_client.exe. No hay nada que bloquee la carga de ac_client.exe en su ImageBase. Entonces, la dirección base de un .exe es siempre la misma.
El ÚNICO momento en que no se carga un archivo .exe en la base de imágenes almacenada en los encabezados PE es cuando ASLR (Aleatorización del diseño del espacio de direcciones) está habilitado en el sistema operativo y el indicador DynamicBase está configurado para permitir que el sistema operativo aleatorice la dirección virtual del módulo .
Podemos evaluar esto antes de colocarlo en el código.
ac_client.exe + 109B74
00400000 + 109B74
509B74
Esta es la definición de una dirección estática, puede ser relativa a la dirección base de un ejecutable en el binario en el disco, pero siempre es estática en la memoria después de que se han producido reubicaciones.
Pero para .DLL que se pueden reubicar:
"server.dll + 004EE83" funciona en Cheat Engine porque Cheat Engine evalúa la dirección de server.dll. CE obtendrá la dirección de server.dll y la reemplazará con la dirección en la que se carga el módulo.
Entonces, digamos que la dirección del módulo server.dll es 0x10000000, cheat Engine evaluará:
server.dll + 004EE83
0x10000000 + 004EE83
1004EE83
La evaluación anterior se realiza mediante cheat engine mientras el programa se está ejecutando.
Pero cuando intenta utilizar esto en un entrenador externo, debe evaluar "server.dll" + 004EE83 usted mismo. Hay varias formas de hacerlo y discutiremos una de ellas ahora.
Para hacer esto externamente, puede usar esta función que se ha usado ampliamente llamada dwGetModuleBaseAddress.
Básicamente, utiliza la API de Windows
Debe configurar su proyecto en UNICODE para que esto funcione, si no es un novato, puede cambiarlo fácilmente para que funcione con MBCS.
Función:
La llamada a la función
Puede obtener más información sobre ToolHelp32Snapshot:
Creditos
Rake
Al agregar direcciones a su tabla de Cheat Engine, y especialmente al usar punteros, a menudo encontrará la dirección que se muestra de esta manera:

O tal vez así:
server.dll + 004EE83
Esto está usando el desplazamiento relativo de la dirección de un módulo. Para ver si una dirección está desplazada de un determinado módulo, asegúrese de habilitar esto:

Luego, en el visor de memoria, use "Ir a la dirección" a la dirección. Independientemente de si se trata de datos o código, esto le dirá de qué módulo está desplazado.
Para ver todos los módulos cargados por el proceso en Cheat Engine y ver sus direcciones, haga esto:

También puede usar Dissect PE Headers para ver información relativa:

MZ-Start es la dirección del módulo tal como está actualmente cargado en la memoria. ImageBase preferido se analiza directamente desde el encabezado PE y es la ubicación en la que prefiere cargarse. Si esta dirección de memoria ya está tomada, se reubicará.
Cuando se ejecuta un .exe, el cargador de Windows crea un proceso para él y le da su propio espacio de memoria virtual. El cargador carga el ejecutable en la memoria y luego en los archivos .dlls que son llamados por el proceso. El encabezado PE para .dll define una dirección de ImageBase. El cargador de Windows intentará cargar el archivo .dll en el espacio de memoria virtual del proceso que lo requiere. Si ese espacio ya está ocupado, se cargará en una ubicación diferente. Si esto sucede, las direcciones de códigos rígidos en nuestros hacks no funcionarán.
Ahora digamos que tenemos un puntero:
ac_client.exe + 109B74
Ahora el ImageBase extraído del encabezado PE de ac_client.exe es "00400000".
Solo podemos tener un ejecutable para cada proceso, que es un espacio de memoria vacío hasta que se carga ac_client.exe. No hay nada que bloquee la carga de ac_client.exe en su ImageBase. Entonces, la dirección base de un .exe es siempre la misma.
El ÚNICO momento en que no se carga un archivo .exe en la base de imágenes almacenada en los encabezados PE es cuando ASLR (Aleatorización del diseño del espacio de direcciones) está habilitado en el sistema operativo y el indicador DynamicBase está configurado para permitir que el sistema operativo aleatorice la dirección virtual del módulo .
Podemos evaluar esto antes de colocarlo en el código.
ac_client.exe + 109B74
00400000 + 109B74
509B74
Esta es la definición de una dirección estática, puede ser relativa a la dirección base de un ejecutable en el binario en el disco, pero siempre es estática en la memoria después de que se han producido reubicaciones.
Pero para .DLL que se pueden reubicar:
"server.dll + 004EE83" funciona en Cheat Engine porque Cheat Engine evalúa la dirección de server.dll. CE obtendrá la dirección de server.dll y la reemplazará con la dirección en la que se carga el módulo.
Entonces, digamos que la dirección del módulo server.dll es 0x10000000, cheat Engine evaluará:
server.dll + 004EE83
0x10000000 + 004EE83
1004EE83
La evaluación anterior se realiza mediante cheat engine mientras el programa se está ejecutando.
Pero cuando intenta utilizar esto en un entrenador externo, debe evaluar "server.dll" + 004EE83 usted mismo. Hay varias formas de hacerlo y discutiremos una de ellas ahora.
Para hacer esto externamente, puede usar esta función que se ha usado ampliamente llamada dwGetModuleBaseAddress.
Básicamente, utiliza la API de Windows
Porfavor,
Acceder
o
Registrarse
para ver el contenido de las URL!
para obtener una instantánea de todos los módulos cargados para el proceso dado, luego itera a través de todos los módulos cargados y encuentra el módulo con el nombre del módulo que le asignó. Devuelve un uintptr_t a la dirección del módulo. Ingresa el ProcessID y el nombre del módulo y sale la dirección del módulo.Debe configurar su proyecto en UNICODE para que esto funcione, si no es un novato, puede cambiarlo fácilmente para que funcione con MBCS.
Función:
C++:
Porfavor,
Acceder
o
Registrarse para ver el contenido de los códigos!
La llamada a la función
C++:
Porfavor,
Acceder
o
Registrarse para ver el contenido de los códigos!
Puede obtener más información sobre ToolHelp32Snapshot:
Porfavor,
Acceder
o
Registrarse
para ver el contenido de las URL!
Porfavor,
Acceder
o
Registrarse
para ver el contenido de las URL!
Creditos
Rake