Я не могу изменить значения адресов, которые не имеют смещения - PullRequest
0 голосов
/ 21 июня 2019

Первый не работает, а второй работает хорошо но почему?

WriteInt32 ((IntPtr) 0x4EE444, 0); WriteInt32 ((IntPtr) 0x510CE0, 0);

не выдает сообщения об ошибке, просто не меняет его

1 Ответ

0 голосов
/ 23 июля 2019

Адрес 0x4EE444, вероятно, не имеет правильной постоянной защиты памяти , необходимой для записи.Это обычно тот случай, когда вы имеете дело с исполняемой памятью.В этом случае вы должны использовать VirtualProtectEx , чтобы получить правильные разрешения памяти.Обычно PAGE_EXECUTE_READWRITE - лучший выбор, потому что вам нужен доступ на запись, но вы также хотите, чтобы он сохранил права на исполняемый файл, потому что если вы удалите разрешение на выполнение для страницы памяти, это вызовет ошибку, если указатель инструкции укажет на эту область памяти ине имеют прав на выполнение.

Перед перезаписью каких-либо инструкций по сборке, вы захотите сделать это.Хорошей практикой также может быть восстановление исходной защиты страницы после того, как вы изменили ее, чтобы сделать ее более скрытной.

Для вашей проблемы, касающейся отсутствия сообщений об ошибках, возвращается значение большинства функций API Windows, включая WriteProcessMemory и VirtualProtect.будет указывать на успех или неудачу функции, если это не так, вы всегда можете вызвать GetLastError () afterwords и проверить код ошибки.

...