MaGzMa Опубликовано 16 мая, 2020 Поделиться Опубликовано 16 мая, 2020 (изменено) День добрый. На основании кода от imaginary в Получение значения от статического адреса процесса Спойлер #include <Windows.h> #include <TlHelp32.h> #include <iostream> using namespace std; int GetProcesByName(wstring name) { HANDLE snapShot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); PROCESSENTRY32 pInfo = { 0 }; pInfo.dwSize = sizeof(PROCESSENTRY32); while (Process32Next(snapShot, &pInfo)) { if ( pInfo.szExeFile == name) { CloseHandle(snapShot); return pInfo.th32ProcessID; } } CloseHandle(snapShot); return 0; } int main() { int pID = GetProcesByName(L"calculator.exe"); cout << pID ; return 0; } немного добавив пару строк для чтения адреса Спойлер #include <Windows.h> #include <TlHelp32.h> #include <iostream> #include <string> DWORD pid; long int Card = 0x7FEC9133E88; int MyCard; using namespace std; int GetProcesByName(wstring name) { HANDLE snapShot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); PROCESSENTRY32 pInfo = { 0 }; pInfo.dwSize = sizeof(PROCESSENTRY32); while (Process32Next(snapShot, &pInfo)) { if (pInfo.szExeFile == name) { CloseHandle(snapShot); return pInfo.th32ProcessID; } } CloseHandle(snapShot); return 0; } int main() { int pID = GetProcesByName(L"Gwent.exe"); HANDLE pHandle = OpenProcess(PROCESS_VM_READ, FALSE, pID); ReadProcessMemory(pHandle, (LPVOID)Card, &MyCard, sizeof(MyCard), 0); cout << MyCard; return 0; } Итог, любой динамический адрес который состоит из 8 цифр читать получается. Но если я пытаюсь прочесть статический GameAssembly.dll+2A03E88 или он же 7FEC9133E88 то данным кодом не получается. Как мне прочесть этот адрес? Подскажите пожалуйста. PS. Не могу найти кнопки редактирования сообщения в теме которую не прошла модерацию. Поэтому создаю новую тему ознакомившись с правилами форума Изменено 16 мая, 2020 пользователем MaGzMa Ссылка на комментарий Поделиться на другие сайты Поделиться
Hack Опубликовано 16 мая, 2020 Поделиться Опубликовано 16 мая, 2020 адрес 8 байт, а sizeof(long int)? Ссылка на комментарий Поделиться на другие сайты Поделиться
MaGzMa Опубликовано 16 мая, 2020 Автор Поделиться Опубликовано 16 мая, 2020 Ааа, это я забыл вернуть. Там int был. Просто экспериментировал... Но и даже так он всё равно считывал адреса динамические Ссылка на комментарий Поделиться на другие сайты Поделиться
Hack Опубликовано 16 мая, 2020 Поделиться Опубликовано 16 мая, 2020 10 часов назад, MaGzMa сказал: Но и даже так он всё равно считывал адреса динамические адреса меньше 7FFFFFFF? Ссылка на комментарий Поделиться на другие сайты Поделиться
MaGzMa Опубликовано 16 мая, 2020 Автор Поделиться Опубликовано 16 мая, 2020 (изменено) Те что на картинке динамические, подчеркнул зелёным. Я вбивая напрямую их адрес в "Card = 0x29579798;" в скрипт из первого поста, могу получить параметр который они содержат. А вот статический ((GameAssembly.dll+2A03E88) = 7FEC9133E88), к которому кодом потом нужно будет прибавлять указатели, я считывать не умею. Какой функцией именно его можно считать? И можно ли её добавить в мой код или это уже совсем другой будет? Спойлер скрин Если я правильно понял вопрос, то тот который я могу считать адрес через С++ "0х29579798", он меньше чем 0х7FFFFFFF, но тот который не могу, он больше (GameAssembly.dll+2A03E88) = 7FEC9133E88 > 7FFFFFFF В итоге поставил DWORD64 на переменную с адресом. При отладчике в (LPVOID)Card адрес стал теперь полностью виден. Но код всё равно не читает что по нём находится (извиняюсь за 3 подряд поста, но кнопки удалить не вижу, а изменить быстро пропадает. В итоге понял что код читает и статические адреса, в этом проблемы нет. Проблема в том что именно тот статический адрес который мне нужен, он длиннее чем те, которые он читать может... как прочитать этот адрес? 7FEC9133E88 ? Или придётся искать указатель на более короткий? Изменено 16 мая, 2020 пользователем MaGzMa Ссылка на комментарий Поделиться на другие сайты Поделиться
Hack Опубликовано 17 мая, 2020 Поделиться Опубликовано 17 мая, 2020 (изменено) 5 часов назад, MaGzMa сказал: (извиняюсь за 3 подряд поста, но кнопки удалить не вижу, а изменить быстро пропадает. В итоге понял что код читает и статические адреса, в этом проблемы нет. Проблема в том что именно тот статический адрес который мне нужен, он длиннее чем те, которые он читать может... как прочитать этот адрес? 7FEC9133E88 ? Или придётся искать указатель на более короткий? компилишь какой версии 32bit или 64bit? предоставленный winapi 32bit, не может полностью контачить с 64bit. Изменено 17 мая, 2020 пользователем Hack Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения