Модераторы: Snowy, bartram, MetalFan, bems, Poseidon, Riply
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Антикейлоггер 
:(
    Опции темы
Curve
Дата 8.5.2004, 15:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 39
Регистрация: 5.1.2004

Репутация: нет
Всего: 1



Задался тут на досуге задачей написать антикейлоггер... Почитал стаью, про то, по какому ринципу они работают. Одни берут виртуально нажимают клавиши на клаве и мониторят обращения к файлам, этот способ я сразу отмёл, т.к мне он показался нерациональным. Другие позволяют блокировать другим приложениям хуки на клаву, вот это уже интереснее.

Не знал с чего начать, полез в хелп, раздел SetWindowsHookEx. Смотрим... Видим "The SetWindowsHookEx function installs an application-defined hook procedure into a hook chain.". Переводим - "функция SetWindowsHookEx ставит определённую (объявленную?) в приложении (привет всем из темы "Хуки не из DLL" ;)) хук-процедуру в очередь хуков". Понятно... Смотрим виды хуков...
WH_JOURNALRECORD, WH_CBT - не интересно... проходили уже...
WH_DEBUG - о, по описанию то что надо! (Installs a hook procedure useful for debugging other hook procedures - устанавливает хук-процедуру полезную при отладке остальных хук-процедур). Ха! Сейчас будем отлаживать ;)

Пишем код, который подходит под требования справки:
Код
unit Unit1;

// < Skippppppppppppppppped >

function DebugProc(Code: integer; WParam: WPARAM; LParam: LPARAM): Longint; stdcall;

var
 Form1: TForm1;
 hookhandle: hHook;
 tag: TDEBUGHOOKINFO;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
var
  hToken: THandle;
  tkp: TTokenPrivileges;
  ReturnLength: Cardinal;
begin
HookHandle:=SetWindowsHookEx(WH_DEBUG, @DebugProc, HInstance, tag);
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
 if HookHandle>0 then
  UnhookWindowsHookEx(HookHandle);

Application.Terminate;
end;

function DebugProc(Code: integer; WParam: WPARAM; LParam: LPARAM): Longint; stdcall;
var dbghookin4: pDebugHookInfo;
begin
Form1.Memo1.Lines.Add(Format('Code %d wParam %d lParam %d', [Code, wparam, lparam]));

dbghookin4:=pointer(lparam);

if wParam = WH_JOURNALRECORD then // Это мы так "вылавливаем" хуки, установленные на WH_JOURNALRECORD
         Form1.Caption:=TimeTostr(now);

//if Code = HC_ACTION then нужно Process мессадж, но вот чтобы это значило?

result := CallNextHookEx(HookHandle, code, WParam, LParam);
end;

end.


По идее в dbghookin4 должна содержаться инфа о приложении вызвавшем хук...

Запускаем... Ааа... WTF? Упали все приложения, использующие хуки! (бай бай пунто, МихаДиалер, експлорер и все все все). Хм... Ну так тоже можно защититься от дебаггеров ;) Но всё же хочется не этого.

Хм... Шевелим мозгой. Мозга выдаёт решение: надо поднять свои привелегии до дебаггера!
Переписываем FormCreate:
Код
var
  hToken: THandle;
  tkp: TTokenPrivileges;
  ReturnLength: Cardinal;
begin
if OpenProcessToken(GetCurrentProcess, TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY, hToken) then
 begin
  LookupPrivilegeValue(nil,'SeDebugPrivilege', tkp.Privileges[0].Luid);
  tkp.PrivilegeCount:=1; // one privelege to set
  tkp.Privileges[0].Attributes:=SE_PRIVILEGE_ENABLED;
  AdjustTokenPrivileges(hToken, False, tkp, 0, nil, ReturnLength);
 end;

HookHandle:=SetWindowsHookEx(WH_DEBUG, @DebugProc, HInstance, tag);
end;

Запускаем... Эх... Не повторяйте моих ошибок - Дэльфи не может отладить процесс, имеющий привелегии дебаггера. Лана, запускаем exe-шник... Получили строки:
Первые две:
Code 0 wParam 10 lParam 1244004
Code 0 wParam 10 lParam 1244052

Остальное флуд:
Code 0 wParam 7 lParam 1244828

wParam = 10 => wParam = WH_SHELL
wParam = 7 => wParam = WH_MOUSE

Упали все app, инсталлирующие хуки.... Упал эксплорер...

Так, смотрим значение HC_ACTION. HC_ACTION = 0.

Code = 0 => Code = HC_ACTION.

Эх..... Что не так? Меня, например, в хелпе смутила строка "If nCode is HC_ACTION, the hook procedure must process the message." Process - обработать. Хм...

Есть предложения? Может, я в чём-то не прав?
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: WinAPI и системное программирование"
Snowybartram
MetalFanbems
PoseidonRrader
Riply

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Delphi обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • 99% ответов по WinAPI можно найти в MSDN Library, оставшиеся 1% здесь

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, bartram, MetalFan, bems, Poseidon, Rrader, Riply.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: WinAPI и системное программирование | Следующая тема »


 




[ Время генерации скрипта: 0.1035 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.