окно — Что такое куки безопасности в C ++?

Я прочитал из Google, что он используется для контроля переполнения буфера на уровне приложения и вызывается CRT.
Это также говорит о том, что

«По сути, при входе в функцию, защищенную от переполнения, файл cookie помещается в стек, а при выходе значение в стеке сравнивается с глобальным файлом cookie. Любая разница между ними указывает на то, что произошло переполнение буфера и приводит к немедленное прекращение действия программы «.

Но я не мог понять, как это работает? Пожалуйста помоги.

9

Решение

«Cookie» — это не более чем произвольное значение.

Итак, основная идея заключается в том, что вы записываете выбранное значение в стек перед вызовом функции. Хотя это, вероятно, не очень хорошее значение, давайте произвольно выберем 0x12345678 в качестве значения.

Затем он вызывает функцию.

Когда функция возвращается, она возвращается к правильному месту в стеке и сравнивает это значение с 0x12345678. Если значение изменилось, это указывает на то, что вызванная функция записана вне области стека, в которую было разрешено записывать, поэтому она (и этот процесс в целом) считается ненадежной и закрывается.

В этом случае вместо выбора 0x12345678 система выбирает другое значение на регулярной основе, например при каждом запуске системы. Это означает, что с меньшей вероятностью случайно будет получено правильное значение — это может произойти один раз, но если оно записывает определенное значение там, когда изменяется правильное / выбранное значение, оно в итоге записывает неправильное значение, и проблема будет обнаружена.

Вероятно, также стоит отметить, что эта основная идея не особенно нова. Например, еще во времена MS-DOS компиляторы Borland и Microsoft записывали известное значение в самый конец стека перед вызовом main в вашей программе. После main вернулись, они перепроверили это значение. Затем будет выведено сообщение об ошибке (прямо при выходе из программы), если значение не соответствует ожидаемому.

19

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

Это именно то, что говорится в объяснении, но вы можете заменить «cookie» на «некоторое значение». Когда функция вызывается, она помещает некоторая ценность в стеке. Когда функция возвращается, она проверяет это снова, чтобы видеть, изменилось ли это.

Нормальное поведение функции — не касаться области памяти. Если значение там изменилось, это означает, что код функции каким-то образом перезаписал его, и это означает, что произошел переполнение буфера.

7

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