Показано с 1 по 1 из 1.

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

  1. #1
    Senior Member Репутация Репутация Репутация Репутация Репутация Репутация Репутация Репутация Репутация Репутация Репутация Аватар для SDA
    Регистрация
    07.01.2005
    Адрес
    Москва
    Сообщений
    7,168
    Вес репутации
    3162

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

    Подавляющее большинство клавиатурных шпионов использует
    для мониторинга нажатий клавиш 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 (или изменить её имя в коде).

    P.S. Указанным способом защиты не пользовался (не уверен, что без ошибок напишу DLL-проект), поэтому эффективность "hook для других hook'ов" сказать не могу.

  2. Реклама
     

Похожие темы

  1. Антивирус и защита
    От Nvidia в разделе Сетевые атаки
    Ответов: 5
    Последнее сообщение: 01.12.2010, 23:17
  2. Ответов: 23
    Последнее сообщение: 20.01.2008, 22:33
  3. PandaLabs: 64% программ-шпионов приходится на рекламное ПО
    От SDA в разделе Новости компьютерной безопасности
    Ответов: 0
    Последнее сообщение: 24.02.2007, 16:04
  4. Ответов: 1
    Последнее сообщение: 12.11.2006, 17:46
  5. SpywareBlaster - прививка от шпионов
    От drongo в разделе Антивирусы
    Ответов: 12
    Последнее сообщение: 27.03.2005, 22:05

Свернуть/Развернуть Ваши права в разделе

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •  
Page generated in 0.01561 seconds with 18 queries