WinAPI VirtualAlloc() и доступ к памяти, только на исполнение.

Тема в разделе "WASM.BEGINNERS", создана пользователем Shere Khan, 28 май 2017.

  1. Shere Khan

    Shere Khan New Member

    Публикаций:
    0
    Регистрация:
    19 дек 2016
    Сообщения:
    9
    При чтении описания функции WinAPI VirtualAlloc(), наткнулся на непонятку: значение "PAGE_EXECUTE" параметра flProtect, вроде как, разрешает доступ к странице памяти, только на исполнение. Однако, насколько я помню, запретить доступ на чтение, можно только при сегментной организации памяти, для всего сегмента кода целиком (если, конечно, не используется плоская модель памяти, при которой, вся сегментация теряет смысл), но никак не для страничной организации, при использовании плоской модели памяти.

    Теперь вопрос: действительно, ли, использование значения "PAGE_EXECUTE" параметра flProtect, при размещении страницы памяти, не дает читать, с этой страницы? И, если да, то каким образом?

    P.S.: Бегло прочитал 4 главу 3 тома Intel SDM, но ответа, на свой вопрос, так и не обнаружил. Проверить всё на практике, сейчас нет никакой возможности, т.к. и десктоп, и ноут, остались дома, в отличие от меня... Под рукой только планшет, с которого и пишу. А за неделю, пока дома окажусь, меня любопытство с костями съест :dntknw:.
     
  2. Indy_

    Indy_ Well-Known Member

    Публикаций:
    4
    Регистрация:
    29 апр 2011
    Сообщения:
    4.775
    Shere Khan,

    E атрибут задаётся не в таблицах памяти, а в дескрипторе сегмента. А дескрипторы deprecated. Можно создать в младших версиях нт сегмент, доступный на исполнение, но не доступный для чтения. Но этим вы не создадите анклав :acute:
    Страница памяти будет доступна для ядра или прочего ридера, даже из текущего процесса.
     
    Shere Khan нравится это.
  3. Shere Khan

    Shere Khan New Member

    Публикаций:
    0
    Регистрация:
    19 дек 2016
    Сообщения:
    9
    Благодарю за ответ!

    Кстати об анклавах: подскажите, система Intel ME доступ к содержимому SGX-анклавов имеет? И, есть, ли, у AMD, аналоги Intel SGX?
     
  4. Indy_

    Indy_ Well-Known Member

    Публикаций:
    4
    Регистрация:
    29 апр 2011
    Сообщения:
    4.775
    Shere Khan,

    Там сложная железячная крипто система, я не знаю всех тех деталей реализации. Тем более что это совершенно не актуально. Для викс важны софтверные анклавы, тогда чтение памяти невозможно, либо регион физически не существует вовсе.
    По сабжу могу поискать вам семпл если интересно.
     
    Shere Khan нравится это.
  5. Shere Khan

    Shere Khan New Member

    Публикаций:
    0
    Регистрация:
    19 дек 2016
    Сообщения:
    9
    Интересно! Заранее благодарю! :)
     
  6. Indy_

    Indy_ Well-Known Member

    Публикаций:
    4
    Регистрация:
    29 апр 2011
    Сообщения:
    4.775
    Shere Khan,

    Откопал семпл, этот реликт тоже использует LDT, но поиск по диску сложнее чем я думал, выдаёт тысячи файлов и найти что то по теме весьма сложно, учитывая что не используются именованные паблик константы. Впрочем думаю вам должна быть интересна не какая то низкоуровневая обработка исключений при доступе к региону. Суть вашего вопроса в создании региона памяти не доступного для чтения - анклава. Реализуется это совсем иначе. Тут есть мои публикации по данной теме, как пример можно посмотреть это http://www.rohitab.com/discuss/topic/43064-hide-module/
     

    Вложения:

    • NtIcp.zip
      Размер файла:
      16,4 КБ
      Просмотров:
      262
    Shere Khan нравится это.
  7. Shere Khan

    Shere Khan New Member

    Публикаций:
    0
    Регистрация:
    19 дек 2016
    Сообщения:
    9
    Спасибо!