Я понимаю, что типичная полезная нагрузка атаки переполнения буфера в стеке выглядит примерно так:
(обратный адрес) (обратный адрес) ...
(обратный адрес) (обратный адрес)
(обратный адрес) (обратный адрес)
(NOP) (NOP) (NOP) (NOP) ... (NOP)
(NOP) (NOP) (NOP) (ОБОЛОЧКА)
Я также понимаю, что успешное выполнение шелл-кода зависит от нескольких вещей:
- Повторяющаяся часть обратного адреса
полезной нагрузки должен перезаписать
возвратный указатель этого стекового фрейма
- Этот обратный адрес должен быть
адрес какой-то части NOP
слайд (или начало
Шеллкод)
Чего я не понимаю, так это того, что вредоносные программы, использующие эту технику, всегда могут правильно выполнить эти две вещи. Мне кажется, что для создания рабочей полезной нагрузки злоумышленник должен знать приблизительный адрес целевого буфера и его приблизительное расстояние от обратного адреса.
Являются ли эти два обычно довольно детерминированными? Например, если злоумышленник проведет несколько сеансов проб и ошибок, пока не заработает на своем компьютере, будет ли эта же полезная нагрузка работать на всех других компьютерах с точно такими же двоичными файлами?