Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.63/8: Рейтинг темы: голосов - 8, средняя оценка - 4.63
5 / 5 / 1
Регистрация: 10.03.2012
Сообщений: 121

Динамическое обнаружение ошибки переполнения буфера

24.03.2014, 15:00. Показов 1674. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Дипломное задание написать программу, которая на вход берет .exe и после обработки показывает возможно ли в данном .exe использование уязвимости переполнения буфера и (желательно) показать в какие местах!

Даже нет никаких идей как это сделать. Прошу подскажите у кого какие идеи есть, заранее спасибо!
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
24.03.2014, 15:00
Ответы с готовыми решениями:

Ошибка переполнения буфера
При первом запуске програма работает, после второго появляеться ошибка переполнения буфера. В чем дело?#include <iostream> #include...

Избавиться от переполнения буфера (asm)
Всем привет, на вашем форуме первый раз) Имея базовые знания по C++ и Assembler решил сварганить такую штуку: // test.cpp: определяет...

Отлов исключения переполнения буфера
Вот код #include <iostream> #include <string> #include <conio.h> #include <locale.h> #include <exception> using namespace std; ...

9
24.03.2014, 15:04

Не по теме:

Ну нихрена себе дипломное задание! Это где такое дают?

0
Вирусоборец
 Аватар для shestale
8618 / 4187 / 333
Регистрация: 22.02.2011
Сообщений: 13,721
24.03.2014, 16:01
PlayaRC, тему вы создали не в том разделе.
На каком языке вам нужна программа, и вашу тему мы тогда перенесем.
0
5 / 5 / 1
Регистрация: 10.03.2012
Сообщений: 121
25.03.2014, 15:33  [ТС]
С++

Добавлено через 2 часа 41 минуту
Вообще никаких идей? Знаю, что это возможно, так как такие проги существуют

Добавлено через 20 часов 41 минуту
У меня пока что две идеи:
1) (Самая тривиальная) Допустим есть программа, которая принимает на вход данные о человеке и сохраняет их где-то на сервере. Что, если запустить ее в фоновом режиме и спаммить все эти строки до тех пор, пока система не выдаст ошибку переполнения и не закроет программу.
2) (Как по мне, самый правильный способ) Нужно делать дизассемблирование данного .exe и анализировать полученный. Искать в нем строки и смотреть, есть ли там проверки для избежания переполнения

Что скажите?
0
Native x86
Эксперт Hardware
 Аватар для quwy
6853 / 3787 / 1024
Регистрация: 13.02.2013
Сообщений: 11,861
25.03.2014, 16:08
Цитата Сообщение от PlayaRC Посмотреть сообщение
Что, если запустить ее в фоновом режиме и спаммить все эти строки до тех пор, пока система не выдаст ошибку переполнения и не закроет программу.
Это скажет только о том, что в программе есть какая-то критическая ошибка, но никак не укажет даже на факт наличия переполнение буфера, не говоря уже о месте.

Цитата Сообщение от PlayaRC Посмотреть сообщение
Искать в нем строки и смотреть, есть ли там проверки для избежания переполнения
Эта задача крайне нетривиальна даже при наличии исходного кода. Что уж говорить про результаты дизассемблирования. Давайте прикинем на простейшем примере:
C
1
2
3
4
N = RecvSize(Socket);
p = malloc(N);
Recv(Socket, p);
...
Можете сказать, есть тут опасность переполнения?
1. Если RecvSize() возвращает размер данных независимо от Recv(), то за время выполнения потенциально долгого вызова malloc() могла прибежать еще сотня-другая байт и Recv() приняв их все, вызовет переполнение буфера p.
2. Если RecvSize() и Recv() являются свойствами/методами некоторого контекста состояние которого меняется только по требованию программиста, то переполнения быть не может потому что новые данные могут появиться только при вызове некого InquiryNetwork(), который в данном примере между RecvSize() и Recv() никто не вызывал.

Таким образом, без глубинного анализа всего, что касается ф-ций Recv() и RecvSize(), вообще нельзя сделать никаких выводов относительно наличия уязвимости. И это еще примитивнейшая ситуация, без всякого ветвления между вызовами функций, без вызова методов по ссылке и других не поддающихся статическому анализу прелестей. Может вы неправильно поняли задание? Или имелся в виду какой-то один конкретный случай переполнения, который более-менее узнаваем статически?
1
5 / 5 / 1
Регистрация: 10.03.2012
Сообщений: 121
25.03.2014, 16:25  [ТС]
Таким образом, без глубинного анализа всего, что касается ф-ций Recv() и RecvSize(), вообще нельзя сделать никаких выводов относительно наличия уязвимости. И это еще примитивнейшая ситуация, без всякого ветвления между вызовами функций, без вызова методов по ссылке и других не поддающихся статическому анализу прелестей. Может вы неправильно поняли задание? Или имелся в виду какой-то один конкретный случай переполнения, который более-менее узнаваем статически?
Вот теперь я вообще в ступоре! Я имел ввиду что-то типа

