Думаю, это наиболее подходящий раздел для такого вопроса. Суть вот в чём: обьясните на пальцах зачем нужен nop-слайдинг, и как он вообще работает ? Данные лезут в стек, но как это использовать для эксплутации уязвимости типа переполнение буфера ? Для тестов юзаю Code: #include <stdio.h> int main() { char buf[10]; char ch; int counter = 0; while((ch = getchar()) != 10) //Enter { buf[counter++] = ch; } printf("%s\n", buf); printf("okay"); getchar(); return 0; } и православный ollydbg 1.10 Заранее благодарю за ответ .
Незнаю что ты имееш в виду под Nop слайдингом.Например в твоем тесте,проверка в (ch = getchar()) != 10) абсолютно безполезна,тебе нужно проверять не символ который вводиться,а counter.Соответственно раз у тебя проверка не правильно работает,то с консоли можна ввести заведомо больше символов чем 10. А это в свою очередь произведет к переполнению,и затиранию данных в стеке.В втоем случае затреться адрес возврата,так как у тебя стоит return 0;В принципе в твоем примере после вызова return 0; программа просто должна завершить свою работу.Заместь этого после переполнения адрес возврата уже будет другим и выведеться ошибка. Потести этот пример.Он более наглядный.После переполнения "Hello" ненапечатаеться.Я думаю ты в Ольге разберешся почему так? Code: #include <stdio.h> #include <windows.h> #include <iostream.h> void test(); int main() { test(); cout<<"Hello"; Sleep(4000); return 0; } void test() { char buf[10]; char ch; int counter = 0; while((ch = getchar()) != 10) //Enter { buf[counter++] = ch; } printf("%s\n", buf); printf("okay"); return; }