· Начало · Отвђтить · Статистика · Поиск · FAQ · Правила · Установки · Язык · Выход · WASM.RU · Noir.Ru ·

 WASM Phorum —› WASM.WIN32 —› Driver PLATFORM NATIVE

Посл.отвђт Сообщенiе


Дата: Фев 25, 2004 00:03:29

Всем привет!!!
Вопроса у меня будет два. Позволю себе опустить длительное вступление и сразу же преступлю к первому вопросу.
;-----------------------1------------------------------
Для того, чтобы лучше понять и представить Вам этот вопрос, поставлю близкую к реальности задачу:
1)Переписать первые байты в Kernel32!CloseHandle на
Xor Eax,Eax
Ret 4
Ясно, что из режима пользователя это невозможно (не считая ...). Не забываем, что Мы на платформе !NT!
Перешагиваем ч/з себя, свою лень и пишем драйвер, ожидая кучу #GP и #PF;
Опустим подробности его создания, учтем лишь одно – мы в драйвере создали ф-ю, вызываемую ч/з DeviceIoControl. Ф-я сия содержит в себе примерно такой код:
Mov eax,address_of_CloseHandle
Mov ebx,our_code
Mov [eax],ebx
…и получаем долгожданного голубого друга - #GP; (#PF – нет, так как CloseHandle с проецирована в адресное пространство процесса, в контексте которого он вызван)
И где он? Обещанный уровень бога? Точнее, конечно он есть, только вот подскажите как правильно воспользоваться.
Ну ладно, просто так не сдадимся!!! Вспоминаем про способ выйти на «Max» уровень привилегий у самой Win-ды: Шлюз Int 2Eh, т.е ч/з прерывание. Пишем… заменяем какой-нибудь жертвенный Int в IDT и направляем его на нашу процедуру и выполняем такой же код, как и предыдущем примере. Опять он - #GP!!!!!
Ну допустим, точнее положим, что я что-то недопонял. Но стоп, делаем предположение, что изменение данных страниц памяти запрещено определенном protect-ом страниц, в следствии их непосредственной принадлежности к ядру; но опять же, вспомним про Int 2Eh и про servicetable и ещё про то, что она вообще в ntoskrnl. Но ведь путем написания примитивного кода по замене адресов «ядерных» ф-й в таблице сервиса, не вызывает пресловутых #GP, хотя ведь это же явно тоже, и точно, код со страниц ядра. Так почему сюда писать можно, а туда (см. выше) нельзя!?!?!?!?
;-----------------2-----------------------
Теперь срочно обзаведемся склерозом и отправим в бездну беспамятства предыдущий вопрос. Cls Преступаем к следующему. Он по-короче (потерпите, осталось чуть-чуть).
Задача: поставить HOOK на клавиатуру, точнее на драйвер i8042prt. Читаем MSDN и находим такое: IOCTL_INTERNAL_I8042_HOOK_KEYBOARD. Класс!!! В бой: отсылаем запрос на эту ф-ю на Device при помощи DeviceIoControlFile на “Keyboardklass0” и … нас (меня) посылают на: STATUS_INVALID_DEVICE_REQUEST. Кстати предварительно ищем Device, которым управляет драйвер i8042prt, - а у него его нет. Приходится отправляет на Device драйвера KbdClass. В чем прикол??? Объясните пожалуйста!!!
Чудом догадываемся посмотреть на запрос, а точнее на “INTERNAL” и вспоминаем, что обрабатывается эта фигня не IRP_MJ_DEVICE_CONTROL, а IRP_MJ_INTERNAL_DEVICE_CONTROL. А как на него послать? Как? Формировать свой IRP, затем отсылать ч/з CallDriver или откапывать у драйвера i8042prt ссылку на эту ф-ю и в наглую её вызвать.
Но хоть я и не пробовал ни один из этих 2-х вариантов – наткнулся на проблему: пришлось от DisAsm-ить i8042prt.Sys и KbdClass.Sys и обработчик IRP_MJ_INTERNAL_DEVICE_CONTROL найден только в i8042prt.Sys. но все запросы идут ч/з DeviceObject, а где его взять у i8042prt имя Device??? H_E_L_P_!_!_!

Если Вы дочитали до сюда то уже огромное Спасибо. Пожалуйста ответьте как можете!!! Предположения, догадки и т. Д. Заранее благодарю


---PPS---


Дата: Фев 25, 2004 01:13:49

Хотя до конца я и дочитал, но с большим трудом и через три строчки :-)
Касательно первого вопроса, чего куда там писать я уже не помню :-), но в любом случае если страница имеет только доступ для чтения, то сначало надо получить доступ для записи и для этого совсем не обязательно залезать в ядро. CloseHandle обыкновенная юзерная функция, хоть и находится в модуле kernel. Юзай сначала VirtualProtect.

По второму вопросу, i8042prt использует неименованный девайс. Ищи на sysinternals.com драйвер ctrl2cap - это драйвер-фильтр клавиатуры.


Дата: Фев 25, 2004 01:36:08

Пасибо папробую


Дата: Фев 25, 2004 02:28:48

И исчо, на сон грядусчий:
Не подскажите ли где бы почитать впро "кишочки" механизма Файловых отображений. И про то, кто кого в последствии вызовет: NtReadFile->MapViewOfFile or MapViewOfFile->NtReadFile или ини вообще друг друга не касаются.
Please!


Дата: Фев 25, 2004 02:49:44

Кх-кх, смотри исходный код виндузы. Всего делов :)


Дата: Фев 25, 2004 02:53:00

...


Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.140