1. Если вы только начинаете программировать на ассемблере и не знаете с чего начать, тогда попробуйте среду разработки ASM Visual IDE
    (c) на правах рекламы
    Скрыть объявление

Не работает ZwProtectVirtualMemory из ядра для адреса в User32.dll

Тема в разделе "WASM.NT.KERNEL", создана пользователем Vicshann, 27 дек 2020.

  1. Vicshann

    Vicshann Member

    Публикаций:
    0
    Регистрация:
    22 сен 2020
    Сообщения:
    30
    На Windows 10 x64 вызываю ZwProtectVirtualMemory из LoadImageNotifyRoutine при загрузке User32.dll, но с любым флагом защиты кроме исходного PAGE_EXECUTE_READ она возвращает 0xC0000045 (STATUS_INVALID_PAGE_PROTECTION).
    Это для обычного процесса, не защищенного, у которых возвращается 0xC0000604 (STATUS_DYNAMIC_CODE_BLOCKED).
    Как это можно обойти? Или просто пропатчить секцию в User32.dll не используя ни чего не документированного и не универсального?
     
  2. Indy_

    Indy_ Well-Known Member

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

    Наверно прав не хватает, на 10-ке нельзя тупо менять страничные атрибуты. Это тебе повезло что ядро твой поток не прибило. А есчо в ядре используют не Zw, а Nt - апи. Новость тебе такая.
     
  3. Vicshann

    Vicshann Member

    Публикаций:
    0
    Регистрация:
    22 сен 2020
    Сообщения:
    30
    Каких прав может не хватить у драйвера ядра? А ZwProtectVirtualMemory как экспортируется ядром, так и есть, ни каких NtProtectVirtualMemory в его таблице экспорта нет.
    Может что-то не до конца инициализировалось еще, когда LoadImageNotifyRoutine вызывается, потому что с пользовательского уровня NtProtectVirtualMemory меняет защиту секции без проблем.
    Вот об этом я и спрашиваю.
     
  4. Indy_

    Indy_ Well-Known Member

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

    В ядре права базовые это предыдущий мод, который должен быть изменён. Если твой тред ядерный соотв. у тебя нулевой уровень привилегий, но не установлен софт маркер - ядро доступ заблочит, так всё ядро работает. В этом разница между Nt и Zw апи.

    Если ты что то напутал с этим маркером, то не смотря на ядерный мод обработка аргументов будет как у юзер треда, с ограничениями(нп указатель будет проверен на диапазон юзер адресов и будет ошибка).
     
  5. Vicshann

    Vicshann Member

    Публикаций:
    0
    Регистрация:
    22 сен 2020
    Сообщения:
    30
    В таком случае он другую ошибку бы возвращал , а мне и не надо в памяти ядра ни чего делать.
     
  6. Indy_

    Indy_ Well-Known Member

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

    Поведение предсказать невозможно, загрузчик не отработал ты рекурсивно вызываешь не допустимую для вызова функцию работы с памятью, которая меняет контекст. Отладчиком посмотреть разумеется религия не позволяет". Не понимаю как можно такое вот собирать без возможности отладки. Это походу наверно как всегда - опции студии или чем ты собираешь(конечно же с гуем и кнопками) изучил, копипастой какой то файл взял и внёс изменения. Конечно всё падает и что с этим делать не понятно, как и не понятно что за вызовы и код делает. Обычное дело, ядро механизмы вначале нужно понять, затем юзать, на оборот не получится. Метод перебора апи в ядре не работает, будут бесконечные падения. Ты даже не удосужился посмотри минидамп, хотя врядле знаешь что это.
     
  7. Vicshann

    Vicshann Member

    Публикаций:
    0
    Регистрация:
    22 сен 2020
    Сообщения:
    30
    Я это испытываю на своем драйвере "защиты", который еще в 2012 году делал. Конечно сейчас многое поменялось, но я с тех пор не занимался драйверами