Как сделать службу Windows трудно остановить? - PullRequest
0 голосов
/ 05 октября 2018

Я работаю над Windows продуктивность и инструмент мониторинга для детейЯ пытаюсь создать службу Windows на C # настолько сложно, насколько это возможно.Если пользователь не является администратором, это легко - сервис не может быть остановлен.Проблема в том, когда у пользователя есть права администратора.К сожалению, это часто происходит, потому что дети имеют права администратора, чтобы они могли устанавливать приложения и игры самостоятельно.

В настоящее время моя служба работает в локальной системе и запускается автоматически после загрузки.В идеале служба должна быть остановлена ​​только удалением программного обеспечения, переустановкой или выключением или перезапуском Windows и т. Д.

Прямо сейчас я использую что-то вроде взлома / обходного пути.Я создал две службы, которые периодически (каждые 1-2 секунды) проверяют друг друга, работает ли другая служба, и перезапускают ее, если это не так.Это уродливое решение и определенно не надежное.Службы могут быть остановлены, если вы достаточно быстры, и это может вызвать проблемы при удалении или перезагрузке компьютера.Вот почему я ищу лучшее решение.

В лучшем случае мне хотелось бы, чтобы поведение аналогично службе антивирусного программного обеспечения, которую не может остановить даже администратор.Я знаю, что это невозможно.Я понимаю, что они, вероятно, имеют некоторые специальные разрешения API от программы сотрудничества Microsoft в отрасли Но я не хочу идти так далеко.Я думаю, что это будет немного излишним.Я не работаю с антивирусным приложением.

Я знаю, что администратор всегда может найти способ остановить процесс или службу.Я просто хочу достичь чего-то, что, по крайней мере, выдержало бы большинство распространенных «детских» атак.Или, по крайней мере, было бы очень тяжело или сложно убить службу, чтобы в конечном итоге пользователь прекратил работу.

Как я могу сделать остановку службы трудной?

Большое спасибо за предложения.

1 Ответ

0 голосов
/ 05 октября 2018

Не вдаваясь в дебаты по этому вопросу ...

Программы могут попытаться сделать себя более трудными для уничтожения (запретить доступ PROCESS_TERMINATE, запретить доступ PROCESS_CREATE_THREAD, чтобы люди не могли создать CreateRemoteThread (EndProcess), запретить PROCESS_VM_WRITE, поэтомулюди не могут вписать в ваш стек и заставить вас совершить двойную ошибку, отказать в PROCESS_SUSPEND_RESUME, чтобы они не могли вас приостановить), но в конечном итоге вы просто не сможете остановить их, скажем, от повышения до привилегии отладки, отладки вашего процесса и перевода EIP на"ExitProcess".

В конечном итоге все можно убить.

Вы, вероятно, хотите прочитать:

http://csharptest.net/1043/how-to-prevent-users-from-killing-your-service-process/

и

https://blogs.msdn.microsoft.com/oldnewthing/20040216-00/?p=40603/

...