Я пытаюсь (в учебных целях) воспользоваться уязвимостью функции gets (), используя технику ориентированного на возврат программирования (ROP). Целевая программа - это консольное приложение Windows, которое в какой-то момент запрашивает некоторый ввод, а затем использует get () для сохранения ввода в локальном массиве длиной 80 символов.
Я создал файл, содержащий 80 символов «a» в начале + некоторые дополнительные символы + адрес 0x5da06c48 для перезаписи старого указателя EIP.
Я открываю файл в текстовом редакторе и копирую содержимое в консоль в качестве ввода. Я использовал IDA Pro (или OllyDbg) для установки точки останова сразу после возврата из функции gets () и заметил, что адрес был поврежден - он был установлен на 0x3fa03f48 (две 3f замены).
Я пробовал и другие адреса - часть из них работает хорошо, но в большинстве случаев адрес поврежден (иногда символы отсутствуют или заменены, иногда урезаны).
Как преодолеть эту проблему? Любое предложение будет высоко оценено!