Включить Data Execution Prevention (DEP)

Тема в разделе "WASM.WIN32", создана пользователем kweed, 7 июн 2010.

  1. kweed

    kweed New Member

    Публикаций:
    0
    Регистрация:
    17 июн 2009
    Сообщения:
    81
    Clerk
    да, все просто... когда есть исходник =) а ведь походу эта функция работает с флагами как с полями, потому они они и не сбрасываются.. интересно, это так специально задумано? =\

    зы. кстати, откуда исходник-то? что-то я не нагуглил ничо подобного..
     
  2. Sol_Ksacap

    Sol_Ksacap Миша

    Публикаций:
    0
    Регистрация:
    6 мар 2008
    Сообщения:
    623
    Ох, как не хотелось кусками формулировать из-за всяких таких мелких различий в версиях и возникающих несообразностей, но таки уже никуда не деться, не так ли? :)

    Все опции инклюзивны – они добавляются к уже существующим; убрать однажды выставленные флаги нельзя. Исключение – неинклюзивный бит 'ExecuteDisable'; более того, если он передан, то бит 'ExecuteEnable' функция также начинает рассматривать как неинклюзивный. Кроме того, как уже показал Clerk, если в результирующих опциях процесса начнёт присутствовать 'ExecuteEnable', то функция KeSetExecuteOptions() добавит флаги 'ExecuteDispatchEnable' и 'ImageDispatchEnable' (убрать их будет уже нельзя). Однако есть одно несоответствие: в xp sp2 [5.1.2600.2180] бит 'ExecuteEnable' всегда строго инклюзивен. Снять действительно нельзя.

    Для nt5: s/KeSetExecuteOptions/MmSetExecuteOptions.


    >так что же это значит, - тупик (для user-mode)?
    Тупик для устаревшей системы ;)
    Позволим себе напомнить, что sp2 будет дропнут меньше чем через месяц. После этого никаких заплаток, никакого ничего. Хотя сама ветка nt5 ещё подёргается.
     
  3. kweed

    kweed New Member

    Публикаций:
    0
    Регистрация:
    17 июн 2009
    Сообщения:
    81
    вобщем, удалось решить проблему патчем mmSetExecuteOptions в ntkrnlpa.exe, теперь значения флагов выставляются как нужно =). конечно это не универсальный способ (да может быть и нехороший), но раз ms...
    попутно был обнаружен небольшой жучок, скорее всего по вине компилятора:

    Код (Text):
    1.     if ((ExecuteOptions & ~(MEM_EXECUTE_OPTION_VALID_FLAGS)) != 0) {
    2.         return STATUS_INVALID_PARAMETER;
    Код (Text):
    1. :00444583 8B5D08                  mov ebx, dword ptr [ebp+08]
    2. :00444586 81E3FFFF0000            and ebx, 0000FFFF
    3. :0044458C F7C3C0FFFFFF            test ebx, FFFFFFC0
    4. :00444592 7407                    je 0044459B
    5. :00444594 B80D0000C0              mov eax, C000000D
    6. :00444599 EB7A                    jmp 00444615
    and ebx, 0000FFFF приводит к тому что функция возвращает SUCCESS при установке флагов выше 0x0000FFFF (проверено на NtSetInformationProcess), впрочем более ни к чему не приводит (эти флаги не устанавливаются во флаги процесса).

    но, по сути поста, заплатка получилась довольно элегантной (как мне показалось) =), - с заменой всего одного байта:

    было:
    Код (Text):
    1.     if (CurrentProcess->Pcb.Flags.Permanent == 0) {
    2.         CurrentProcess->Pcb.Flags.ExecuteDisable = 0;
    3.         ...
    стало:
    Код (Text):
    1.     if (CurrentProcess->Pcb.Flags.Permanent == 0) {
    2.         CurrentProcess->Pcb.Flags.ExecuteEnable = 0;
    3.         ...
    оффсет 0x000445BF в файле, меняем FE на FD и сохраняем. прилепляю исходник утилиты, которая делает это сама + дамп MmSetExecuteOptions.

    ну вот собсно... leo, Clerk, Sol_Ksacap - АГРОМНОЕ спасибо за ваши посты! сам бы я давно уже забил.. и лишь благодаря вашим постам, которые подгоняли меня как кнут старую клячу, наконец-то все заработало как надо =)

    зы. кстати поначалу я не так понял насчет PAE (да и ваще я нуб по сабжу, - не судите строго): на самом деле ВСЕ процессы в Windows запускаются в PAE режиме (а значит могут быть легко переключены в DEP) если юзаеся ntkrnlpa (а не ntoskrnl), при этом в boot.ini стоят опции отличные от /execute, я имею ввиду /NoExecute= [OptIn, OptOut, Always...]. исходя из этого некоторые мои предыдущие посты могут иметь мало смысла..