Наткнулся на следующую проблему, программа сбрасывает hardware breakpoints, в связи с чем вопрос: какие есть способы изменять DRx из user mode, кроме SetThreadContext, NtSetContextThread? И вопрос №2: пользователь из без прав локального администратора не имеет привилегии устанавливать драйвер, я правильно понимаю?
sergegers Для загрузки драйверов можно использовать три способа: 1) использовать API Service Control Manager'a. 2) прописывать драйвер в реестре вручную и загружать его с помощью функции ZwLoadDriver. Вы создаете в реестре минимум необходимых записей, запускаете драйвер и удаляете его раздел из реестра. 3) загрузить драйвер при помощи ZwSetSystemInformation. смотри здесь А здесь пример повышения привелегий
ну это стандартное получение привилегии , как я понимаю. то есть AdjustTokenPrivileges может включить привилегию, если она есть, а SE_LOAD_DRIVER_NAME по дефолту есть только у администраторов. т.е. 1 способ отпадает, 2й видимо тоже, 3 способ, как я понял, использует недокументированную константу SystemLoadAndCallImage, и, судя по всему, закрыт в новых виндах и последних сервис паках xp (если кто точно знает, работает ли 3й способ на xp sp3 (32 бит), отпишитесь pls)
sergegers in-process - в обработчиках SEH, VEH, UEF можно ставить и контролировать drX, в других процессах - через уже названные XXXThreadContext
sergegers Гдето на крабе вроде был древний кодес инде, который позволял в люзермодах выполнить Mov Dr7,eax. Там тупо диспатч фолта и эмуляция. Системный диспетчер фолтов грузит контекст через NtContinue, тоесть достаточно контекст сформировать. Есчо был стрёмный NtRaiseException, но видимо вам оно не нужно.
ну да. я на стороне добра. мне нужно не давать сбрасывать hbps. ну я нашел хорошую статью, где этот момент расписан http://www.wasm.ru/article.php?article=packers2
sergegers Чтоб не дать сбросить в юзермоде Dr-часть контекста необходимо установить свой хэндлер фолтов последним в цепочке(ну разумеется гет-/сет- контекст сервисы будут работать и это обойти в юзермоде проблемно, но решаемо, например установкой ьрейков до критичного кода, вопрос не в том). А последним сех быть не может, в силу очевидных причин, так же как и вех. Значит нужно зарегать первым VEH, установить блокировку критической секции(если читали то знаете что это) и выполнять маршрутизацию(говоря по простому - замена линка в стековом фрефме на свой код, выполянющий откат). Ну это в общих чертах. А так накой вобще железячные брейки нужны не представляю.
Тогда нужно т-фрейм корректировать перед возвратом. Но дело гиблое конечно, вобще сопротивляться бесполезно(в ядре всмысле) - всё элементарно обходится. Удачи.