Что такое DEP?

Обсуждения по программированию для ОС Windows безотносительно используемого языка программирования. Windows NT, Win32, Windows API, ядро и драйверы.
ANDLL
Великий гастроном
Великий гастроном
Аватара пользователя
 
Сообщения: 3450
Зарегистрирован: 29.06.2003 (Вс) 18:55

Что такое DEP?

Сообщение ANDLL » 04.05.2005 (Ср) 20:03

Что это такое, и как его отключить?

А то там только два варианта включения почему-то...

Изображение
Гастрономия - наука о пище, о ее приготовлении, употреблении, переварении и испражнении.
Блог

Ennor
Конструктивный критик
Конструктивный критик
 
Сообщения: 2504
Зарегистрирован: 18.12.2001 (Вт) 3:58
Откуда: Калуга -> Москва

Сообщение Ennor » 04.05.2005 (Ср) 20:06

Издеваешься? У тебя на скрине фокус на справочной ссылке. И винда русская, и все равно - смотрим мы на все вокруг широко закрытыми глазами... :evil:

ANDLL
Великий гастроном
Великий гастроном
Аватара пользователя
 
Сообщения: 3450
Зарегистрирован: 29.06.2003 (Вс) 18:55

Сообщение ANDLL » 04.05.2005 (Ср) 20:39

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

В отличие от брандмауэра или антивирусной программы средство DEP не препятствует установке потенциально опасных программ на компьютер. Вместо этого выполняется наблюдение, чтобы программы использовали системную память безопасным образом. Для этого DEP работает отдельно или вместе с совместимыми микропроцессорами и помечает некоторые области как «невыполняемые». Если программа пытается запустить код (любой код) из защищенной области, DEP закрывает программу и отображает уведомление.

DEP может использовать поддержку программного и аппаратного обеспечения. Для использования DEP на компьютере должна быть установлена операционная система Пакет обновления 2 для Microsoft Windows XP (SP2) или Windows Server 2003 с пакетом обновления 1 (SP1), или более поздняя версия одной из этих программ. Программное обеспечение DEP используется для защиты от некоторых типов атак вредоносного кода, но для использования возможностей DEP в полном объеме процессор должен поддерживать «защиту от выполнения». Это аппаратная технология, разработанная для обозначения некоторых областей памяти как невыполняемых. Если процессор не поддерживает аппаратную версию DEP, рекомендуется обновить процессор, чтобы использовать возможности защиты от выполнения.


Это какой-то бред... Как процессор определяет, какие данные предназначены длля выполнения, а какие нет? Да и вообще, больше интересует, признаюсь второй вопрос...
Гастрономия - наука о пище, о ее приготовлении, употреблении, переварении и испражнении.
Блог

Sedge
Alternative Choice
Alternative Choice
Аватара пользователя
 
Сообщения: 1049
Зарегистрирован: 16.05.2002 (Чт) 18:23
Откуда: Somewhere-In-The-Net

Сообщение Sedge » 04.05.2005 (Ср) 20:56

Да все понятно. Очередная паранойа от Microsoft, призванная бороться с вездесущей ошибкой переполнения буфера... Отключается, насколько я помню, с помощью небольшой пляски с бубном вокруг boot.ini и добавлением в него ключа NoExecute=AlwaysOff (по-моему так).

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 04.05.2005 (Ср) 23:42

ANDLL писал(а):Как процессор определяет, какие данные предназначены длля выполнения, а какие нет?

По флагам секций в PE-файле, и по флагам PAGE_*, передаваемым в VirtualAlloc.
Изображение

Sebas
Неуловимый Джо
Неуловимый Джо
Аватара пользователя
 
Сообщения: 3626
Зарегистрирован: 12.02.2002 (Вт) 17:25
Откуда: столько наглости такие вопросы задавать

Сообщение Sebas » 04.05.2005 (Ср) 23:54

tyomitch писал(а):
ANDLL писал(а):Как процессор определяет, какие данные предназначены длля выполнения, а какие нет?

По флагам секций в PE-файле, и по флагам PAGE_*, передаваемым в VirtualAlloc.



А мож НТФС потоки?
- Я никогда не понимал, почему они приходят ко мне чтобы умирать?

sebas<-@->mail.ru

ANDLL
Великий гастроном
Великий гастроном
Аватара пользователя
 
Сообщения: 3450
Зарегистрирован: 29.06.2003 (Вс) 18:55

Сообщение ANDLL » 05.05.2005 (Чт) 7:46

А строка, резирвированная с помощью malloc тоже считается данными?
Гастрономия - наука о пище, о ее приготовлении, употреблении, переварении и испражнении.
Блог

FaKk2
El rebelde gur&#250;
El rebelde gur&#250;
Аватара пользователя
 
Сообщения: 2031
Зарегистрирован: 09.03.2003 (Вс) 22:10
Откуда: Los Angeles

Сообщение FaKk2 » 05.05.2005 (Чт) 7:54

ANDLL

Все что резервируется malloc это данные, насколько я помню.
Для получения ответа надо продемонстрировать качества, позволяющие стать компетентным — внимательность, вдумчивость, наблюдательность, желание активно участвовать в выработке решения.

