Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 25.11.2014, 19:09   #1
Anton911
Форумчанин
 
Аватар для Anton911
 
Регистрация: 23.08.2011
Сообщений: 171
По умолчанию Перехват ZwOpenProcess

В общем на основе своей предыдущей темы про перехват LoadLibraryW
написал функцию на перехват ZwOpenProcess в нужном процессе. Без глобальных хуков. Ведь выяснил, что даже если пытается открыть какое-либо другое приложение, в процессе цели также происходит вызов данной функции. В общем перехватываться то перехватывается...
А реальноли разобраться, "кто" открывает процесс?
Код:
function NewOpenProcess(phProcess:PDWORD; AccessMask:DWORD; ObjectAttributes:PObjectAttributes;
 ClientID:PClientID): NTStatus; stdcall;
  var
    Test:string;
    point:Pointer;
begin
  Result := _OpenProcess(phProcess, AccessMask, ObjectAttributes, ClientID);
  Assign(filee, 'C:\log1.log');
  Append(filee);
  WriteLn(filee, 'phProcess = ' + IntToStr(DWORD(phProcess)) +
                  ' AccessMask = ' + IntToStr(AccessMask) +
                  ' OA.Length = ' +  IntToStr(ObjectAttributes.Length) +
                  ' OA.RootDirectory = ' +  IntToStr(ObjectAttributes.RootDirectory) +
                  ' OA.ObjectName = ' +  String(ObjectAttributes.ObjectName) +
                  ' OA.Attributes = ' +  IntToStr(ObjectAttributes.Attributes) +
                  ' OA.SecurityDescriptor: = ' +  IntToStr(DWORD(ObjectAttributes.SecurityDescriptor)) +
                  ' OA.SecurityQualityOfService: = ' +  IntToStr(DWORD(ObjectAttributes.SecurityQualityOfService)) +
                  ' CI.UniqueProcess = ' +  IntToStr(ClientID.UniqueProcess) +
                  ' CI.UniqueProcess = ' +  IntToStr(ClientID.UniqueThread)
                  );
  WriteLn(filee, 'Result: ' + ' Push = ' +IntToStr(Result));
  CloseFile(Filee);
end;
Вывожу в файл такую информацию. Вот пару строк из файла.
Код:
phProcess = 174915296 OA.SecurityDescriptor: = 0 OA.SecurityQualityOfService: = 0 CI.UniqueProcess = 4294967295 CI.UniqueProcess = 0
phProcess = 235208332 OA.SecurityDescriptor: = 0 OA.SecurityQualityOfService: = 0 CI.UniqueProcess = 4294967295 CI.UniqueProcess = 0
phProcess = 26140972 OA.SecurityDescriptor: = 0 OA.SecurityQualityOfService: = 0 CI.UniqueProcess = 5720 CI.UniqueProcess = 0
phProcess = 26140524 OA.SecurityDescriptor: = 0 OA.SecurityQualityOfService: = 0 CI.UniqueProcess = 5720 CI.UniqueProcess = 0
phProcess = 26140588 OA.SecurityDescriptor: = 0 OA.SecurityQualityOfService: = 0 CI.UniqueProcess = 5720 CI.UniqueProcess = 0
phProcess = 26142700 OA.SecurityDescriptor: = 0 OA.SecurityQualityOfService: = 0 CI.UniqueProcess = 5720 CI.UniqueProcess = 0
phProcess = 26140300 OA.SecurityDescriptor: = 0 OA.SecurityQualityOfService: = 0 CI.UniqueProcess = 5720 CI.UniqueProcess = 0
phProcess = 26138976 OA.SecurityDescriptor: = 0 OA.SecurityQualityOfService: = 0 CI.UniqueProcess = 5720 CI.UniqueProcess = 0
phProcess = 26141912 OA.SecurityDescriptor: = 0 OA.SecurityQualityOfService: = 0 CI.UniqueProcess = 5720 CI.UniqueProcess = 0
Что такое phProcess? И CI.UniqueProcess? Вот допустим где CI.UniqueProcess = 5720, 5720 - это реальный ProcessId текущего процесса, а вот допустим CI.UniqueProcess = 4294967295, 4294967295 - это непонятно что.
Каждый день узнаю новое...

Последний раз редактировалось Anton911; 25.11.2014 в 19:20.
Anton911 вне форума Ответить с цитированием
Старый 25.11.2014, 19:46   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
ObjectAttributes.SecurityQualityOfS ervice
Просто интересно: PObjectAttributes это же указатель? Тогда как ты получил без разименовывания нужные данные?
Это риторический вопрос.
Цитата:
допустим CI.UniqueProcess = 4294967295, 4294967295 - это непонятно что.
Фоновый или системный процесс. Не?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 26.11.2014, 04:45   #3
Anton911
Форумчанин
 
Аватар для Anton911
 
Регистрация: 23.08.2011
Сообщений: 171
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Просто интересно: PObjectAttributes это же указатель? Тогда как ты получил без разименовывания нужные данные?
Это риторический вопрос.
Блин ненавижу указатели, путаюсь с ними.

Цитата:
Сообщение от Stilet Посмотреть сообщение
Фоновый или системный процесс. Не?
Не, процесса ни системного ни фонового с таким PID не существует.

Подскажите пожалуста, как мне правильно разименовать ObjectAttributes.ObjectName.Buffer, где
ObjectAttributes - это указатель на TObjectAttributes
ObjectName - это указатель на TUnicodeString
Buffer - это указатель на WideChar
Каждый день узнаю новое...
Anton911 вне форума Ответить с цитированием
Старый 26.11.2014, 07:45   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Код:
 PWideChar(ObjectAttributes^.ObjectName^.Buffer)
Если не ошибаюсь.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 26.11.2014, 09:05   #5
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,709
По умолчанию

Цитата:
Что такое phProcess?
Цитата:
ProcessHandle [out]
A pointer to a variable of type HANDLE. The ZwOpenProcess routine writes the process handle to the variable that this parameter points to.
Цитата:
И CI.UniqueProcess?
Цитата:
ClientId [in, optional]
A pointer to a client ID that identifies the thread whose process is to be opened. In Windows Vista and later versions of Windows, this parameter must be a non-NULL pointer to a valid client ID. In Windows Server 2003, Windows XP, and Windows 2000, this parameter is optional and can be set to NULL if the OBJECT_ATTRIBUTES structure that ObjectAttributes points to specifies an object name. For more information, see the following Remarks section.
Мы будем строить догадки, возмущаться на форуме, т.к. доку почитать религия не позволяет...
p51x вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Перехват 64-bit hiho Win Api 13 25.11.2015 18:56
Перехват Miha85193 Общие вопросы Delphi 2 23.05.2012 13:16
Перехват. egorzenit Общие вопросы Delphi 3 29.03.2012 15:19
Перехват вывода Яр|/||< (^_^) Win Api 5 02.02.2011 23:08
Перехват уведомлений из IE LeCrunch Win Api 2 27.05.2010 21:41