завершение процессов

Тема в разделе "WASM.NT.KERNEL", создана пользователем 0x00, 25 май 2008.

  1. Twister

    Twister New Member

    Публикаций:
    0
    Регистрация:
    12 окт 2005
    Сообщения:
    720
    Адрес:
    Алматы
    Как я уже говорил, перехватить могут и Ps. Было как-то дело и я, для того, чтобы обойти перехват Zw, грузил оригинальные байты с диска. Но, что очевидно, от инлайна Ps это не спасет. Ну а самое важное - в ядре любое противостояние это борьба с ветряными мельницами, все бесполезно. Да я думаю, что ТС врядли этими тонкостями интересовался.
     
  2. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Twister
    Благо если хэндлер проверяет PreviousMode, иначе крах. Кодер не способный разбирать код не кодер. Вам как никому сдесь должно быть хорошо известно про коденг шадова в ядре, про экспорт можно забыть сразу. Когда он откроет для себя граф и начнёт мыслить отрешённо от кода, тогда и проблемы исчезнут. Например мне обычно достаточно одного и тогоже кода, который парсит код и создаёт граф, надстройка занимает десятки байт, что им мешает сделать тоже самое.
     
  3. Twister

    Twister New Member

    Публикаций:
    0
    Регистрация:
    12 окт 2005
    Сообщения:
    720
    Адрес:
    Алматы
    Отсутствие знаний. Ибо зачем тогда им задавать здесь вопросы? Наше же дело наставить на путь истинный. По началу на самый простой, до более продвинутых дойдут потом, с опытом.
     
  4. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Twister
    Вот ответы только в виде имён экспортируемых функций не помогут.
     
  5. at0s

    at0s New Member

    Публикаций:
    0
    Регистрация:
    13 июл 2009
    Сообщения:
    91
    спасибо всем за ответы
    попытылся реализовать и не совсем разобрался что к чему
    Код (Text):
    1.  NtStatus =ObOpenObjectByPointer(
    2.     (PVOID) pTargetProcess,
    3.     OBJ_EXCLUSIVE,    //HandleAttributes,
    4.     NULL,       //  PassedAccessState OPTIONAL,
    5.     STANDARD_RIGHTS_ALL,// GENERIC_READ,    //  DesiredAccess,
    6.     NULL,     //  ObjectType,
    7.     KernelMode,  // AccessMode
    8.     Handle
    9.     );
    10. //      NtStatus = ZwTerminateProcess( *Handle, 0xC0000005 );
    после многочисленных БСОДов дошел до NtStatus == STATUS_INVALID_PARAMETER
    (0xC000000D )и застопорился, в MSDN написанно очерь расплывчато
    ( как в 90% MSDN )
     
  6. at0s

    at0s New Member

    Публикаций:
    0
    Регистрация:
    13 июл 2009
    Сообщения:
    91
    забыл
    Код (Text):
    1. PEPROCESS pTargetProcess
     
  7. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    5.242
    может быть проблема с Handle? память под хендл выделена, или вы просто объявили ее как указатель? не проще ли сделать так:
    Код (Text):
    1. HANDLE Handle = NULL;
    2. ...
    3. NtStatus = ObOpenObjectByPointer(..., &Handle);
    4. NtStatus = ZwTerminateProcess(Handle, 0xC0000005);
     
  8. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    5.242
    еще есть такой момент в атрибутах, обратите внимание:
     
  9. Twister

    Twister New Member

    Публикаций:
    0
    Регистрация:
    12 окт 2005
    Сообщения:
    720
    Адрес:
    Алматы
    На секунду задумываемся, а потом читаем чуть выше (собственно, Rel уже это подметил)
    В msdn написано все четко и ясно, где тут расплывчатость?

    Хотя на самом деле это не совсем правда. В драйвере по приходу IRP от приложения (т.е. не в контексте system) элементрано можно открыть хэндл без флага OBJ_KERNEL_HANDLE для передачи в юзермод и там его преспокойно использовать, проверено. Правда я конкретно указывал ObjectType, может быть это как-то повлияло.
     
  10. at0s

    at0s New Member

    Публикаций:
    0
    Регистрация:
    13 июл 2009
    Сообщения:
    91
    Еще раз спасибо всем за ответы
    в таком виде вырубает без проблем
    Код (Text):
    1.         NtStatus =ObOpenObjectByPointer(
    2.                     (PVOID) pTargetProcess,
    3.                     OBJ_KERNEL_HANDLE,
    4.                     NULL,
    5.                         PROCESS_ALL_ACCESS, //PROCESS_TERMINATE,
    6.                         NULL,
    7.                         KernelMode,
    8.                         &Handle
    9.                        );
    10.         NtStatus = ZwTerminateProcess( Handle, 0xC0000005 );
     
  11. Medstrax

    Medstrax Забанен

    Публикаций:
    0
    Регистрация:
    18 июл 2006
    Сообщения:
    673
    Офф. Приходилось наблюдать ситуации, когда процесс завершить невозможно. Ни таскманагер, ни куча утил, которые якобы завершают любые процессы не помогли. Воспроизвести ситуацию на XP_SP3 с определенной вероятностью можно. Берем напрочь убитый диск, толкаем в привод, пытаемся окрыть этот диск в проводнике. Пока привод ломает голову, прибиваем explorer в taskmanager'е. В рез-те, хотя десктоп пропадает, эксплорер остается висеть в списке процессов. Не убивается ничем, привод продолжает шуршать. Мельком глянул, трабла вроде в PspExitThread. Лекарство возможно?
     
  12. Sol_Ksacap

    Sol_Ksacap Миша

    Публикаций:
    0
    Регистрация:
    6 мар 2008
    Сообщения:
    623
    IRP'ы висят, вероятно. Ага, вот статья. Не думаем, что существует безопасное решение.
     
  13. Medstrax

    Medstrax Забанен

    Публикаций:
    0
    Регистрация:
    18 июл 2006
    Сообщения:
    673
    Мм, руссиновича прочел. Однако ясней не стало, как победить путей не видно
     
  14. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    Помогут. Пусть сперва научатся завершать процесс, имея его PEPROCESS, через открытие хендла и завершение.

    medstrax1
    Процесс висит, процессорного времени не жрет, память вся постепенно уйдет в стендбай или модифаед списки, а потом и вовсе выгрузится на диск. Зачем его убивать? +) запусти еще один, будет два :lol:

    а серьезно, попробуй получить адрес IRP потока, который висит, и комплитнуть его с ошибкой или отменить.