Преимущества использования EncodePointer/DecodePointer

В чем преимущества использования EncodePointer/ DecodePointer в Windows?

MSDN скажите:
  Кодирование глобально доступных указателей помогает защитить их от использования.   Функция EncodePointer затуманивает значение указателя секретом, чтобы он не мог быть предсказан внешним агентом. Секрет, используемый EncodePointer, отличается для каждого процесса.

Теперь вопрос: если злоумышленник находится вне моей программы, то его адресное пространство отличается от моего адресного пространства, поэтому адрес в моем приложении не подходит для него. и если он может выполнить код в моем адресном пространстве, он может вызвать DecodePointer и использовать этот адрес для вызова закодированного указателя.

Итак, каково использование этих функций и как они помогают мне с повышенной безопасностью?

Ответ 1

У вас отсутствует намерение, EncodePointer() защищает от вредоносных данных. Прежде чем вредоносный код может стать вредным, он должен начать работать первым. Основные способы сделать это - перезаписать обратный адрес вызова функции или переписать указатель на функцию. Сама программа активирует код, соответственно возвращаясь из функции или вызывая указатель функции. EncodePointer защищает указатель на функцию, для злоумышленника не существует способа угадать, как закодировать данные, которые он пишет, чтобы после вызова программы DecodePointer() он все еще указывал на его код.

Данные не могут вызывать EncodePointer.

Ответ 2

Атакующие с повышенными привилегиями могут создать поток в вашем процессе. Код ядра также может отображать части виртуального адреса вашего процесса в другом пользовательском процессе и/или в системном процессе.

Использование EncodePointer только сделает вещи немного сложнее для злоумышленника, но ничего не гарантирует.