Сейчас на форуме: tyns777, zds (+3 невидимых)

 eXeL@B —› Программирование —› контекст LocalSystem
Посл.ответ Сообщение


Ранг: 462.8 (мудрец), 468thx
Активность: 0.280
Статус: Участник
Only One!

Создано: 07 ноября 2009 11:51
· Личное сообщение · #1

Вопрос таков - как запустить DefineDosDevice в контексте LocalSystem?
Если можно... пример кода на Си или Асме...

-----
aLL rIGHTS rEVERSED!




Ранг: 255.8 (наставник), 19thx
Активность: 0.150.01
Статус: Участник
vx

Создано: 07 ноября 2009 12:40 · Поправил: Clerk
· Личное сообщение · #2

BaseSrvDefineDosDevice




Ранг: 673.3 (! !), 400thx
Активность: 0.40.31
Статус: Участник
CyberMonk

Создано: 07 ноября 2009 14:24
· Личное сообщение · #3

Так у тебя программа или сервисная модель? .. Может апи CreateService где предпоследний параметр

Code:
  1. pServiceStartName
  2.  
  3. Points to a null-terminated string. If the service type is SERVICE_WIN32_OWN_PROCESS, this name is the account name in the form of "DomainName\Username", which the service process will be logged on as when it runs. If the account belongs to the built-in domain, ".\Username" can be specified. Services of type SERVICE_WIN32_SHARE_PROCESS are not allowed to specify an account other than LocalSystem. If NULL is specified, the service will be logged on as the "LocalSystem" account, in which case, the lpPassword parameter must be NULL. 
  4.  
  5. If the service type is SERVICE_KERNEL_DRIVER or SERVICE_FILE_SYSTEM_DRIVER, this name is the Windows NT driver object name (that is, \FileSystem\Rdr or \Driver\Xns), which the input and output (I/O) system uses to load the device driver. If NULL is specified, the driver is run with a default object name created by the I/O system, based on the service name.


-----
RE In Progress [!] Coding Hazard [!] Stay Clear of this Cube





Ранг: 462.8 (мудрец), 468thx
Активность: 0.280
Статус: Участник
Only One!

Создано: 07 ноября 2009 17:52 · Поправил: DaRKSiDE
· Личное сообщение · #4

Clerk пишет:
BaseSrvDefineDosDevice


нашел по смещению...

Code:
  1. 75B540E9    68 C8010000                PUSH 1C8
  2. 75B540EE    68 B817B575                PUSH basesrv.75B517B8
  3. 75B540F3    E8 E4700000                CALL basesrv.75B5B1DC
  4. 75B540F8    A1 80D2B575                MOV EAX,DWORD PTR DS:[75B5D280]
  5. 75B540FD    8945 E4                    MOV DWORD PTR SS:[EBP-1C],EAX


Вот начало функи...
Но как ее вызывать? Также как и обычный DefineDosDevice? с темеже флагами? или как?

-----
aLL rIGHTS rEVERSED!




Ранг: 255.8 (наставник), 19thx
Активность: 0.150.01
Статус: Участник
vx

Создано: 07 ноября 2009 18:37
· Личное сообщение · #5

> Но как ее вызывать? Также как и обычный DefineDosDevice? с темеже флагами? или как?
DefineDosDevice() это надстройка вокруг сервиса подсистемы пользовательской BasepDefineDosDevice, последний и видите вы в дизасме, собственно это и есть обработчик, который выполняет манипуляции дескриптором безопасности. На этом и основано разграничение доступа, или например изоляция сеансов. Его нет в сурцах, но там не сложный код, думаю отреверсите быстро .




Ранг: 462.8 (мудрец), 468thx
Активность: 0.280
Статус: Участник
Only One!

Создано: 07 ноября 2009 20:21
· Личное сообщение · #6

Clerk пишет:
DefineDosDevice() это надстройка вокруг сервиса подсистемы пользовательской BasepDefineDosDevice


Если это так то при вызове DefineDosDevice мы должны попасть в BasepDefineDosDevice?.. однако мы пролетаем мимо..

-----
aLL rIGHTS rEVERSED!




Ранг: 255.8 (наставник), 19thx
Активность: 0.150.01
Статус: Участник
vx

Создано: 07 ноября 2009 20:54 · Поправил: Clerk
· Личное сообщение · #7

BasepDefineDosDevice это имя сервиса, тоесть константа значение которой для XP соответственно 0x10017, а хэндлер BaseSrvDefineDosDevice, вы его верно нашли походу, тока он в контексте csrss.
Оттрассируйте запрос и тогда статус можно будет увидеть, он в буфере там по смещению +0x20. Если собрались дебажить csrss, то придётся ядерный дебуггер брать, иначе остановится рит и ввод-вывод за который он отвечает тоже.



Ранг: 255.8 (наставник), 19thx
Активность: 0.150.01
Статус: Участник
vx

Создано: 07 ноября 2009 22:31 · Поправил: Clerk
· Личное сообщение · #8

DaRKSiDE
Продебажил ради интереса, никаких нюансов нет, всё как обычно, тривиальная юзермодная отладка.
Берём сисер(виндбг не для этих целей ), ставим условный останов в подсистеме маздая на BaseSrvDefineDosDevice. Для запуска юзаем кодес DefineDosDevice("D:"). После заполнения буфера с запросом выполняем его: http://img81.imageshack.us/i/18455598.png/
Всплывает отладчик, мы дебажим вот кодес который символическую ссылку открывает: http://img260.imageshack.us/i/90592136.png/
На варе диск только один, соответственно такой символической ссылки не существует, сервис возвращает STATUS_OBJECT_NAME_INVALID, далее сервер отвечает клиенту: http://img25.imageshack.us/i/28783252.png/
Мы получаем буфер с кодом ошибки, собственно её возвращает серверная апи CsrClientCallServer(), затем она преобразуется в малоинформативный Win32-код ошибки ERROR_INVALID_NAME. Всё просто




Ранг: 462.8 (мудрец), 468thx
Активность: 0.280
Статус: Участник
Only One!

Создано: 08 ноября 2009 01:54
· Личное сообщение · #9

Все сделал... еще проще...
просто перезапустил свою прогу CreateService в контексте ...
и DefineDosDevice заработал как надо... создавая линк в глобале, собственно к чему я и стремился...

-----
aLL rIGHTS rEVERSED!



 eXeL@B —› Программирование —› контекст LocalSystem
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати