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!