Как узнать кто вызвал системный вызов

Тема в разделе "WASM.NT.KERNEL", создана пользователем Hippey, 15 фев 2012.

  1. Hippey

    Hippey New Member

    Публикаций:
    0
    Регистрация:
    24 окт 2011
    Сообщения:
    49
    Здравствуйте!

    Есть функция, которая хукает NtOpenProcess, есть функция, заменяющая ее. Вот код:


    Код (Text):
    1. NTSTATUS NTAPI New_NtOpenProcess ( OUT PHANDLE ProcessHandle,
    2.                                    IN ACCESS_MASK AccessMask,
    3.                                    IN POBJECT_ATTRIBUTES ObjectAttributes,
    4.                                    IN PCLIENT_ID ClientId )
    5. {
    6.  // Как тут узнать кто вызвал эту функцию? Процесс ид может быть?
    7.  
    8. }
    Спасибо!
     
  2. x64

    x64 New Member

    Публикаций:
    0
    Регистрация:
    29 июл 2008
    Сообщения:
    1.370
    Адрес:
    Россия
    PsGetCurrentThread()
    PsGetCurrentProcess()
    PsGetCurrentProcessId()
     
  3. Hippey

    Hippey New Member

    Публикаций:
    0
    Регистрация:
    24 окт 2011
    Сообщения:
    49
    x64
    Спасибо! Не подскажешь, где в структуре PEPROCESS название процесса?

    Спасибо!
     
  4. x64

    x64 New Member

    Публикаций:
    0
    Регистрация:
    29 июл 2008
    Сообщения:
    1.370
    Адрес:
    Россия
    Что есть "название процесса"?
    Вот, например: Путь к файлу-образу процесса.
     
  5. XshStasX

    XshStasX New Member

    Публикаций:
    0
    Регистрация:
    9 авг 2008
    Сообщения:
    991
  6. Malfoy

    Malfoy New Member

    Публикаций:
    0
    Регистрация:
    2 янв 2012
    Сообщения:
    698
    После получения процесса он может завершиться, далее будет нульдереференс и костыль отвалится.
     
  7. shchetinin

    shchetinin Member

    Публикаций:
    0
    Регистрация:
    27 май 2011
    Сообщения:
    715
    Malfoy
    Это как процесс завершится ? С каких это пор процесс может заверщится выполняя NtOpenProcess(kernel)?
     
  8. Malfoy

    Malfoy New Member

    Публикаций:
    0
    Регистрация:
    2 янв 2012
    Сообщения:
    698
    shchetinin
    Мультизадачность же.
     
  9. shchetinin

    shchetinin Member

    Публикаций:
    0
    Регистрация:
    27 май 2011
    Сообщения:
    715
    Malfoy
    Ну что что? Как будет завершать поток который сечайс в ядре(NtOpenProcess)?

    ExitProcess(TerminateProcess)
    1) Требуется захватить ресурс работы с процессом(ObReferenceObjectByHandle -EPROCESS-> RundownProtect)
    2) Кильнуть все потоки(цикл PsGetNextProcessThread, PspTerminateThreadByPointer ) разумеет кроме текущего.
    3) Можно уже и освободить флаг протекции


    Как пройдем первый пункт?
    Как пройдем второй путнт(Как доставим APC когда поток находится в ядре)?

    Вообщем не получится:)
     
  10. Malfoy

    Malfoy New Member

    Публикаций:
    0
    Регистрация:
    2 янв 2012
    Сообщения:
    698
    shchetinin
    Другой поток его завершит.
     
  11. shchetinin

    shchetinin Member

    Публикаций:
    0
    Регистрация:
    27 май 2011
    Сообщения:
    715
    Malfoy
    Я написал почему его завершить не получится.