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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 07.04.2012, 12:00   #1
D_E_N
Форумчанин
 
Регистрация: 04.05.2009
Сообщений: 149
Восклицание хук на появление нового окна

Всем привет. мне нужно отловить 2 окошка радмина: аунтификацию и окно управления. данный хук отлавливает лишь Управление а аунтификацию не видит.. подскажите что не так???
Код:
library hooklib;

uses
  Windows,
  Messages;

const
  HookMap = '{F3E25943-FCC7-43E5-BE22-7CF35EA5FCC6}';

type
  PHookData = ^THookData;
  THookData = packed record
    AppWnd  : HWND;
    OldHook : HHOOK;
  end;

var
  hMap     : THandle = 0;
  HookData : PHookData = nil;

procedure DLLEntryPoint(dwReason: DWORD);
begin
  case dwReason of
    DLL_PROCESS_ATTACH:
    begin
      hMap     := CreateFileMapping(INVALID_HANDLE_VALUE, nil, PAGE_READWRITE, 0, SizeOf(THookData), HookMap);
      HookData := MapViewOfFile(hMap, FILE_MAP_ALL_ACCESS, 0, 0, SizeOf(THookData));
    end;
    DLL_PROCESS_DETACH:
    begin
      UnMapViewOfFile(HookData);
      CloseHandle(hMap);
    end
  end
end;

procedure SaveLog(s:string);
var
 cds:TCopyDataStruct;
begin
 cds.cbData:=length(s)+1;
 cds.lpData:=pchar(s);
 SendMessage(HookData^.AppWnd,WM_COPYDATA,0,Cardinal(@cds));
end;

function HookProc(Code: Integer; WParam: WPARAM; LParam: LPARAM): LRESULT;stdcall;
var
 WndHeader:array[0..MAX_PATH-1] of char;
begin
  if Code>=0 then
  begin
   case Code of
     HCBT_CREATEWND:
       if (IsWindow(wParam) and (PCBTCreateWnd(lParam)^.lpcs^.hwndParent=0) and
       (lstrlen(PCBTCreateWnd(lParam)^.lpcs^.lpszName)>0)) then
        SaveLog('[Open] '+PCBTCreateWnd(lParam)^.lpcs^.lpszName);

     HCBT_DESTROYWND:
      if (IsWindow(wParam) and IsWindowVisible(wParam) and (GetParent(wParam)=0))  then
      begin
       GetWindowText(wParam,WndHeader,MAX_PATH);
       if (WndHeader<>'')then
       SaveLog('[Close] '+WndHeader);
      end
   end;
   Result := 0;
 end else
 Result := CallNextHookEx(HookData^.OldHook, Code, WParam, LParam);
end;

function SetHook(Wnd: HWND): BOOL; stdcall;
begin
  if HookData <> nil then
  begin
    HookData^.AppWnd := Wnd;
    HookData^.OldHook := SetWindowsHookEx(WH_CBT, HookProc, HInstance, 0);
    Result:=HookData^.OldHook <> 0;
  end else
   Result:=False;
end;

function RemoveHook: BOOL; stdcall;
begin
  Result := UnhookWindowsHookEx(HookData^.OldHook);
end;

exports
  SetHook, RemoveHook;

begin
  if @DLLProc = nil then DLLProc := @DLLEntryPoint;
  DLLEntryPoint(DLL_PROCESS_ATTACH);
end.
получение лог на форме

Код:
procedure TForm1.WMCopyData(var Msg: TWMCopyData);
begin
  inherited;
  Memo1.Lines.Add(pchar(Msg.CopyDataStruct^.lpData));
  Msg.Result:=1;
end;
D_E_N вне форума Ответить с цитированием
Старый 07.04.2012, 12:44   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Во-первых: Я хуки недолюбливаю. Так что могу посоветовать только одно - в таймере через FindWindow ловить окошки РАдмина. Кстати так я и поступал, правда не с РАдмином.

Во-вторых: Ты в курсе что у РАдминов в разных версиях разные строения окон? Если нет, это тебе на заметку.

В-третьих: А собственно зачем? Лог? Дык РА сам его умеет писать? Скомуниздить пароли? зачем - если ты админ, тебе доступен реестр, все пароли РА там хранить. подмени на свой (я так и делал)
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 07.04.2012, 12:49   #3
D_E_N
Форумчанин
 
Регистрация: 04.05.2009
Сообщений: 149
По умолчанию

мне пароли не нужны. про разные окна я знаю. я через таймер и сделал но захотелось по красивее сделать.
D_E_N вне форума Ответить с цитированием
Старый 07.04.2012, 13:10   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Работает? - зачем усложнять себе жизнь )
ИМХО - технология хуков уходят в прошлое
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 07.04.2012, 13:14   #5
D_E_N
Форумчанин
 
Регистрация: 04.05.2009
Сообщений: 149
По умолчанию

работает))) вероятно ты прав зачем усложнять...если хуки в прошлое а что вместо них будет?)
D_E_N вне форума Ответить с цитированием
Старый 07.04.2012, 19:55   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

А Х.з.
Я вообще не понимаю зачем это нужно. ИМХО хуки только дыра в безопасности.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 07.04.2012, 20:28   #7
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

Stilet,
Интересно, почему хуки - это дырка в безопасности?
Цитата:
ИМХО - технология хуков уходят в прошлое
Чем бы вы из заменили? Ни в 7-ке ни в 8-ке, их не убрали...
Человек_Борща вне форума Ответить с цитированием
Старый 07.04.2012, 21:11   #8
eoln
Старожил
 
Аватар для eoln
 
Регистрация: 26.04.2008
Сообщений: 2,645
По умолчанию

Хуками можно отслеживать, например, ввод/вывод, а потом с этими данными ...
Хуки всегда будут, тут уж архитектура такая.
eoln вне форума Ответить с цитированием
Старый 07.04.2012, 21:16   #9
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Хуки очень удобны для всяких несанкционированных действий, их MS заложил для отладки своих программ, а потом видимо настолько увлекся их использованием, что никак не может избавиться от версии к версии
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 07.04.2012, 21:20   #10
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Интересно, почему хуки - это дырка в безопасности?
Потому что:
Цитата:
Хуками можно отслеживать, например, ввод/вывод, а потом с этими данными ...
И антивирусы это могут провтыкать.
Цитата:
Ни в 7-ке ни в 8-ке, их не убрали...
Ну ntvdm какбы тоже еще живее всех живых, так что зная беспечность Микрософта это не показатель
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как привязать таблицу нового modal окна к Dataset динамически созданного родительского окна? delphicoding Общие вопросы Delphi 6 02.10.2011 22:41
Откритие нового окна. Небесный JavaScript, Ajax 2 22.08.2011 19:21
Обновить фрейм на странице из нового окна Delphinchik JavaScript, Ajax 1 19.01.2011 21:07
Как отследить появление нового диска? 54rus Помощь студентам 13 10.02.2010 16:26
Открытие нового окна, при нажатии на кнопку(Delphi). sergey31 Помощь студентам 2 24.05.2008 14:48