C ++, Cheat Engine / OllyDBG encuentra la dirección "estática" base de punteros multinivel

Estoy de vuelta otra vez, frustrado y buscando desesperadamente ayuda: D.

Estoy tratando de crear un truco para un programa simple, básicamente será un archivo .dll que cambiará el valor de un entero del programa principal cuando se lo inyecte utilizando su dirección base. La cuestión es que no puedo encontrarlo usando el motor de trampa principalmente porque hay punteros de múltiples niveles con NEGATIVO. compensaciones por ejemplo

//Starting pointer address
0x0033FCF0 -> 200

//Finding second level pointer using "Find out what's accessing this address" in Cheat Engine
**(mov eax,[ebp+08])** // **EAX=0x00000007** , **EPB=0x0033FCE8 => mov 00000007,[0033FCE8+08]**

2nd Level Pointer:
**(0033FCE8+18) -> 200**

Así que procedo a buscar el siguiente puntero usando "Averigua qué ..." pero mientras uso T-SEARCH con la dirección de punteros de segundo nivel y obtengo como 7 - 8 nuevas direcciones estáticas.

La cuestión es que no puedo decir cuál es la correcta porque el motor de trucos se NEGA a permitirme agregar un puntero usando un NEGATIVO. compensar

Ejemplo

Base Pointer:
**mov eax,[epb-18] !!!** // Notice the **MINUS**

Y encima de todo, Cheat Engine se niega a aceptar un puntero con un desplazamiento negativo!

Entonces, ¿hay otra forma de encontrar la dirección base de punteros de múltiples niveles? Las soluciones de OlyDBG / Idapro son bienvenidas. ¡Muchas gracias chicos

Aquí está el código fuente del programa simple que estoy tratando de hackear:

#include <iostream>
#include <conio.h>
#include <windows.h>
#include <stdlib.h>

int main(){
    int hp = 100;
    while(1){
        std::cout << hp << std::endl;
        Sleep(3000);
        hp += 10;
        system("cls");
    }
    return 0;
}

Lo que estoy tratando de hacer es editar el entero hp con este .dll

#include <windows.h>
#define BASE    0xBASE_POINTERS_ADDRESS_WHICH_I_NEED_TO_FIND
#define OFFSET  0xTHE_OFFSET
#define VALUE   90
void MainFunction()
{
      while(1)
      {
            if (GetAsyncKeyState(VK_MENU)&0x8000 && GetAsyncKeyState('C')&0x8000) 
            MessageBox(0,L"Alt + C was pressed!",L"MessageBox! ",0);
            *(int*)((*(int*)BASE) + OFFSET) = VALUE;

            Sleep(100); //Let the program rest, otherwise it hogs cpu resources.
      }
}

BOOL WINAPI DllMain(HINSTANCE MyInstance,DWORD reason_for_call,LPVOID PointerToVoid)
{
         if (reason_for_call == DLL_PROCESS_ATTACH) CreateThread(0,0,(LPTHREAD_START_ROUTINE)&MainFunction,0,0,0);
         return true;
}

Por cierto, estoy tratando de hackear el HP! ~ Oh, espera, ya dije eso, oh bueno, lo que sea;)

¡Gracias chicos, que Dios los bendiga a todos!

Respuestas a la pregunta(1)

Su respuesta a la pregunta