mraklbrw Опубликовано 27 декабря, 2016 Поделиться Опубликовано 27 декабря, 2016 Есть программа TrainMe. В ней есть переменная: золото. Через Cheat Engine я нашёл указатель первого уровня на неё:"THREADSTACK0"-00000CC850 Через 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, является динамическим.Как найти статический базовый адрес / указатель на него? Ссылка на комментарий Поделиться на другие сайты Поделиться
Trix Опубликовано 28 декабря, 2016 Поделиться Опубликовано 28 декабря, 2016 Активно занимался подобным на C# там использовалась стандартная библиотека system diagnostics Пример был достаточно простым, скину ссылку на c#-вский пример. Думаю с C++ примерно так же) Работает как часы, надо еще сказать одну оговорочку, которая была в моем проекте, 32х и 64х разрядные проги не имеют друг к другу доступа(да, с формулировкой я мог напутать) Но в итоге при компиляции было необходимо указать компилить под ту или иную разрядность) Ссылка на комментарий Поделиться на другие сайты Поделиться
Xipho Опубликовано 28 декабря, 2016 Поделиться Опубликовано 28 декабря, 2016 x64 трейнер сможет получить доступ и к х86 игре, и к х64 игре. Наоборот - нет. Ссылка на комментарий Поделиться на другие сайты Поделиться
gmz Опубликовано 28 декабря, 2016 Поделиться Опубликовано 28 декабря, 2016 (изменено) 16 час назад, mraklbrw сказал: Как найти статический базовый адрес / указатель на него? никак. юзай K32EnumProcessModules, получи базу 1 модуля (ехе) +адрес или NtQueryInformationProcess+ReadProcessMemory (PROCESS_BASIC_INFORMATION.PebBaseAddress) Изменено 28 декабря, 2016 пользователем gmz Ссылка на комментарий Поделиться на другие сайты Поделиться
2zolo2 Опубликовано 28 декабря, 2016 Поделиться Опубликовано 28 декабря, 2016 mraklbrw, почитай про THREADSTACK http://forum.cheatengine.org/viewtopic.php?p=5638945#5638945 Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения