Получение базового адреса процесса в vb.net

Хорошо, это странно. Мне нужно получить базовый адрес процесса в vb.net (не моего приложения). Чтобы копаться в памяти другого процесса (чтобы изучить значения, которые мне нужны, прежде чем кодировать их в vb.net), я использовал чит-движок. Cheat Engine дает мне такой адрес:

Client.exe + 00BBD310

Проблема здесь в том, что адрес Client.exe меняется всякий раз, когда я повторно запускаю программу. У меня уже есть объявление процесса в моем коде, поэтому я пробовал это:

bAddress = handle_s.MainModule.BaseAddress

Где handle_s — это рассматриваемый процесс. Проблема здесь в том, что значение, которое я получаю в bAddress, не является значением, которое представлено чит-движками «Client.exe». выше сумма, однако, поскольку значение каждый раз меняется, мне нужен метод, с помощью которого можно просто получить значение в vb.net.

Любые советы/предложения приветствуются.


person FraserOfSmeg    schedule 25.02.2019    source источник
comment
Разве это не 00BBD310 смещение? Значение Module.Address + BBD310.   -  person Jimi    schedule 25.02.2019
comment
@Джими, действительно, это просто смещение. В чит-движке я могу видеть, чему равен базовый адрес + смещение. Из этого я могу изменить уравнение, чтобы получить базовый адрес в чит-движке. Это значение не равно module.Baseaddress, что является моей проблемой.   -  person user6916458    schedule 25.02.2019
comment
Должен добавить, что я Фрейзерофсмег. Моя мобильная учетная запись и настольная учетная запись не синхронизируются!   -  person user6916458    schedule 25.02.2019
comment
Трудно что-то сказать, не зная, что такое Client.exe. Вы уверены, что этот исполняемый файл имеет только один процесс? Кроме того, можете ли вы сказать, что адрес, показанный (читерским движком), на самом деле является точкой входа основного модуля, а не другой ссылкой на адрес? Смещение заголовка, возможно. Если вы изначально не рассчитали смещение правильно: выравнивание может быть сложным. Вы можете найти значения, которые у вас есть, с адресами, которые вы можете получить от Process.GetProcessByName(), и посмотреть, сможете ли вы понять, на какой адрес указывает чит-движок. Скучная процедура, я знаю.   -  person Jimi    schedule 26.02.2019
comment
может это АСЛР   -  person zerocool    schedule 16.03.2019


Ответы (1)


MainModule.BaseAddress дает вам адрес, по которому был загружен модуль (источник)

Следовательно, это абсолютный динамический виртуальный адрес модуля. Если 0x0BBD310 является относительным смещением, то добавление 0x0BBD310 к MainModule.BaseAddress даст вам адрес вашей переменной во время выполнения.

Если это не совпадает с тем, что вы видите в Cheat Engine, то вы либо подключены к неправильному процессу, либо запутались.

person GuidedHacking    schedule 17.04.2020