eXeL@B —› Программирование —› Protect Process |
. 1 . 2 . >> |
Посл.ответ | Сообщение |
|
Создано: 07 апреля 2012 14:21 · Поправил: OnLyOnE · Личное сообщение · #1 Собственно задача состоит в том, чтобы защитить свой процесс от завершения в диспетчере задач и не только. Примером может служить процесс smss.exe и реакция диспетчера задач на попытку его завершения. Сразу говорю, гуглил .. много рассуждений на данную тему, но примера рабочего кода так и не нашел.(может хреново искал?) В общем хотелось бы получить максимально развернутый ответ на поставленный вопрос с примером рабочего кода (язык не важен). Из того что почерпнул в гугле и на васме, что можно хучить TerminateProcess и DebugExitProcess. Вот интересно, есть другие способы кроме хука? Более "цивилизованные"? P.S. Сразу оговорюсь, мой процесс -> сервис ----- aLL rIGHTS rEVERSED! |
|
Создано: 07 апреля 2012 15:14 · Поправил: tihiy_grom · Личное сообщение · #2 |
|
Создано: 07 апреля 2012 15:35 · Личное сообщение · #3 |
|
Создано: 07 апреля 2012 15:56 · Поправил: OnLyOnE · Личное сообщение · #4 tihiy_grom пишет: запускай 2 сервиса, чтобы один восстанавливал другого неудачный вариант, я как-раз стремлюсь к минимизации реализации, а не нагромождения всяких изощренных методов. Archer пишет: Обзови свой процесс так же, то же самое скажет Эт уже побывал... работает... но как бы тоже метод не исключительный по красоте реализации Archer пишет: ограничить юзера в правах только, не давай админа тоже не вариант, увы.. P.S. Пока, в качестве хоть какой-то защиты прикрутил вот такое решение... оно не препятствует завершению процесса, но делает BSOD системе при завершении моего процесса Code:
НО вопрос по теме остается открытым, т.е. требующего вариантов решения... ----- aLL rIGHTS rEVERSED! |
|
Создано: 07 апреля 2012 16:01 · Поправил: TryAga1n · Личное сообщение · #5 |
|
Создано: 07 апреля 2012 16:02 · Личное сообщение · #6 |
|
Создано: 07 апреля 2012 16:11 · Личное сообщение · #7 |
|
Создано: 07 апреля 2012 16:13 · Личное сообщение · #8 OnLyOnE Не заморачивайся на защите а то получится как nProtect GameGuard, пиши дровину и прячь свой процесс как олю прячет фантик хотя утиль от руссиновича всёравно найдёт его tihiy_grom пишет: запускай 2 сервиса, чтобы один восстанавливал другого да заморожу я эти два процесса а потом кильну,даже пикнуть неуспеют... ----- Чтобы правильно задать вопрос, нужно знать большую часть ответа. Р.Шекли. |
|
Создано: 07 апреля 2012 16:15 · Поправил: TryAga1n · Личное сообщение · #9 |
|
Создано: 07 апреля 2012 16:30 · Личное сообщение · #10 Vovan666 пишет: Бред конечно, но например создай тред который со Sleep,100 будет проверять все процессы и если там есть TerminateProcess(и все остальные), блокировать их типа ret в начале. Не айс если честно ... так можно и систему подвесить, если во всех процессах хутчить TerminateProcess и иже с ними.. ClockMan пишет: пиши дровину и прячь свой процесс как олю прячет фантик да мог бы я спрятать, и пример исходника дровины есть... но пока хочу той реализации о которой писал выше.. TryAga1n пишет: Вообще вопрос этот чисто VX'ерский, так что стоит подомогаться до СЛиВок, он много может рассказать)) Ну... не VX'ерский... , просто от "продвинутых" пользователей которые суют нос куда не следует . ----- aLL rIGHTS rEVERSED! |
|
Создано: 07 апреля 2012 16:32 · Личное сообщение · #11 |
|
Создано: 07 апреля 2012 17:42 · Личное сообщение · #12 |
|
Создано: 07 апреля 2012 19:20 · Личное сообщение · #13 |
|
Создано: 07 апреля 2012 19:38 · Личное сообщение · #14 |
|
Создано: 07 апреля 2012 19:54 · Поправил: OnLyOnE · Личное сообщение · #15 Dart Sergius пишет: Поставь обработчик на закрытие твоего сервиса - открытие его снова. Это, я так понял, во втором процессе? Можно.. NikolayD пишет: А утилита от Ms-Rem'a не лечит такое? Ну не буду же я таскать с вместе со своим сервисом какую-то утилиту? P.S. Но я так и не увидел ни одного даже самого маленького кусочка кода реализации одного из вариантов. Слова.. слова... P.P.S. Тайно надеюсь, что топ прочтет глубокоуважаемый системный гуру ntldr и посоветует дельное.. ----- aLL rIGHTS rEVERSED! |
|
Создано: 07 апреля 2012 20:44 · Личное сообщение · #16 |
|
Создано: 07 апреля 2012 20:53 · Личное сообщение · #17 |
|
Создано: 07 апреля 2012 21:27 · Личное сообщение · #18 Dart Sergius пишет: OnLyOnE, а в сервисы не обрабатывают сами своё закрытие? Что если заменить обработчик системный на закрытие - своим? естественно есть обработчик,но если мне самому надо будет нужно остановить сервис, я хрен это сделаю если в обработчике намучу рестарт, если я тебя правильно понял.. Archer пишет: Можно выставить автоматический рестарт сервиса, если он помер. Тоже самое, мне надо к примеру самому прибить сервис... ?.. ----- aLL rIGHTS rEVERSED! |
|
Создано: 07 апреля 2012 21:42 · Личное сообщение · #19 |
|
Создано: 07 апреля 2012 21:55 · Личное сообщение · #20 |
|
Создано: 07 апреля 2012 21:56 · Личное сообщение · #21 |
|
Создано: 07 апреля 2012 22:12 · Личное сообщение · #22 Почитай мой пост выше ещё раз. Я не имел в виду обработчики. А имел в виду стандартную виндовую фичу перезапуска сервисов в случае сбоев. Если происходит сбой (внезапно сервис сдох), винда его перезапустит, никакие обработчики трогать не надо. | Сообщение посчитали полезным: OnLyOnE |
|
Создано: 07 апреля 2012 22:21 · Поправил: ARCHANGEL · Личное сообщение · #23 OnLyOnE ----- Stuck to the plan, always think that we would stand up, never ran. |
|
Создано: 07 апреля 2012 23:09 · Личное сообщение · #24 Придет ntldr и скажет, что выхода нет Нормально это не сделать, все хотят быстро и с малым кодом, лень писать. Полулегально можно перехватом SSDT или инжект в чужой процес, но все это дело может и не сработать, сейчас понаставлено всякого на компьютерах. Поэтому чем проще, тем лучше. По нормальному я бы делал Длл с основной начинкой, она как сервис по умолчанию не будет видна в таск менеджере, далее наделать нужных гуи стабов, скажем ГУИ для управления, ГУИ с основным функционалом, далее накатать протокол общения через named pipes, ввести туда стандарт безопасности, таким образом без особого реверса только ты будешь общаться со своим сервисом, через протокол реализовать управление завершения или изменения параметра авторестарта. Далее остальная начинка сервиса развертывает все стабы гуи скажем через планировщик задач, либо открытие ехе черех сторонний процесс через инжект и конект к сервису с проверкой. Если даже гуй будет леквидирован пользователем, он не завершит весь главный сервис, сервис легко запустит вновь нужный ему стаб для работы с пользователем. Если же адепт полезет в сервисы проверять или будет наводка на именно тот сервис, то сервис в списке сервисов можно скрыть через структуру SERVICE_RECORD, по принципу сокрытия тоже самое, что сокрытие в таскменеджере, нужно будет лишь перебрать их и найти свой сервис. Вот статья на эту тему http://www.codeproject.com/Articles/46670/Service-Hiding Также можно посмотреть плагины оллидбг там есть кажется сокрытие через хук опенпроцесс и NtQueryInformationProcess Сам сервис при перезапуске Code:
Все остальное через ControlService управляется как стандартный сервис. Клиент - Сервер техникой и легкой игрой с перехватами можно сделать нормальное сокрытие ИМХО ----- RE In Progress [!] Coding Hazard [!] Stay Clear of this Cube | Сообщение посчитали полезным: OnLyOnE, _ruzmaz_ |
|
Создано: 08 апреля 2012 01:12 · Личное сообщение · #25 |
|
Создано: 08 апреля 2012 08:06 · Личное сообщение · #26 Archer пишет: Почитай мой пост выше ещё раз. Я не имел в виду обработчики. А имел в виду стандартную виндовую фичу перезапуска сервисов в случае сбоев. Если происходит сбой (внезапно сервис сдох), винда его перезапустит, никакие обработчики трогать не надо. Я понял, вариант неплохой скорее всего его и реализую. mak спасибо за код. ----- aLL rIGHTS rEVERSED! |
|
Создано: 08 апреля 2012 09:18 · Личное сообщение · #27 Сделал Для "продвинутых" юзверей действительно оптимальное решение "не убиваемого" процесса. Вот мой код (может кому будет интересно) Code:
----- aLL rIGHTS rEVERSED! |
|
Создано: 08 апреля 2012 17:50 · Поправил: cosinus · Личное сообщение · #28 Дык не решилась проблемка-то. Касаемо действий венды при сбое сервиса, то можно и в реестре сразу править ключи. Которые можно отловить RegMon'ом. Но это "кто-как-хочет". Но если реально надо защитить процес от кыляния в "диспетчере задач" и других ринг3-утилитах, то лучше сделать так, чтобы имени этого процесса в этих утилита небыло tasklist в командной строке и tasklist /svc Или же "прятаться" ещё глубже, в тех "отличиях" выводимых консолью. Тоесть лучше спрятаться, тогда перед тем чтобы кильнуть - следует поискать. И поиск через EPROCESS может обламаться Думаю у меня получилось изложить ход мысли. |
|
Создано: 08 апреля 2012 18:04 · Личное сообщение · #29 cosinus Если уж развивать это направление, то любой "продвинутый" юзверь может качнуть RKU, перечислить все процессы и сделать Force Kill + File Erase, и если сервис представлен самостоятельным ехе-файлом, то можно сразу начинать отпевать его. И никакие трюки с EPROCESS тут не работают, ибо RKU юзает списки планировщика. ----- Stuck to the plan, always think that we would stand up, never ran. |
|
Создано: 08 апреля 2012 19:47 · Личное сообщение · #30 |
. 1 . 2 . >> |
eXeL@B —› Программирование —› Protect Process |