Как препятствовать принудительному снятию задачи?

Тема в разделе "WASM.WIN32", создана пользователем CodeGrinder, 29 июл 2008.

  1. CodeGrinder

    CodeGrinder New Member

    Публикаций:
    0
    Регистрация:
    9 фев 2007
    Сообщения:
    56
    Нужно чтобы пользователь не смог завершить процесс через диспетчер задач. Или на крайняк успеть сохранить параметры перед принудительным закрытием, если это возможно.
    Заранее спасибо за помощь! :)
     
  2. zhindos

    zhindos New Member

    Публикаций:
    0
    Регистрация:
    10 июл 2008
    Сообщения:
    142
    Если точно известен список утилит, которыми планируется завершить процесс - тогда в каждой из них в TerminateProcess в начале ставим C2 08 00 - все cool...(по таймеру проверяем наличие каждой из них в данный момент времени - самый простейший вариант)
    Но в task manager-е все равно можно будет кильнуть задачу - как он это делает - фиг его знает...
     
  3. CodeGrinder

    CodeGrinder New Member

    Публикаций:
    0
    Регистрация:
    9 фев 2007
    Сообщения:
    56
    Антивирь Каспера умеет это делать!((

    Была идея запуска двух процессов, которые следят друг за другом, но если "завершить дерево процессов" то это бесполезно!)
     
  4. Ursus

    Ursus Member

    Публикаций:
    0
    Регистрация:
    15 мар 2006
    Сообщения:
    238
    Адрес:
    Russia
    А в чем тет проблема-то? Запускаешь не 2 а 3 (три) процесса один из другого, причем 2-й процесс завершается после того, как запустит 3-й. И все - дерево процессов разрушено!
     
  5. zhindos

    zhindos New Member

    Публикаций:
    0
    Регистрация:
    10 июл 2008
    Сообщения:
    142
    Нуу против каспера не попрешь :) (во всяком случае в ring3)
    А насчет обычных process-viewer-ов - мой способ в-принципе работает, в task manager-е тоже, я имел ввиду на вкладке задач можно кильнуть задачу, я не просек пока, как он это делает(сам термин "задача" меня сбивает - я думаю, это не относится к управлению задачами в защищенном режиме x86; у task manager-а задача - это окно, хотя это тупо...). Подытожив вышесказанное: пока я не нашел ф-ию, которую вызывает task manager, чтобы кильнуть задачу...
     
  6. CodeGrinder

    CodeGrinder New Member

    Публикаций:
    0
    Регистрация:
    9 фев 2007
    Сообщения:
    56
    Я попробую обойтись запуском одного процессса, который запутит второй, а второй запустит третий и завершится. Не факт, но думаю сработает! Спасибо за идею! :)
     
  7. CodeGrinder

    CodeGrinder New Member

    Публикаций:
    0
    Регистрация:
    9 фев 2007
    Сообщения:
    56
    Я не думаю что есть такая функция в r3. ИМХО там ядро грохает процесс (возможно даже дескрипторы удаляет)
     
  8. zhindos

    zhindos New Member

    Публикаций:
    0
    Регистрация:
    10 июл 2008
    Сообщения:
    142
    Вот как раз-таки процесс грохает именно ф-ия r3 TerminateProcess. Конечно, она передает управление ядру, но ведь вызывается же! Например, после выполнения следующего кодеца невозможно будет кильнуть ни один процесс task manager-ом:

    Код (Text):
    1. BYTE buf[] = {0xC2, 0x08, 0x00};
    2. WriteProcessMemory(hTaskProcess, GetProcAddress(_T("Kernel32.dll"), "TerminateProcess"), buf, 3, NULL);/*ф-ия TerminateProcess как правило во всех процессах имеет одинаковый вирт. адрес*/
    ЗЫ. Я говорил именно о "задаче" в понимании task manager-а
     
  9. CodeGrinder

    CodeGrinder New Member

    Публикаций:
    0
    Регистрация:
    9 фев 2007
    Сообщения:
    56
    такой метод не очень подходит ввиду своей радикальности!) но спасибо, пригодится! :)
     
  10. CodeGrinder

    CodeGrinder New Member

    Публикаций:
    0
    Регистрация:
    9 фев 2007
    Сообщения:
    56
    Не могу найти простой способ уведомления. Как третий процесс узнает, что первый завершился? %-)
     
  11. zhindos

    zhindos New Member

    Публикаций:
    0
    Регистрация:
    10 июл 2008
    Сообщения:
    142
    CodeGrinder

    Код (Text):
    1. WaitForSingleObject(hFirstProcess, INFINITE);
    2. //дальше твой код...
    Но таким способом ты узнаешь именно когда процесс завершится(вопрос стоял именно так), а смысл???
     
  12. CodeGrinder

    CodeGrinder New Member

    Публикаций:
    0
    Регистрация:
    9 фев 2007
    Сообщения:
    56
    Первый процесс будет следить за вторым и в случае его завершения рестартовать. Аналогично второй следит за первым!)
     
  13. zhindos

    zhindos New Member

    Публикаций:
    0
    Регистрация:
    10 июл 2008
    Сообщения:
    142
    Типа понял:)
    При желании - вызывается SuspendThread для каждого потока 3-го процесса, потом киляется 1-ый, а за ним и третий... или два последовательных вызова TerminateProcess для этих процессов - маловероятно, что между ними планировщик переключится на поток именно того процесса, в котором есть соответствующая обработка...
    Так что метод довольно средненький...
     
  14. CodeGrinder

    CodeGrinder New Member

    Публикаций:
    0
    Регистрация:
    9 фев 2007
    Сообщения:
    56
    А как получить хэндл процесса таск менеджера? Для WriteProcessMemory.

    Ой! Я что-то о существовании GetModuleHandle забыл!))
     
  15. zhindos

    zhindos New Member

    Публикаций:
    0
    Регистрация:
    10 июл 2008
    Сообщения:
    142
    CodeGrinder
    Ой! Я что-то о существовании GetModuleHandle забыл!))

    К чему?
     
  16. Twister

    Twister New Member

    Публикаций:
    0
    Регистрация:
    12 окт 2005
    Сообщения:
    720
    Адрес:
    Алматы
    Ребята, влом было заново переписывать то, что уже сотню раз обговаривалось, поэтому просто приведу линк: http://bbs.vbstreets.ru/viewtopic.php?p=6695246#6695246
     
  17. CodeGrinder

    CodeGrinder New Member

    Публикаций:
    0
    Регистрация:
    9 фев 2007
    Сообщения:
    56
    Спасибо! :)
     
  18. zhindos

    zhindos New Member

    Публикаций:
    0
    Регистрация:
    10 июл 2008
    Сообщения:
    142
    поняна......
    То, что без ring0 надежный способ не создать, ясно с самого начала, imho
    А все, что тут обсуждалось - забавы, чтобы попугать бедного юзверя...:)

    ЗЫ. vbstreets ... Вот от этой части линка я сначала стреманулся:)))
     
  19. CodeGrinder

    CodeGrinder New Member

    Публикаций:
    0
    Регистрация:
    9 фев 2007
    Сообщения:
    56
    Где найти обновленные либы к масму? А то GetInfoTable у меня не понимает..
     
  20. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    CodeGrinder
    В вижал студии, там же и масм последний. :)