Проблема с ntOpenProcess в Vista(ring0)

Тема в разделе "WASM.WIN32", создана пользователем garfik, 14 фев 2009.

  1. garfik

    garfik New Member

    Публикаций:
    0
    Регистрация:
    14 фев 2009
    Сообщения:
    11
    Привет всем, пишу вот драйвер на с++, целей у него много, но обо всем по порядку.

    Вообще задумка простая: запускается прога А, запускается драйвер, запускается прога Б, прога А передает драйверу PID проги Б.. после этого драйвер блочит обращение к проге Б(зная его PID) через OpenProcess

    на ХР все работает как надо(и события, и общение прога-драйвер), а вот в висте трабла за траблой... решил я не мало проблем уже, однако вот эту побороть пока не в силах :dntknw:

    драйвер хукает ntOpenprocess допустим через SDT:

    Код (Text):
    1. NTSTATUS NewNtOpenProcess (    OUT PHANDLE ProcessHandle,    IN ACCESS_MASK DesiredAccess,    IN POBJECT_ATTRIBUTES ObjectAttributes,    IN PCLIENT_ID ClientId OPTIONAL){
    2.     HANDLE ProcessId;
    3.  
    4.     __try{
    5.         ProcessId = (HANDLE)ClientId->UniqueProcess;
    6.     }
    7.     __except(EXCEPTION_EXECUTE_HANDLER){
    8.         DPRINT("Exception");
    9.         return STATUS_INVALID_PARAMETER;
    10.     }
    11.     DPRINT("ntop: proc=%d, pid_b=%d, pid=%d",PsGetCurrentProcessId(), PID_B,ProcessId);
    12. //PID_B глобальная переменная в которой находится "защищаемый" процесс
    13.     return TrueNtOpenProcess(ProcessHandle, DesiredAccess, ObjectAttributes, ClientId);
    14. }
    Допустим:
    - пид программы Б - 4084
    - пид программы которая вызывает ntopenprocess - 1136

    Смотри что вывелось после выполнения функции:
    в ХР: ntop: proc=1136, pid_b=4084, pid=4084 - все верно
    в Vista: ntop: proc=1136, pid_b=4084, pid=1242508 - не верный ProcessID

    почему так в висте? Почему в висте в ClientID->UniqueProcess лежит что-то явно на пид не похожее? Я чего-то упустил?

    p.s. если что, то NtBuildNumber - 6001, начало функции беру по адресу: 0x0bf

    Заранее спасибо
     
  2. garfik

    garfik New Member

    Публикаций:
    0
    Регистрация:
    14 фев 2009
    Сообщения:
    11
    нет лучшей помощи, чем помощи от себя :))

    проблема решилась достаточно просто... копированием с виртуалки(где стоит виста) ntdll.dll и засовыванием его в IDA.

    хоть пользоваться идой, олей и почти не умею, да и что скрывать, Си и Асм я тоже под ноль знаю, но верный адрес я все-таки нашел минут так за 10.. гы.. :)