|
|
| Посл.отвђт | Сообщен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 |