С наступающим Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы
Visual C++
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.75/8: Рейтинг темы: голосов - 8, средняя оценка - 4.75
Charley
5 / 5 / 2
Регистрация: 11.06.2012
Сообщений: 181
1

Переполнение буфера в vc 2010

27.08.2013, 09:29. Просмотров 1536. Ответов 5
Метки нет (Все метки)

Не могу сделать переполнение буфера и передача управления на любой адрес программы в visual studio express 2010.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
// rop.cpp: определяет точку входа для консольного приложения.
//
 
#include "stdafx.h"
#include <windows.h>
#include <iostream>
 
using namespace std;
 
int _tmain(int argc, char *argv[])
{
    HINSTANCE hModule=::LoadLibrary(_T("mfc71.dll"));
    char buffer[10], stroka[100];
    //cin >> stroka;
    strcpy(buffer, "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\x28\x81\x70\x75");
    return 0;
}
Постоянно выходит эксепшн, как его отключить?
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.08.2013, 09:29
Ответы с готовыми решениями:

Переполнение буфера: что тут происходит?
Добрый вечер; у меня есть уязвимая программа, которая в буфер длиной 30...

Чем отличается Microsoft Visual C++ 2010 Express от Visual Studio 2010 Ultimate
Подскажите пожалуйста, в чем разница Microsoft Visual C++ 2010 Express от...

Переполнение стека
#include &lt;iostream&gt; using namespace std; int main() { const int n=10;...

PW_PAINT: переполнение счетчика
Здраствуйте Я совсем новичек в WINAPI,буквально второй день как разбираюсь....

переполнение буфера
Что такое переполнение буфера?

5
ValeryS
Модератор
7375 / 5575 / 708
Регистрация: 14.02.2011
Сообщений: 18,952
27.08.2013, 11:04 2
Во первых посмотри не используешь ли ты строки Юнткоде (в настройках проекта)
во вторых в дебиг-режиме исключение и будет выскакивать потому, что для всех буферов, переменных и прочее
создается "подушка безопасности" специальный блок инициализированных байтов если она меняется то отладчик видит переполнение и вызывает исключение
в третьих
Цитата Сообщение от Charley Посмотреть сообщение
char buffer[10], stroka[100];
* * //cin >> stroka;
* * strcpy(buffer, "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\x28\x81\x70\x75");
хвост твоего buffer залезает в stroka поменяй их местами
а вообще атака через переполнение буфера тема очень скользкая и нахрапом её не возьмешь
0
Charley
5 / 5 / 2
Регистрация: 11.06.2012
Сообщений: 181
27.08.2013, 12:15  [ТС] 3
Цитата Сообщение от ValeryS Посмотреть сообщение
Во первых посмотри не используешь ли ты строки Юнткоде (в настройках проекта)
во вторых в дебиг-режиме исключение и будет выскакивать потому, что для всех буферов, переменных и прочее
создается "подушка безопасности" специальный блок инициализированных байтов если она меняется то отладчик видит переполнение и вызывает исключение
в третьих

хвост твоего buffer залезает в stroka поменяй их местами
а вообще атака через переполнение буфера тема очень скользкая и нахрапом её не возьмешь
Попробовал в релиз, но там переполнение не происходит и процесс выходит нормально.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include "stdafx.h"
#include <windows.h>
#include <iostream>
 
using namespace std;
 
int _tmain(int argc, char *argv[])
{
    HINSTANCE hModule=::LoadLibrary(_T("mfc71.dll"));
    char buffer[10];
    strcpy(buffer, "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"); //aa\x28\x81\x70\x75");
    return 0;
}
0
ValeryS
Модератор
7375 / 5575 / 708
Регистрация: 14.02.2011
Сообщений: 18,952
27.08.2013, 19:01 4
Цитата Сообщение от Charley Посмотреть сообщение
Попробовал в релиз, но там переполнение не происходит и процесс выходит нормально.
отладчик бери и смотри что как происходит
добавь перед и после буфера по одной char переменной посмотри куда хвост записывается
0
Croessmah
++Ͻ
14777 / 8453 / 1605
Регистрация: 27.09.2012
Сообщений: 20,804
Записей в блоге: 2
Завершенные тесты: 1
28.08.2013, 03:20 5
Цитата Сообщение от Charley Посмотреть сообщение
передача управления на любой адрес
Современные компиляторы могут дать некоторую защиту от подобных атак, поэтому не факт что получится вообще это сделать простым переполнением. Например, GNU Stack smashing protection
0
Charley
5 / 5 / 2
Регистрация: 11.06.2012
Сообщений: 181
28.08.2013, 12:09  [ТС] 6
В общем я сделал так: свойства проекта->свойства конфигурации-> c/c++-> создание кода
Параметр "основные проверки времени выполнения" установите в неинициализированные переменные/RTCu
Параметр "проверка переполнения буфера" установите в значение нет (-GS)
Все управление переходит на затертый retaddr
1
28.08.2013, 12:09
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.08.2013, 12:09

Переполнение буфера
Подскажите, пожалуйста кто-нибудь, в чем беда... Во время выполения программы...

Переполнение буфера
Объясните почему вылетает ошибка и помогите исправить. Зарание спасибо ...

Переполнение буфера
Не могу найти, где у меня ошибка, выдает переполнение буфера, подскажите...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru