Четверг, 30.01.2025, 19:51:1
Портал Mnogo-Malo
Регистрация Вход
Приветствую Вас, Новенький(ая) · RSS
 
Вход
Часы
Меню сайта
Опрос
Ваша ОС?
Всего ответов: 125
Статьи
Главная » Статьи » Программирование » Hack раздел

Защита от клавиатурных шпионов

Автор : HackZona

Подавляющее большинство клавиатурных шпионов использует
для мониторинга нажатий клавиш hook-процедуру WH_KEYBOARD.
Чтобы клавиатурное сообщение не попало в установленную ловушку,
достаточно перехватить вызов этой hook-процедуры и отменить его.
Это можно сделать, установив свой hook - WH_DEBUG. Процедура
этого hook'а будет получать управление при вызове других
hook-процедур.
Таким образом, мы устанавливаем hook для других hook'ов, получая,
в результате, достаточно мощное средство.

Приступим к написанию. Создайте новый DLL-проект; VCL можно отключить.
Код процедуры в DLL:

extern "C" __export LRESULT CALLBACK
DebugProc(int nCode, WPARAM wParam, LPARAM lParam)
{
if(nCode == HC_ACTION)
{
if(wParam == WH_KEYBOARD)
{
if(MessageBox(NULL, "Do you want to pass keyboard message to WH_KEYBOARD
hook-procedure?",
"Confirmation",
MB_YESNO | MB_ICONQUESTION | MB_DEFBUTTON2 |
MB_TOPMOST | MB_SYSTEMMODAL) == IDNO)
return 1;
}
}

return CallNextHookEx(NULL, nCode, wParam, lParam);
}



Мы проверяем тип вызываемой ловушки на соответствие WH_KEYBOARD,
и, если равенство верное, запрашиваем подтверждение на вызов этой процедуры.
Если в пропуске отказано, возвращаем ненулевое значение.

Код приложение, ответственное за установку и снятие этой ловушки.

// Глобальные переменные:
HMODULE hDLL = NULL;
HHOOK hHook = NULL;

//---------------------------------------------------------------------------

void __fastcall TForm1::Button1Click(TObject *Sender)
{
if(hHook != NULL)
{
ShowMessage("The Hook has already been set.");
return;
}

hDLL = LoadLibrary("hook.dll");
if(hDLL == NULL)
{
ShowMessage("Can't load hook.dll. Reason: " + SysErrorMessage(GetLastError()));
return;
}

typedef LRESULT __import (CALLBACK *fnType)(int, WPARAM, LPARAM);
fnType DebugProc = (fnType)GetProcAddress(hDLL, "DebugProc");

if(DebugProc == NULL)
{
FreeLibrary(hDLL);
hDLL = NULL;
ShowMessage("Can't find "DebugProc" in hook.dll.");
return;
}

hHook = SetWindowsHookEx(WH_DEBUG, (HOOKPROC)DebugProc, hDLL, 0);
if(hHook == NULL)
{
FreeLibrary(hDLL);
hDLL = NULL;
ShowMessage("Can't set WH_DEBUG hook. Reason: " + SysErrorMessage(GetLastError()));
return;
}
}
//---------------------------------------------------------------------------

void __fastcall TForm1::FormDestroy(TObject *Sender)
{
if(hDLL)
FreeLibrary(hDLL);
if(hHook)
{
UnhookWindowsHookEx(hHook);
hHook = NULL;
}
}

Не забудьте переименовать DLL (или изменить её имя в коде).


Источник: http://hackzona.ru/hz
Категория: Hack раздел | Добавил: Администратор (24.11.2010)  
Просмотров: 623 | Теги: защита компа, hack | Рейтинг: 5.0/1

Всего комментариев: 0

Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Portal-mm © 2025
быстрый поиск
Связь
448800784
Набор модераторов
По всем вопросам писать в ICQ

Или в VK
Программы
Opera 11.00
Winrar 3.80 Full Rus
AIMP2 Version 2.5
K-Lite Codec Pack 4.4.5
Статистика

Online всего: 1
Не наших: 1
Наших: 0



Хостинг от uCoz