ЖУРНАЛ ХАКЕР

Delphi. Создание и использование DLL

Xakep, номер #034, стр. 034-071-2


procedure RunStopHook(State : Boolean)

stdcall; external 'hackpass.dll' index 1;

В этой строке я объясняю Delphi, что есть такая функция RunStopHook, которая находится в написанной мной библиотеке hackpass.dll и ее индекс = 1. Вот по этому индексу Delphi и будет вызывать функцию. Можно, конечно же, и по имени, но это будет немного медленней.

Теперь создай обработчик события для формы OnShow и напиши там:

RunStopHook(true);

И, наконец, создай обработчик события OnClose и напиши:

RunStopHook(false);

Кранты паролям

Все, наше приложение готово. Запусти его. Потом перейди в окно со строкой ввода и кликни там левой кнопкой крысы, удерживая Control. Звездочки моментально превратятся в реальный текст.

Для большего эффекта можешь бросить на форму проги, загружающей DLL, какую-нибудь картинку. Ну а если что-то непонятно, то просто тренируйся. Со временем все само придет. Главное - практика.

Удачи!!! Исходники примера, как всегда, ищи на www.x-c-r.com.

Исходный текст dll файла

library hackpass;

uses Windows, Messages;

var

SysHook : HHook = 0;

Wnd : Hwnd = 0;

function SysMsgProc(code : integer; wParam : word;

lParam : longint) : longint; stdcall;

begin

//Передать сообщение другим ловушкам в системе

CallNextHookEx(SysHook, Code, wParam, lParam);

//Проверяю сообщение

if code = HC_ACTION then

begin

//Получаю идентификатор окна, сгенерировавшего сообщение

Wnd := TMsg(Pointer(lParam)^).hwnd;

//Проверяю тип сообщения.

//Если была нажата левая кнопка мыши

//и удержана кнопка Control, то ...

if TMsg(Pointer(lParam)^).message = WM_LBUTTONDOWN then

if ((TMsg(Pointer(lParam)^).wParam and MK_CONTROL) = MK_CONTROL) then

begin

// Убрать в окне, отправившем сообщение, звездочки

SendMessage(Wnd, em_setpasswordchar, 0, 0);

//Перерисовать окно.

InvalidateRect(Wnd, nil, true);

end;

end;

end;

// Процедура запуска.

procedure RunStopHook(State : Boolean) export; stdcall;

begin

//Если State = true, то ...

if State=true then

begin

//Запускаем ловушку.

SysHook := SetWindowsHookEx(WH_GETMESSAGE,

@SysMsgProc, HInstance, 0);

end

else//Иначе

begin

//Отключить ловушку.

UnhookWindowsHookEx(SysHook);

SysHook := 0;

end;

end;

exports RunStopHook index 1;

begin

end.

Назад на стр. 034-071-1  Содержание