Как завершить процесс из драйвера

Тема в разделе "WASM.BEGINNERS", создана пользователем 777user777, 30 июн 2011.

  1. 777user777

    777user777 New Member

    Публикаций:
    0
    Регистрация:
    30 ноя 2010
    Сообщения:
    109
    Как можо завершить процесс из драйвера,зная только имя процесса(на асме)?
    пробовал через ZwOpenProcess ,но не понял какие параметры передавать.
     
  2. klzlk

    klzlk New Member

    Публикаций:
    0
    Регистрация:
    2 июн 2011
    Сообщения:
    449
    777user777
    NtOpenProcess открывает процесс по имени обьекта(это имя никак не связано с именем модуля) либо по PID.
     
  3. 777user777

    777user777 New Member

    Публикаций:
    0
    Регистрация:
    30 ноя 2010
    Сообщения:
    109
    а как по PID?
     
  4. klzlk

    klzlk New Member

    Публикаций:
    0
    Регистрация:
    2 июн 2011
    Сообщения:
    449
    777user777
    Вначале следует прототип функции изучить. Если всёже не понятно(что там может быть не понятного %), то можно посмотреть как это реализовано в пользовательском стабе:
    Код (Text):
    1. HANDLE
    2. WINAPI
    3. OpenProcess(
    4.     DWORD dwDesiredAccess,
    5.     BOOL bInheritHandle,
    6.     DWORD dwProcessId
    7.     )
    8.  
    9. /*++
    10.  
    11. Routine Description:
    12.  
    13.     A handle to a process object may be created using OpenProcess.
    14.  
    15.     Opening a process creates a handle to the specified process.
    16.     Associated with the process handle is a set of access rights that
    17.     may be performed using the process handle.  The caller specifies the
    18.     desired access to the process using the DesiredAccess parameter.
    19.  
    20. Arguments:
    21.  
    22.     mDesiredAccess - Supplies the desired access to the process object.
    23.         For NT/Win32, this access is checked against any security
    24.         descriptor on the target process.  The following object type
    25.         specific access flags can be specified in addition to the
    26.         STANDARD_RIGHTS_REQUIRED access flags.
    27.  
    28.         DesiredAccess Flags:
    29.  
    30.         PROCESS_DUP_HANDLE - Duplicate object access to the process is
    31.             desired.  This access is required in order to duplicate an
    32.             object handle into or out of a process.
    33.  
    34.         PROCESS_QUERY_INFORMATION - This access is required to read
    35.             certain information from the process object.
    36.  
    37.         PROCESS_VM_READ - This access is required to read the memory of
    38.             another process.
    39.  
    40.         PROCESS_VM_WRITE - This access is required to write the memory
    41.             of another process.
    42.  
    43.         SYNCHRONIZE - This access is required to wait on a process object.
    44.  
    45.         PROCESS_ALL_ACCESS - This set of access flags specifies all of the
    46.             possible access flags for a process object.
    47.  
    48.     bInheritHandle - Supplies a flag that indicates whether or not the
    49.         returned handle is to be inherited by a new process during
    50.         process creation.  A value of TRUE indicates that the new
    51.         process will inherit the handle.
    52.  
    53.     dwProcessId - Supplies the process id of the process to open.
    54.  
    55. Return Value:
    56.  
    57.     NON-NULL - Returns an open handle to the specified process.  The
    58.         handle may be used by the calling process in any API that
    59.         requires a handle to a process.  If the open is successful, the
    60.         handle is granted access to the process object only to the
    61.         extent that it requested access through the DesiredAccess
    62.         parameter.
    63.  
    64.     NULL - The operation failed. Extended error status is available
    65.         using GetLastError.
    66.  
    67. --*/
    68.  
    69. {
    70.     NTSTATUS Status;
    71.     OBJECT_ATTRIBUTES Obja;
    72.     HANDLE Handle;
    73.     CLIENT_ID ClientId;
    74.  
    75.     ClientId.UniqueThread = (HANDLE)NULL;
    76.     ClientId.UniqueProcess = (HANDLE)LongToHandle(dwProcessId);
    77.  
    78.     InitializeObjectAttributes(
    79.         &Obja,
    80.         NULL,
    81.         (bInheritHandle ? OBJ_INHERIT : 0),
    82.         NULL,
    83.         NULL
    84.         );
    85.     Status = NtOpenProcess(
    86.                 &Handle,
    87.                 (ACCESS_MASK)dwDesiredAccess,
    88.                 &Obja,
    89.                 &ClientId
    90.                 );
    91.     if ( NT_SUCCESS(Status) ) {
    92.         return Handle;
    93.         }
    94.     else {
    95.         BaseSetLastNTError(Status);
    96.         return NULL;
    97.         }
    98. }
    А вообщем рано есчо вам в ядре лазить.
     
  5. 777user777

    777user777 New Member

    Публикаций:
    0
    Регистрация:
    30 ноя 2010
    Сообщения:
    109
    ну,допустим,я получил хэндл процесса,и как мне его завершить?
     
  6. steelfactor

    steelfactor New Member

    Публикаций:
    0
    Регистрация:
    26 апр 2007
    Сообщения:
    501
    PspTerminateProcess/PspTerminateThreadByPointer
     
  7. felize

    felize New Member

    Публикаций:
    0
    Регистрация:
    2 июн 2009
    Сообщения:
    39
    https://damagelab.org/index.php?showtopic=21169
     
  8. 777user777

    777user777 New Member

    Публикаций:
    0
    Регистрация:
    30 ноя 2010
    Сообщения:
    109
    эти функции вроде искать в памяти нужно?
     
  9. valterg

    valterg Active Member

    Публикаций:
    0
    Регистрация:
    19 авг 2004
    Сообщения:
    2.105
    В памяти может быть, а вот в гугле гораздо полезнее.
     
  10. 777user777

    777user777 New Member

    Публикаций:
    0
    Регистрация:
    30 ноя 2010
    Сообщения:
    109
    искал уже,но ничего полезного не нашёл...
    даже не сказано где эта функция(я так понял что в ntoskrnl.exe)
     
  11. steelfactor

    steelfactor New Member

    Публикаций:
    0
    Регистрация:
    26 апр 2007
    Сообщения:
    501
    777user777
    Плохо ищешь
    http://bbs.pediy.com/archive/index.php?t-116885.html
    http://hi.baidu.com/darkroot/blog/item/b9e9cc1f4b46a3c1a686695a.html
    Достаточно в гугле просто вбить PspTerminateThreadByPointer
     
  12. klzlk

    klzlk New Member

    Публикаций:
    0
    Регистрация:
    2 июн 2011
    Сообщения:
    449
    В сурсах есть, в ядре есть, нафиг тут гогол!
     
  13. 777user777

    777user777 New Member

    Публикаций:
    0
    Регистрация:
    30 ноя 2010
    Сообщения:
    109
    а как узнать PID процесса?
     
  14. TrashGen

    TrashGen ТрещГен

    Публикаций:
    0
    Регистрация:
    15 мар 2011
    Сообщения:
    1.201
    Адрес:
    подполье
    Посмотрите в диспетчере процессов в колонке 'идентификатор процесса'
     
  15. 777user777

    777user777 New Member

    Публикаций:
    0
    Регистрация:
    30 ноя 2010
    Сообщения:
    109
    я имел ввиду програмно.
     
  16. klzlk

    klzlk New Member

    Публикаций:
    0
    Регистрация:
    2 июн 2011
    Сообщения:
    449
    777user777
    Давайте подумаем вместе. Начинайте размышлять. Какие усилия вы приложили для решения данного вопроса ?