Перейти к содержанию

Поиск базового адреса программы


Рекомендуемые сообщения

Есть программа TrainMe.
В ней есть переменная: золото.
Через Cheat Engine я нашёл указатель первого уровня на неё:
"THREADSTACK0"-00000CC8
50

Через Cheat Engine я определил базовый адрес программы: 0046FF18На C++ я написал такой код:

Spoiler

#include <iostream>
#include <cstdlib>
#include <string>
#include <cstring>
#include<Windows.h>
#include <Shellapi.h>
#include <process.h>
#include <tlhelp32.h>
#include <psapi.h>
#pragma comment( lib, "psapi" )

using namespace std;

DWORD Base_Adress = 0x0046FF18; // Базовый адрес программы(игры)
DWORD pid;
DWORD value_1 = 0x00000CC8; // Первое смещение
DWORD get_value;
DWORD get_value_2;
DWORD get_value_3;

int main()
{

    HWND hwnd = FindWindowA(0, ("D:\\TrainMe.exe"));

    GetWindowThreadProcessId(hwnd, &pid);

    if (hwnd)
        cout << "process id: " << pid << endl;
    else
        cout << "Window isn't found." << endl;

    HANDLE phandle = OpenProcess(PROCESS_ALL_ACCESS, FALSE, pid);

    ReadProcessMemory(phandle, (LPVOID)(Base_Adress - value_1), &get_value, sizeof(get_value), 0); // Получаем 1-ое значение

    cout << get_value << endl; // 1431787091

    DWORD adres_2 = get_value + 0x50;

    //cout << "adr2 = " << adres_2 << endl;

    ReadProcessMemory(phandle, (LPVOID)adres_2, &get_value_2, sizeof(get_value_2), 0); // Получаем 2-ое значение

    cout << get_value_2 << endl;


    cin.get();
    cin.get();

    return 0;
}

 

Он работает.
Но, есть одно Но:
базовый адрес программы, определённый через Cheat Engine, является динамическим.
Как найти статический базовый адрес / указатель на него?

Ссылка на комментарий
Поделиться на другие сайты

Активно занимался подобным на C# там использовалась стандартная библиотека system diagnostics

Пример был достаточно простым, скину ссылку на c#-вский пример. Думаю с C++ примерно так же)

Работает как часы, надо еще сказать одну оговорочку, которая была в моем проекте, 32х и 64х разрядные проги не имеют друг к другу доступа(да, с формулировкой я мог напутать) Но в итоге при компиляции было необходимо указать компилить под ту или иную разрядность)

Ссылка на комментарий
Поделиться на другие сайты

16 час назад, mraklbrw сказал:

Как найти статический базовый адрес / указатель на него?

никак. юзай K32EnumProcessModules, получи базу 1 модуля (ехе) +адрес

или NtQueryInformationProcess+ReadProcessMemory (PROCESS_BASIC_INFORMATION.PebBaseAddress)

 

Изменено пользователем gmz
Ссылка на комментарий
Поделиться на другие сайты

×
×
  • Создать...

Важная информация

Находясь на нашем сайте, Вы автоматически соглашаетесь соблюдать наши Условия использования.