eXeL@B —› Программирование —› контекст LocalSystem |
Посл.ответ | Сообщение |
|
Создано: 07 ноября 2009 11:51 · Личное сообщение · #1 |
|
Создано: 07 ноября 2009 12:40 · Поправил: Clerk · Личное сообщение · #2 |
|
Создано: 07 ноября 2009 14:24 · Личное сообщение · #3 Так у тебя программа или сервисная модель? .. Может апи CreateService где предпоследний параметр Code:
----- RE In Progress [!] Coding Hazard [!] Stay Clear of this Cube |
|
Создано: 07 ноября 2009 17:52 · Поправил: DaRKSiDE · Личное сообщение · #4 Clerk пишет: BaseSrvDefineDosDevice нашел по смещению... Code:
Вот начало функи... Но как ее вызывать? Также как и обычный DefineDosDevice? с темеже флагами? или как? ----- aLL rIGHTS rEVERSED! |
|
Создано: 07 ноября 2009 18:37 · Личное сообщение · #5 > Но как ее вызывать? Также как и обычный DefineDosDevice? с темеже флагами? или как? DefineDosDevice() это надстройка вокруг сервиса подсистемы пользовательской BasepDefineDosDevice, последний и видите вы в дизасме, собственно это и есть обработчик, который выполняет манипуляции дескриптором безопасности. На этом и основано разграничение доступа, или например изоляция сеансов. Его нет в сурцах, но там не сложный код, думаю отреверсите быстро . |
|
Создано: 07 ноября 2009 20:21 · Личное сообщение · #6 |
|
Создано: 07 ноября 2009 20:54 · Поправил: Clerk · Личное сообщение · #7 BasepDefineDosDevice это имя сервиса, тоесть константа значение которой для XP соответственно 0x10017, а хэндлер BaseSrvDefineDosDevice, вы его верно нашли походу, тока он в контексте csrss. Оттрассируйте запрос и тогда статус можно будет увидеть, он в буфере там по смещению +0x20. Если собрались дебажить csrss, то придётся ядерный дебуггер брать, иначе остановится рит и ввод-вывод за который он отвечает тоже. |
|
Создано: 07 ноября 2009 22:31 · Поправил: Clerk · Личное сообщение · #8 DaRKSiDE Продебажил ради интереса, никаких нюансов нет, всё как обычно, тривиальная юзермодная отладка. Берём сисер(виндбг не для этих целей ), ставим условный останов в подсистеме маздая на BaseSrvDefineDosDevice. Для запуска юзаем кодес DefineDosDevice("D:"). После заполнения буфера с запросом выполняем его: Всплывает отладчик, мы дебажим вот кодес который символическую ссылку открывает: На варе диск только один, соответственно такой символической ссылки не существует, сервис возвращает STATUS_OBJECT_NAME_INVALID, далее сервер отвечает клиенту: Мы получаем буфер с кодом ошибки, собственно её возвращает серверная апи CsrClientCallServer(), затем она преобразуется в малоинформативный Win32-код ошибки ERROR_INVALID_NAME. Всё просто |
|
Создано: 08 ноября 2009 01:54 · Личное сообщение · #9 |
eXeL@B —› Программирование —› контекст LocalSystem |