C++
1
2
3
4
5
6
int main(int argc, char* argv[])
{ 
 char y[32]; 
 strcpy(y, argv[1]); 
 return (0); 
}
Я думал написать легкую программу, что-то типа локальной базы данных и поиску по ней
и заранее заложить уязвимость например в поиске.
После же показать, что буфер переполняется и выполнить какой-нибудь не сложный эксплойт.
А потом показать, каким образом можно обнаружить уязвимости подобного рода

На первый взгляд я подумал, что это не сложно и взял эту тему.
0
Native x86
Эксперт Hardware
 Аватар для quwy
6853 / 3787 / 1024
Регистрация: 13.02.2013
Сообщений: 11,861
25.03.2014, 16:42
Цитата Сообщение от PlayaRC Посмотреть сообщение
А потом показать, каким образом можно обнаружить уязвимости подобного рода
Тогда вам остается только схитрить и заложиться на вполне конкретную уязвимость, реализованную на вполне конкретном компиляторе. Потому что глобально озвученная вами проблема нерешаема статическими методами.

Хотя, я подумал так, а вам ее нужно решить именно статически? Т.е. для готового EXE? Или же можно просто написать свою собственную программу (или создать модуль, подключаемый к любому исходнику), в которую заложен некий механизм автоматического выявления всех происходящих переполнений? Второе вполне реально.
1
5 / 5 / 1
Регистрация: 10.03.2012
Сообщений: 121
25.03.2014, 16:47  [ТС]
Хотя, я подумал так, а вам ее нужно решить именно статически? Т.е. для готового EXE? Или же можно просто написать свою собственную программу (или создать модуль, подключаемый к любому исходнику), в которую заложен некий механизм автоматического выявления всех происходящих переполнений? Второе вполне реально.
Нет, не обязательно статически, просто я так понял задание, конкретно указанно не было, а значит я могу решать сам.

На счет второго, думаю это мне подходит! Спасибо за совет)
Не подскажите в каком направлении двигаться?
0
Native x86
Эксперт Hardware
 Аватар для quwy
6853 / 3787 / 1024
Регистрация: 13.02.2013
Сообщений: 11,861
25.03.2014, 17:12
Лучший ответ Сообщение было отмечено PlayaRC как решение

Решение

Цитата Сообщение от PlayaRC Посмотреть сообщение
Не подскажите в каком направлении двигаться?
Есть метод. Заложитесь на аппаратный механизм защиты памяти. Суть такова:
1. Создаете свои собственные функции управления памятью malloc(), realloc(), free().
2. В них обращаетесь не к менеджеру памяти рантайма, а непосредственно к операционной системе (под Windows это ф-ции VirtualAlloc() и VirtualFree()).
3. Операционная система выделяет память только блоками, размер которых кратен размеру страницы, поэтому malloc() и realloc() должны возвращать адрес не начала выделенного блока а его хвоста с таким расчетом, чтобы от возвращаемого указателя до конца блока было как раз запрашиваемое кол-во байт.
4. В функциях realloc() и free() учитываете п. 3.
5. Подменяете стандартные malloc/realloc/free своими, и после этого любой выход за верхнюю границу динамически выделенного буфера неизбежно ведет к исключению access violation и никакой эксплоит работать не будет (программа упадет или выдаст ошибку, но чужой код не выполнит).

Метод не идеален, но работает. Из недостатков у него очень медленная работа и многократный перерасход памяти. Также он не сработает для статических буферов и выхода за границу вниз, но это на практике встречается несоизмеримо реже. Более подробных рекомендаций не дам, т.к. на C/C++ не пишу.
1
5 / 5 / 1
Регистрация: 10.03.2012
Сообщений: 121
25.03.2014, 17:18  [ТС]
отлично! спасибо большое)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
25.03.2014, 17:18
Помогаю со студенческими работами здесь

Простой эксплоит переполнения буфера не работает(
Здравствуйте, есть простая программа использующая уязвимость переполнения буфера, по сути должна просто закрываться при выполнении и не...

Заблокировано защитой от переполнения буфера
Здарова народ, не знаю в какую тему это написать, поэт написал сюда При запуске Windows media Player, Exel или некоторых других прог...

Завершение программы из-за переполнения буфера WebBrowser
завершение программы из-за переполнения буфера WebBrowser на c# сам код довольно длинный, но смысл в том что активно в автоматическом...

Как вы защищаете свои приложения от переполнения буфера?
Как вы защищаете свои приложения от переполнения буфера? Нужно ли для этого усложнять код?

Обнаружение ошибки в коде
Здравствуйте! Я в java новичок и мне нужна помощь с исправлением ошибки! Посмотрите, пожалуйста загруженный файл....может быть вы увидите...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru