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

Получение значения от статического адреса процесса


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

День добрый. На основании кода от 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. Не могу найти кнопки редактирования сообщения в теме которую не прошла модерацию. Поэтому создаю новую тему ознакомившись с правилами форума

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

Те что на картинке динамические, подчеркнул зелёным. Я вбивая напрямую их адрес в "Card = 0x29579798;" в скрипт из первого поста, могу получить параметр который они содержат. А вот статический ((GameAssembly.dll+2A03E88) = 7FEC9133E88), к которому кодом потом нужно будет прибавлять указатели, я считывать не умею. Какой функцией именно его можно считать? И можно ли её добавить в мой код или это уже совсем другой будет?

Спойлер

Если я правильно понял вопрос, то тот который я могу считать адрес через С++ "0х29579798", он меньше чем 0х7FFFFFFF, но тот который не могу, он больше  (GameAssembly.dll+2A03E88) = 7FEC9133E88 > 7FFFFFFF

 

В итоге поставил DWORD64 на переменную с адресом. При отладчике в (LPVOID)Card адрес стал теперь полностью виден. Но код всё равно не читает что по нём находится

 

(извиняюсь за 3 подряд поста, но кнопки удалить не вижу, а изменить быстро пропадает. В итоге понял что код читает и статические адреса, в этом проблемы нет. Проблема в том что именно тот статический адрес который мне нужен, он длиннее чем те, которые он читать может... как прочитать этот адрес? 7FEC9133E88 ? Или придётся искать указатель на более короткий? 

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

5 часов назад, MaGzMa сказал:

(извиняюсь за 3 подряд поста, но кнопки удалить не вижу, а изменить быстро пропадает. В итоге понял что код читает и статические адреса, в этом проблемы нет. Проблема в том что именно тот статический адрес который мне нужен, он длиннее чем те, которые он читать может... как прочитать этот адрес? 7FEC9133E88 ? Или придётся искать указатель на более короткий? 

компилишь какой версии 32bit или 64bit? предоставленный winapi 32bit, не может полностью контачить с 64bit.

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

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

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

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