ANDLL
Великий гастроном
Великий гастроном
Аватара пользователя
 
Сообщения: 3450
Зарегистрирован: 29.06.2003 (Вс) 18:55

Сообщение ANDLL » 05.05.2005 (Чт) 8:31

2Sedge: Спасибо, действительно теперь не работает.

А как же тогда резервировать код?
Гастрономия - наука о пище, о ее приготовлении, употреблении, переварении и испражнении.
Блог

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 05.05.2005 (Чт) 22:32

Sebas писал(а):
tyomitch писал(а):
ANDLL писал(а):Как процессор определяет, какие данные предназначены длля выполнения, а какие нет?

По флагам секций в PE-файле, и по флагам PAGE_*, передаваемым в VirtualAlloc.

А мож НТФС потоки?

С чего бы это вдруг? :shock:

2ANDLL: именно так и резервировать, вызовом VirtualAlloc :-D
Всё равно malloc неизбежно сводится именно к нему.
Изображение

ANDLL
Великий гастроном
Великий гастроном
Аватара пользователя
 
Сообщения: 3450
Зарегистрирован: 29.06.2003 (Вс) 18:55

Сообщение ANDLL » 06.05.2005 (Пт) 12:59

MSDN 2003 писал(а):The VirtualAlloc function reserves or commits a region of pages in the virtual address space of the calling process. Memory allocated by this function is automatically initialized to zero, unless MEM_RESET is specified


Темыч, у тебя ли, конечно, спрашивать, но ты уверен?

VirtualAlloc резервирует(или передает) серию страниц в памяти. Соответственно, регион, зарезирвированный с помощью VirtualAlloc округляется до размера кратного 64 Кб.
А malloc вызывает HeapAlloc, который вообще не округляет размер региона. HeapAlloc, как я понимаю, сама вызывает VirtualAlloc в случае, если заканчиваются выделенные страницы. А может и нет. Фишка в том, что HeapAlloc не принимает параметров касательно типа выделяемой памяти...
Гастрономия - наука о пище, о ее приготовлении, употреблении, переварении и испражнении.
Блог

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 06.05.2005 (Пт) 17:59

ANDLL писал(а):VirtualAlloc резервирует(или передает) серию страниц в памяти. Соответственно, регион, зарезирвированный с помощью VirtualAlloc округляется до размера кратного 64 Кб.
А malloc вызывает HeapAlloc, который вообще не округляет размер региона. HeapAlloc, как я понимаю, сама вызывает VirtualAlloc в случае, если заканчиваются выделенные страницы. А может и нет. Фишка в том, что HeapAlloc не принимает параметров касательно типа выделяемой памяти...

Во-первых, страница - это 4Кб ;-)
А во-вторых, подчёркнутое совершенно верно. Как любят на этом форуме заявлять переAPIсты, какой смысл вызывать функцию через обёртку, если можно напрямую? Тем более, что в данном случае для этого есть веские основания: malloc/HeapAlloc не предоставляет нужной функциональности.
Изображение

ANDLL
Великий гастроном
Великий гастроном
Аватара пользователя
 
Сообщения: 3450
Зарегистрирован: 29.06.2003 (Вс) 18:55

Сообщение ANDLL » 06.05.2005 (Пт) 18:34

Так мне не нужно 4 Кб :cry: Мне там буквально байт 100... Но часто. Может можно как-то выстваить в HeapCreate параметры для вновь созданных регионов. Т.е. что бы вызывать HeapAlloc, но при этос страницы выделялись с PAGE_EXECUTE_READWRITE.

Кстати, в чем смысл PAGE_EXECUTE_READ, если в такой регион нельзя ничего записать?
Гастрономия - наука о пище, о ее приготовлении, употреблении, переварении и испражнении.
Блог

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 06.05.2005 (Пт) 20:35

1. Атрибуты защиты применяются только к страницам целиком. Другими словами, ни ты, ни HeapAlloc не сможете выделить меньше 4Кб за раз. Просто HeapAlloc выделяет сразу много, а тебе отдаёт по кусочкам.
Если нужно часто выделять по 100 байт - делай то же самое: выдели себе страницу с правом на выполнение, и пользуйся помаленьку :-)

2. Для защиты. Например, если между стеком и кодом выделить такую страницу, то переполнение стека не затрёт код (и приведёт к выполнению чёрт знает чего), а вызовет исключение, которое можно обработать.
Изображение

beefon
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 104
Зарегистрирован: 26.09.2004 (Вс) 18:34
Откуда: Moscow Province

Сообщение beefon » 07.05.2005 (Сб) 16:15

А в Win x64 DEP уже можно отключить.

ANDLL
Великий гастроном
Великий гастроном
Аватара пользователя
 
Сообщения: 3450
Зарегистрирован: 29.06.2003 (Вс) 18:55

Сообщение ANDLL » 07.05.2005 (Сб) 16:20

Да и в WinXP тоже.
Гастрономия - наука о пище, о ее приготовлении, употреблении, переварении и испражнении.
Блог


Вернуться в Windows-программирование

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 28

    TopList