C ++, Cheat Engine / OllyDBG encontrando o endereço “estático” base de ponteiros de vários níveis

Estou de volta, frustrado e procurando desesperadamente por ajuda: D.

Estou tentando criar um truque para um programa simples, ele basicamente será um arquivo .dll que alterará o valor de um número inteiro do programa principal quando ele é injetado usando seu endereço base. O problema é que não consigo encontrá-lo usando o mecanismo de fraude, principalmente porque existem indicadores de vários níveis com NEGATIVO? compensações. por exemplo

//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**

Então, procuro encontrar o próximo ponteiro usando "Descubra o que é ....", mas enquanto estiver usando o T-SEARCH com o endereço de ponteiros de segundo nível e fico com 7 - 8 novos endereços estático

O problema é que não sei dizer qual é o correto, porque o cheat engine se RECUSA em permitir que eu adicione um ponteiro usando um NEGATIVO? deslocamento.

Exemplo

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

E acima de tudo, o Cheat Engine se recusa a aceitar um ponteiro com um deslocamento negativ

Então, existe outra maneira de encontrar o endereço base a partir de ponteiros de vários níveis? As soluções OlyDBG / Idapro são bem-vindas. Muito obrigado pessoal!

Aqui está o código fonte do programa simples que estou tentando invadir:

#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;
}

O que estou tentando fazer é editar o número inteiro hp com 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;
}

Pelo jeito que estou tentando hackear o hp! ~ Oh, espere, eu já disse isso, oh bem, tanto faz;)

Obrigado, que Deus abençoe a todos!

questionAnswers(1)

yourAnswerToTheQuestion