Чем чревато изменения Pid'a процесса?

Тема в разделе "WASM.WIN32", создана пользователем dead_body, 26 апр 2005.

  1. dead_body

    dead_body wasm.ru

    Публикаций:
    0
    Регистрация:
    3 сен 2004
    Сообщения:
    603
    Адрес:
    Украина;г.Харьков;г.Н.Каховка
    Здраствуйте. Сосбно сабж, поменял значит я блокноту Пид на 4(просто ради интереса), включаю виндовский таск мангер, он начал добавлять процессы с названием System и Пидом -1, а остальное как у процесса System.

    Выключил таск манагер.

    Запускаю от Сис Интерналс вижу Блокнот с Пидом 4.

    Пытаюсь завершить, а нифига то же самое что завершать System. :) Посмотрел свойства, вижу 55 потоков + остальное , ну прям System.

    Посидел минут 10-15, покодил дальше и бац! система медленно начала завершать процессы и ребутнулась(после завершения некоторых процессов).

    Теперь хочу спросить вас, может кто сталкивался с этим, почему так? почему не сразу ребут, а через 10 - 15 минут? можно ли поменять Пид на другой несуществующий? Я конечно щас и дальше исследовать пойду, но может пока кто-то поделиться инфой которую он имеет?
     
  2. bogrus

    bogrus Active Member

    Публикаций:
    0
    Регистрация:
    24 окт 2003
    Сообщения:
    1.338
    Адрес:
    ukraine
    А как\чем менял пид?
     
  3. dead_body

    dead_body wasm.ru

    Публикаций:
    0
    Регистрация:
    3 сен 2004
    Сообщения:
    603
    Адрес:
    Украина;г.Харьков;г.Н.Каховка
    bogrus

    приведу кусок кода, но могу выложить и прогу. (Я просто таск манагер пишу :), а это пытался придумать способ для убиения процессов как в теме "Как противостоять TerminateProcess" )
    Код (Text):
    1.  
    2. TerminateProcess_   proc    PID:dword   ;try to terminate process. Try to open PID,+1,+2,+3
    3. LOCAL temp[2]:dword
    4. LOCAL PID_:dword
    5.     mov eax,PID
    6.     dec eax
    7.     mov PID_,eax
    8. @@: inc PID_
    9.     invoke OpenProcess_,PID_,PROCESS_TERMINATE
    10.     .if eax != 0
    11.         mov temp,eax
    12.         push PID
    13.         pop temp[4]
    14.         invoke DeviceIoControl,g_hDevice,IOCTL_TERMINATE_PROCESS,addr temp,8,0,0,addr Garbage,0
    15.         .if eax == 0
    16.             invoke CloseHandle,temp
    17.             xor eax,eax
    18.         .endif
    19.     .else
    20.         mov eax,PID
    21.         add eax,4
    22.         cmp PID_,eax
    23.         jnz @B
    24.         xor eax,eax
    25.     .endif
    26.     ret
    27. TerminateProcess_ endp
    28.  
    29. .elseif [edi].Parameters.DeviceIoControl.IoControlCode == IOCTL_TERMINATE_PROCESS
    30.      mov status,STATUS_INVALID_PARAMETER
    31.      .if [edi].Parameters.DeviceIoControl.InputBufferLength == 8
    32.       mov ecx,[esi].AssociatedIrp.SystemBuffer
    33.       mov status,STATUS_UNSUCCESSFUL
    34.       push eax
    35.       invoke PsLookupProcessByProcessId,dword ptr [ecx+4], esp
    36.       pop peProcess
    37.       .if eax == STATUS_SUCCESS
    38.        fastcall ObfDereferenceObject,peProcess
    39.        mov eax,peProcess
    40.        add eax,PID_Offset
    41.        mov dword ptr [eax],32
    42.        mov status,STATUS_SUCCESS
    43.        ;invoke KeAttachProcess,peProcess
    44.       ; mov ecx,[esi].AssociatedIrp.SystemBuffer
    45.        ;invoke ZwTerminateProcess,dword ptr [ecx],00h
    46.        ;.if eax == 0
    47.        ; mov status,STATUS_SUCCESS
    48.        ;.endif
    49.        ;invoke KeDetachProcess
    50.       .endif
    51.      .endif
    52.  
     
  4. bogrus

    bogrus Active Member

    Публикаций:
    0
    Регистрация:
    24 окт 2003
    Сообщения:
    1.338
    Адрес:
    ukraine
    Тю, я думал без ядра сменил, глючит видимо из-за маленького пида (может его 4 бита выделено для системного использования), поставь больше 16, если глюки не пропадут, значит криво поменял :)
     
  5. dead_body

    dead_body wasm.ru

    Публикаций:
    0
    Регистрация:
    3 сен 2004
    Сообщения:
    603
    Адрес:
    Украина;г.Харьков;г.Н.Каховка
    так, после отдыха, размышлений выяснилось что если:

    1)запустить процесс(например калькулятр)

    2)поменять пид в Епроцессе на 32(можна и на другой)

    3)закрыть его.

    и проделать всё во второй раз то Бсод.

    но если поменять на другой пид(24 например) то всё ок.



    также ProcessNotifyRoutine получает уже новый видоизменёный пид.(а скорее всего и все функции которые не обращаються за Пидом к Пебу, то есть 0 кольца).
     
  6. Ms Rem

    Ms Rem New Member

    Публикаций:
    0
    Регистрация:
    17 апр 2005
    Сообщения:
    1.057
    Адрес:
    С планеты "Земля"
    Никогда не меняй PID процесса на уже существующий. Два процесса с одинаковым PID приведут к рассогласованию структур ядра и к синему экрану в результате. А простая смена PID на либой другой чревата глюками связанными с этим процессом и с всеми процессами пытающиеся с ним работать. Так как PEB процесса не обновляется, то GetCurrentProcessId будет выдавать ложный PID, а ZwQuerySystemInformation с классом SystemHandlesInformation выдаст вообще чепуху о хэндлах процесса. Короче, глюки будут, но заранее их нельзя предсказать. Возмодно все, вплоть до BSOD.
     
  7. dead_body

    dead_body wasm.ru

    Публикаций:
    0
    Регистрация:
    3 сен 2004
    Сообщения:
    603
    Адрес:
    Украина;г.Харьков;г.Н.Каховка


    ну от этого можно избавиться, что нам мешает подправить Пид?
     
  8. Ms Rem

    Ms Rem New Member

    Публикаций:
    0
    Регистрация:
    17 апр 2005
    Сообщения:
    1.057
    Адрес:
    С планеты "Земля"
    ну от этого можно избавиться, что нам мешает подправить Пид?



    Ага, тогда для полной корректности смены PID надо еще в таблицы хэндлов лазить и менять там PID владельца. Еще в структуры сервера подсистемы csrss.exe залезть надо. И еще хз куда. В общем, задача не такая простая.
     
  9. CARDINAL

    CARDINAL Member

    Публикаций:
    0
    Регистрация:
    23 янв 2004
    Сообщения:
    551
    Адрес:
    Moscow
    вот вот, и по мере накопления такого рода глюков твоя система деградирует постепенно, а не сразу. Так, что, лучше тебе бросить это неблагодарное занятие.
     
  10. dead_body

    dead_body wasm.ru

    Публикаций:
    0
    Регистрация:
    3 сен 2004
    Сообщения:
    603
    Адрес:
    Украина;г.Харьков;г.Н.Каховка


    ну почему же, мне стало интересно и даже очень...

    сегодня вечером сяду ещё копать, но вообще это я всё делаю для убиения процесса...
     
  11. GorluM

    GorluM николай gorl

    Публикаций:
    0
    Регистрация:
    6 дек 2003
    Сообщения:
    61
    Адрес:
    Москва
    а зачем для убиения процесса менять ему id?

    не проще ли его просто, пардон, классическим путем ZwTerminateProcess etc )
     
  12. kaspersky

    kaspersky New Member

    Публикаций:
    0
    Регистрация:
    18 май 2004
    Сообщения:
    3.006
    а зачем вообще убивать процесс?

    можно просто исключить его из очереди планировщика!