Hook на CreateProcess

Ответить

Код подтверждения
Введите код в точности так, как вы его видите. Регистр символов не имеет значения.

BBCode ВКЛЮЧЁН
[img] ВКЛЮЧЁН
[url] ВКЛЮЧЁН
Смайлики ОТКЛЮЧЕНЫ

Обзор темы
   

Развернуть Обзор темы: Hook на CreateProcess

Re: Hook на CreateProcess

Duncon » 01 янв 2008, 18:19

Короче сегодня добрался до вопроса и решил не париться, сделал через сравнение хандлов, кому нада юзайте вот код..

Код: Выделить всё

(*
//------------------------------------------------------------------------------
global vars
  k, n: Word;
  flag: Boolean;
  _Handles, Handles: array[0..65535] of HWND;
//------------------------------------------------------------------------------
Пример использования:
  KillAllNewProc(4000);
//------------------------------------------------------------------------------  
*)
procedure Kill(h: HWND);
const
  process_terminate = $0001;
var
  ProcessHandle : THandle;
  Processid: integer;
begin
  GetWindowTHreadProcessId(h, @Processid);
  ProcessHandle := OpenProcess(process_terminate, False, Processid);
  TerminateProcess(ProcessHandle, 4);
end;
//------------------------------------------------------------------------------
function EnumWin(h: HWND; Param: LongInt): BOOL; stdcall;
begin
  _Handles[k] := h;
  k := k+1; //or inc(n);    :)
  Result := True;
end;
//------------------------------------------------------------------------------
function EnumWin2(h: HWND; Param: LongInt): BOOL; stdcall;
begin
  Handles[n] := h;
  n := n+1; //or inc(n);    :)
  Result := True;
end;
//------------------------------------------------------------------------------
procedure KillAllNewProc(SleepTime: Word);
var
  i, c: Word;
begin
  k := 0;
  EnumWindows(@EnumWin, 0);
  Form1.pause(SleepTime); //you can use Sleep(); //pause(); is my func    Duncon
  n := 0;
  EnumWindows(@EnumWin2, 0);
  Application.ProcessMessages;
  for i := n downto 0 do begin
    flag := True;
    for c := k downto 0 do
      if Handles[i] = _Handles[c] then begin
        flag := False;
        Break;
      end;
    if flag then Kill(Handles[i]);
  end;
end;

Re: Hook на CreateProcess

Vedrus » 30 дек 2007, 17:52

1. Извинияюсь, плохо прочитал Ваш пост. Показалось, что Вы через модальной окно что-то делали.
2. Если создавать окно уже зарегистрированного класса, то оно создастся. Но обычные приложения перед созданиям окна регистрируют его класс.

окна

BBB » 30 дек 2007, 14:21

Vedrus писал(а):ЗЫ. По поводу запрета создания окон. В системе в конкретный момент времени может быть зарегистрировано конечное число классов окна. Если зарегистрировать их в цикле в числе 100 000, то окна больше не будут создаваться, т.к. чтобы создаться нужно класс зарегистрировать. После этого только палец в Reset поможет.
1. Запрет создания "нужных" окон, как я уже писал, как раз легко делается через хук.
2. А если (после этих 100 000 регистраций) пытаться создать окно уже зарегистрированного класса? :)

Re: Hook на CreateProcess

Vedrus » 30 дек 2007, 09:00

Через хуки процессы перехватывать нельзя. Самое простое, что можно сделать - использовать функцию CreateToolhelp32Snapshot и иже с ней (см. MSDN). Если же всё-таки надо именно перехватывать, то копай в сторону драйверов и руткитов.

ЗЫ. По поводу запрета создания окон. В системе в конкретный момент времени может быть зарегистрировано конечное число классов окна. Если зарегистрировать их в цикле в числе 100 000, то окна больше не будут создаваться, т.к. чтобы создаться нужно класс зарегистрировать. После этого только палец в Reset поможет.

Re: Hook на CreateProcess

Duncon » 27 дек 2007, 17:15

Таки и не найдешь там ряд параметров кторорые изменяются в зависимости от предидущего, я так предполагаю это делается через WH_SHELL , и в функции обратного вызова все это расчленять, но инфы как токовой не найти, залудили весь инет...

Re: Hook на CreateProcess

BBB » 27 дек 2007, 16:01

Duncon писал(а):Да все делпется через SetWindowsHookEx но с ней я не работал никогда, примеров на перехват клавы полно, но вот на процесс нигде нет..
Я делал хук на запрет создания окон (идея: некое приложение в определенный момент выводит диалог с единственной кнопкой OK, а хотелось бы, чтобы это окно не выскакивало).
Просмотрел сейчас по MSDN (у меня, правда, старенький стоит - October 2001) описание SetWindowsHookEx - про перехват запуска процессов там ничего не нашел.

Re: Hook на CreateProcess

Duncon » 27 дек 2007, 14:55

Да все делпется через SetWindowsHookEx но с ней я не работал никогда, примеров на перехват клавы полно, но вот на процесс нигде нет..
Убивать вновь созданные может привести к ошибке приложения которое вызывает оное.. А вот закрыть его как раз то что надо..
Поиск окон ведется обычно через заголовок (текст) окна, а он в короткий промежуток может не успеть поменяться итд итп, сравнивать все Хандлы тож не гуд варриант (но в принцыпе рабочий, только сами понимаете отожрет процессорного времени в системе Хандлов около 200 присутствует в постоянном режиме, этож надо каждый раз сравнить)

Re: Hook на CreateProcess

BBB » 27 дек 2007, 14:46

somewhere писал(а):Да нет, надо либо убивать вновь созданные, либо их вообще не создавать. Первый вариант не желателен, надо второй через хук. Вроде понятно все.
Пробежался по описанию SetWindowsHookEx, что-то не нашел возможности вешаться на запуск процесса. Или речь о каком-то другом хуке?

Re: Hook на CreateProcess

somewhere » 27 дек 2007, 13:31

Да нет, надо либо убивать вновь созданные, либо их вообще не создавать. Первый вариант не желателен, надо второй через хук. Вроде понятно все.

Вернуться к началу