Как получить базовый адрес другого процесса? (ASLR)

Мне нужно получить адрес базового адреса .exe, который имеет случайный базовый адрес при каждом запуске. Я пробовал это, но это не похоже на работу:

int Base = (DWORD)GetModuleHandle("Test.exe");

Что случилось?

0

Решение

Кажется, вы пытаетесь получить базовый адрес другого процесса. К сожалению, GetModuleHandle работает только для модулей в текущем процессе. Чтобы достичь своей цели, вам нужно использовать PSAPI или CreateToolhelp32Snapshot извлечь список модулей другого процесса. И базовый адрес есть в списке.

2

Другие решения

Мне нужно получить базовый адрес / адрес точки входа .exe, который имеет случайный базовый адрес при каждом запуске. Программа использует ASLR.

Я буду использовать его для редактирования определенных фрагментов памяти в правильном процессе

Чтобы записать данные в другой процесс, вам необходимо использовать WriteProcessMemory(), который требует от вас открыть HANDLE в процессе пишется.

Вы получаете это HANDLE с помощью OpenProcess(), запрашивающий PROCESS_VM_OPERATION а также PROCESS_VM_WRITE разрешения. OpenProcess() принимает в качестве входных данных идентификатор процесса, который вы можете получить из:

Увидеть Перечисление процессов а также Перечисление всех процессов.

Ни в коем случае вам не нужно определять базовый адрес процесса, в который выполняется запись. Позвольте системе отслеживать эту информацию для вас. Все, что вам нужно, это открытый HANDLE к процессу.

1

По вопросам рекламы [email protected]