Мне нужно получить адрес базового адреса .exe, который имеет случайный базовый адрес при каждом запуске. Я пробовал это, но это не похоже на работу:
int Base = (DWORD)GetModuleHandle("Test.exe");
Что случилось?
Кажется, вы пытаетесь получить базовый адрес другого процесса. К сожалению, GetModuleHandle
работает только для модулей в текущем процессе. Чтобы достичь своей цели, вам нужно использовать PSAPI или CreateToolhelp32Snapshot
извлечь список модулей другого процесса. И базовый адрес есть в списке.
Мне нужно получить базовый адрес / адрес точки входа .exe, который имеет случайный базовый адрес при каждом запуске. Программа использует ASLR.
…
Я буду использовать его для редактирования определенных фрагментов памяти в правильном процессе
Чтобы записать данные в другой процесс, вам необходимо использовать WriteProcessMemory()
, который требует от вас открыть HANDLE
в процессе пишется.
Вы получаете это HANDLE
с помощью OpenProcess()
, запрашивающий PROCESS_VM_OPERATION
а также PROCESS_VM_WRITE
разрешения. OpenProcess()
принимает в качестве входных данных идентификатор процесса, который вы можете получить из:
CreateToolhelp32Snapshot()
/Process32First()
/Process32Next()
EnumProcesses()
.WTSEnumerateProcesses()
Увидеть Перечисление процессов а также Перечисление всех процессов.
Ни в коем случае вам не нужно определять базовый адрес процесса, в который выполняется запись. Позвольте системе отслеживать эту информацию для вас. Все, что вам нужно, это открытый HANDLE
к процессу.