Помогите написать что-то типа кейлоггера (Нужен скрипт который в фоне будет ожидать ввода "*")
Модератор: Модераторы разделов
-
VladVol
- Сообщения: 142
- ОС: KUbuntu
Помогите написать что-то типа кейлоггера
Как бы странно это не звучало, но нужно написать вот такую штуку. Прошу помощи.
Нужно написать что-то типа кейлоггера на линукс, для включения сигнализации (не буду вдаваться в подробности). Либо bash скрипт либо python. Что нужно: скрипт в фоне ожидает ввода «*» когда введена звезда, начинаем считывать введенный код, пока не будет обнаружен символ «/». После обнаружения символа, сверяем кол-во введенных символов, если кол-во символов <7, передаем эти символы в другую программу (это я уже сам).
Благодарю за любую помощь .
Нужно написать что-то типа кейлоггера на линукс, для включения сигнализации (не буду вдаваться в подробности). Либо bash скрипт либо python. Что нужно: скрипт в фоне ожидает ввода «*» когда введена звезда, начинаем считывать введенный код, пока не будет обнаружен символ «/». После обнаружения символа, сверяем кол-во введенных символов, если кол-во символов <7, передаем эти символы в другую программу (это я уже сам).
Благодарю за любую помощь .
-
/dev/random
- Администратор
- Сообщения: 5427
- ОС: Gentoo
Re: Помогите написать что-то типа кейлоггера
i Уведомление от модератора Поскольку автор не ищет программу, а пытается её написать, перемещаю тему из "Программ" в "Программирование"
-
SLEDopit
- Модератор
- Сообщения: 4824
- Статус: фанат консоли (=
- ОС: GNU/Debian, RHEL
Re: Помогите написать что-то типа кейлоггера
VladVol
Возможно, проще и быстрее будет не ждать ввода * ( как ни крути, а кейлоггер мало кому понравится ), а повесить действие, выполняемое по * на какой-нибудь хоткей (например cmd+shift+a) в вашем wm/de. * - достаточно часто используемый символ, а уж если писать пути с масками ( /path/to*som/ ), то и в паре с / . Может быть немаленькое количество ложных срабатываний. Нажать на трехкнопочный хоткей случайно всё же немного сложнее.
Возможно, проще и быстрее будет не ждать ввода * ( как ни крути, а кейлоггер мало кому понравится ), а повесить действие, выполняемое по * на какой-нибудь хоткей (например cmd+shift+a) в вашем wm/de. * - достаточно часто используемый символ, а уж если писать пути с масками ( /path/to*som/ ), то и в паре с / . Может быть немаленькое количество ложных срабатываний. Нажать на трехкнопочный хоткей случайно всё же немного сложнее.
UNIX is basically a simple operating system, but you have to be a genius to understand the simplicity. © Dennis Ritchie
The more you believe you don't do mistakes, the more bugs are in your code.
The more you believe you don't do mistakes, the more bugs are in your code.
-
VladVol
- Сообщения: 142
- ОС: KUbuntu
Re: Помогите написать что-то типа кейлоггера
Спасибо за ответ! Дело в том, что для ввода кода доступна только numlock клавиатура, из-за этого нет возможности нажимать cmd+shift+a. На этом пк никто не работает, это можно сказать сервер, к которому подключены датчики открытия дверей в серверной и еще пару комнат. Сервер работает постоянно, просто нужна возможность ловить нажатые кнопки с этой клавиатуры и передавать их программе, чтобы проще было активировать и отключать "сигналку".
С другой стороны можно сделать вместо *, активацию, например одновременным нажатием 123, если так выйдет?
Просто даже не знаю с чего начать, никогда кейлоггерами не интересовался))
С другой стороны можно сделать вместо *, активацию, например одновременным нажатием 123, если так выйдет?
Просто даже не знаю с чего начать, никогда кейлоггерами не интересовался))
-
drBatty
- Сообщения: 8735
- Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
- ОС: Slackware-current
Re: Помогите написать что-то типа кейлоггера
если вы в иксах, поможет вот это: https://github.com/mnp/xspy/blob/master/xspy.c
сделайте беспарольного юзера, который и будет логинится при загрузке. И у этого юзера сделайте в качестве shell'а не /bin/sh как обычно, а вашу программу, которая будет просто обрабатывать кнопки.
сделайте беспарольного юзера, который и будет логинится при загрузке. И у этого юзера сделайте в качестве shell'а не /bin/sh как обычно, а вашу программу, которая будет просто обрабатывать кнопки.
-
VladVol
- Сообщения: 142
- ОС: KUbuntu
Re: Помогите написать что-то типа кейлоггера
drBatty писал(а): ↑29.10.2013 16:19если вы в иксах, поможет вот это: https://github.com/mnp/xspy/blob/master/xspy.c
сделайте беспарольного юзера, который и будет логинится при загрузке. И у этого юзера сделайте в качестве shell'а не /bin/sh как обычно, а вашу программу, которая будет просто обрабатывать кнопки.
В Си не шарю, думаю смысл верный, но сильно много кода, мне бы что-то по-проще. Проблема в том, что мне и нужна эта программа. Мне хотя бы понять как получать значения нажатых кнопок, дальше я уже сам. Знаю на 100% что это можно написать на Баше или Пайтоне, но е ще не знаю как (((
-
/dev/random
- Администратор
- Сообщения: 5427
- ОС: Gentoo
Re: Помогите написать что-то типа кейлоггера
VladVol писал(а): ↑29.10.2013 18:36В Си не шарю, думаю смысл верный, но сильно много кода, мне бы что-то по-проще. Проблема в том, что мне и нужна эта программа. Мне хотя бы понять как получать значения нажатых кнопок, дальше я уже сам. Знаю на 100% что это можно написать на Баше или Пайтоне, но е ще не знаю как (((
На баше это сделать проблематично. На питоне можете воспользоваться python-evdev.
-
VladVol
- Сообщения: 142
- ОС: KUbuntu
Re: Помогите написать что-то типа кейлоггера
Спасибо, это уже что-то! Буду копать в этом направлении))
-
SLEDopit
- Модератор
- Сообщения: 4824
- Статус: фанат консоли (=
- ОС: GNU/Debian, RHEL
Re: Помогите написать что-то типа кейлоггера
Чего ж тут проблематичного?
Код: Выделить всё
#!/bin/bash
while : ;
do
read -r -n1 char
[ "$char" == "*" ] && { i=0; all="";
while [ $i -lt 10 ] ;
do
read -r -n1 char
[ "$char" == "/" ] && i=10 || all="${all}${char}"
done ;
# вот тут-то мы и получили все символы между * и / в переменной $all. 10 - это их максимальное количество
echo $all ;
}
doneUNIX is basically a simple operating system, but you have to be a genius to understand the simplicity. © Dennis Ritchie
The more you believe you don't do mistakes, the more bugs are in your code.
The more you believe you don't do mistakes, the more bugs are in your code.
-
/dev/random
- Администратор
- Сообщения: 5427
- ОС: Gentoo
-
SLEDopit
- Модератор
- Сообщения: 4824
- Статус: фанат консоли (=
- ОС: GNU/Debian, RHEL
Re: Помогите написать что-то типа кейлоггера
Ну судя по описанию, там нет ни иксов, ни чего-то подобного. Так что вполне можно автологинить юзера с этим скриптом прописаным в login shell'e. Это самый простой и быстрый способ, который мог бы подойти./dev/random писал(а): ↑29.10.2013 19:21То, что вы читаете текст из терминала, где запущена программа, а топикстартеру нужен кейлоггер, работающий в фоне.
Если это не подходит, тогда таки да, придётся писать на C или питоне.
UNIX is basically a simple operating system, but you have to be a genius to understand the simplicity. © Dennis Ritchie
The more you believe you don't do mistakes, the more bugs are in your code.
The more you believe you don't do mistakes, the more bugs are in your code.
-
drBatty
- Сообщения: 8735
- Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
- ОС: Slackware-current
Re: Помогите написать что-то типа кейлоггера
нет, уважаемый, это грязный хак. Это вовсе не стандартный метод, а что-то вроде удаления гланд через анальный проход. Оно пока вроде работает, т.ч. вы даже можете прямо так и применять этот код, собрав его, и засунув в скрипт на питоне/баше. Но я-бы не советовал...
Лучше сделайте нормально: уберите оттуда иксы вовсе, сделайте специального юзера, и пусть этот юзер автоматом логинится в систему. Ну и что-бы запускалась какая-то программа(скрипт), которая будет ждать нажатия нужных клавиш и выполнять нужные действия. И всё.
-
VladVol
- Сообщения: 142
- ОС: KUbuntu
Re: Помогите написать что-то типа кейлоггера
Вполне возможно что вопрос глупый, но все таки, как потом с этого юзера выйти и загрузить нормально. Ну как залогинится, тут все понятно, а как выйти? Я просто еще такие штуки не делал, не представляю.
И если можно сделать так чтобы вместо Шелла запускался скрипт, то я так понимаю можно использовать скрипт SLEDopitа?
Спасибо ВСЕМ огромное за участие!!
-
drBatty
- Сообщения: 8735
- Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
- ОС: Slackware-current
Re: Помогите написать что-то типа кейлоггера
вопрос не имеет смысла. Если вы сделаете так, как я говорил, то _вы_ и не войдёте в оболочку. Управление передастся программе, которая и будет работать _вместо_ оболочки.
Что до "выйти", дык обычно 6 терминалов открывается, в первый оно залогинет эту программу, а остальные в вашем распоряжении. У меня (в Slackware) init читает inittab
# These are the standard console login getties in multiuser mode:
Код: Выделить всё
c1:12345:respawn:/sbin/agetty --noclear 38400 tty1 linux
c2:12345:respawn:/sbin/agetty 38400 tty2 linux
c3:12345:respawn:/sbin/agetty 38400 tty3 linux
c4:12345:respawn:/sbin/agetty 38400 tty4 linux
c5:12345:respawn:/sbin/agetty 38400 tty5 linux
c6:12345:respawn:/sbin/agetty 38400 tty6 linuxкоторая запускает /bin/login, которая и осуществляет логин. Вы можете поменять это поведение для одной консоли, оставив другие для обслуживания (нажмите ALT+F2, и далее логин/пароль скажем рута).
В разных дистрах реализация немного (или много, с новомодным systemd) отличается.
почему же нельзя? Можно. Только учтите, что враг может прервать скрипт, и получить доступ к оболочке. Потому не рекомендуется так делать...
-
Ism
- Сообщения: 1261
- Статус: Никто, по сути быдло
Re: Помогите написать что-то типа кейлоггера
А клавиатуру убрать нелья ?
Если иксы есть то код xneur поможет
Также есть утилита xev , ловит коды клавиш
Гдето в утилитах была которая ловит без иксов
Если иксы есть то код xneur поможет
Также есть утилита xev , ловит коды клавиш
Гдето в утилитах была которая ловит без иксов
-
sciko
- Сообщения: 1744
- Статус: Ъ-участник
- ОС: Debian/Ubuntu/etc
Re: Помогите написать что-то типа кейлоггера
А почему бы ТС на использовать в качестве кейлоггера xneur (он умеет работать и в консоли)?
Вот тут приводится пример настройки для самых маленьких.
Вот тут приводится пример настройки для самых маленьких.
-
VladVol
- Сообщения: 142
- ОС: KUbuntu
Re: Помогите написать что-то типа кейлоггера
Что до "выйти", дык обычно 6 терминалов открывается, в первый оно залогинет эту программу, а остальные в вашем распоряжении
Логично, как-то упустил это из виду.
почему же нельзя? Можно. Только учтите, что враг может прервать скрипт, и получить доступ к оболочке. Потому не рекомендуется так делать...
Тогда выходит, что вернулись к тому же с чего и начали? Кейлоггер в фоне? Или есть возможность сделать так чтобы враг не смог прервать скрипт?
А почему бы ТС на использовать в качестве кейлоггера xneur (он умеет работать и в консоли)?
Попробую, спасибо. Уже насобиралось несколько вариантов)) Вот только еще не понял на каком лучше остановится...
-
VladVol
- Сообщения: 142
- ОС: KUbuntu
Re: Помогите написать что-то типа кейлоггера
VladVol писал(а): ↑30.10.2013 00:15Что до "выйти", дык обычно 6 терминалов открывается, в первый оно залогинет эту программу, а остальные в вашем распоряжении
Логично, как-то упустил это из виду.
почему же нельзя? Можно. Только учтите, что враг может прервать скрипт, и получить доступ к оболочке. Потому не рекомендуется так делать...
Тогда выходит, что вернулись к тому же с чего и начали? Кейлоггер в фоне? Или есть возможность сделать так чтобы враг не смог прервать скрипт?
А почему бы ТС на использовать в качестве кейлоггера xneur (он умеет работать и в консоли)?
Попробую, спасибо. Уже насобиралось несколько вариантов)) Вот только еще не понял на каком лучше остановится...
Случайно наткнулся на такой скрипт, что можете сказать, подойдет он мне или нет?
Spoiler
#! /usr/bin/python
file=open("/dev/input/event1")
keymap={
'\x2c': 'z',
'\x2d': 'x',
'\x2e': 'c',
'\xc8': 'UP',
'\xd0': 'DOWN',
'\xcb': 'LEFT',
'\xcd': 'RIGHT',
'\x10': 'q',
'\x11': 'w',
'\x12': 'e',
'\x01': 'ESC',
'\x2a': 'LSHIFT',
'\x1c': 'ENTER',
}
while True:
event=file.read(48)
if event[28] == '\x01':
state="pressed:"
elif event[28] == '\x00':
state="released:"
else:
continue
if event[12] in keymap:
print state, keymap[event[12]]
file.close()
file=open("/dev/input/event1")
keymap={
'\x2c': 'z',
'\x2d': 'x',
'\x2e': 'c',
'\xc8': 'UP',
'\xd0': 'DOWN',
'\xcb': 'LEFT',
'\xcd': 'RIGHT',
'\x10': 'q',
'\x11': 'w',
'\x12': 'e',
'\x01': 'ESC',
'\x2a': 'LSHIFT',
'\x1c': 'ENTER',
}
while True:
event=file.read(48)
if event[28] == '\x01':
state="pressed:"
elif event[28] == '\x00':
state="released:"
else:
continue
if event[12] in keymap:
print state, keymap[event[12]]
file.close()
Правда мне не совсем понятно что значит '\x2d': 'x'. Т.е. понятно что \x2d это буква х, но почему такой странный формат?!
-
drBatty
- Сообщения: 8735
- Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
- ОС: Slackware-current
Re: Помогите написать что-то типа кейлоггера
\x это значит "шестнадцатеричная СС". Например \xFF это число 255
тащем-то это 2*16+13==45=='-'
т.е. по-русски: символ -- "знак минус".
-
VladVol
- Сообщения: 142
- ОС: KUbuntu
Re: Помогите написать что-то типа кейлоггера
-
SLEDopit
- Модератор
- Сообщения: 4824
- Статус: фанат консоли (=
- ОС: GNU/Debian, RHEL
Re: Помогите написать что-то типа кейлоггера
Ничего себе. Покажите, как это делается?
На самом деле, если нажать ctrl+c, то произойдет разлогинивание. Иначе, когда в bash/zsh/whatever_shell набираете exit сессия не заканчивалась бы, а автоматом перезапускалась бы.
Не верите мне - попробуйте сами.
Код: Выделить всё
# echo '#!/bin/bash
> while : ; do read -r -n1 ; done' > /root/shell.sh
# chmod 755 /root/shell.sh
# adduser verytest --shell /root/shell.shТак что это вполне рабочий вариант.
UNIX is basically a simple operating system, but you have to be a genius to understand the simplicity. © Dennis Ritchie
The more you believe you don't do mistakes, the more bugs are in your code.
The more you believe you don't do mistakes, the more bugs are in your code.
-
drBatty
- Сообщения: 8735
- Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
- ОС: Slackware-current
Re: Помогите написать что-то типа кейлоггера
-
SLEDopit
- Модератор
- Сообщения: 4824
- Статус: фанат консоли (=
- ОС: GNU/Debian, RHEL
Re: Помогите написать что-то типа кейлоггера
Я хочу, чтобы вы мне открыли секрет, как из такого шелла попасть в полноценную оболочку.
UNIX is basically a simple operating system, but you have to be a genius to understand the simplicity. © Dennis Ritchie
The more you believe you don't do mistakes, the more bugs are in your code.
The more you believe you don't do mistakes, the more bugs are in your code.
-
VladVol
- Сообщения: 142
- ОС: KUbuntu
Re: Помогите написать что-то типа кейлоггера
SLEDopit, объясните, пожалуйста, куда записываются все введенные символы? Ибо не доходит!
Заранее спасибо! Хочется не просто использовать код, а еще и понять его.
Код: Выделить всё
#!/bin/bash
while : ;
do
read -r -n1 char #эта строка записывает каждый введенный символ в переменную char, т.е. char содержит в себе только один символ
[ "$char" == "*" ] && { i=0; all=""; # тут ищем совпадение с char и задаем переменную "i" и "all"
while [ $i -lt 10 ] ;
do
read -r -n1 char # тут снова читаем по одному символу
[ "$char" == "/" ] && i=10 || all="${all}${char}" #тут сравниваем char с "/", если =, то задаем для "i" значение равное 10, если != тогда задаем значение для переменной "all"
#короче тут я потерялся. ВОПРОС_1. 10 - это кол-во кол-во считываемых
#символов после нажатия "*"? Если да, то я не могу понять как оно их подсчитало?
#ВОПРОС_2. Объясните, мне нубу, как переменная "all" в итоге получает все введенные числа до нажатия "/"? Вы приравняли
#"all" к ранее заданной переменной "all", которая равна "" + переменная "char" которая хранит в себе только один введенный
#символ и каждый новый символ заменяет старый. Но в итоге получаем адекватный вывод!! Поясните плз, как не старался
#понять у меня выходит 2+2=12.
done ;
# вот тут-то мы и получили все символы между * и / в переменной $all. 10 - это их максимальное количество
echo $all ;
}
doneЗаранее спасибо! Хочется не просто использовать код, а еще и понять его.
-
drBatty
- Сообщения: 8735
- Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
- ОС: Slackware-current
Re: Помогите написать что-то типа кейлоггера
строго говоря, вы УЖЕ в полноценной оболочке. Достаточно первого-же eval'а. Но не нужно думать, что проблема в eval, в bash'е Over9000 мест, когда данные из юзерского ввода могут ВНЕЗАПНО стать кодом. Именно по этой причине bash(как и все такие недоязычки) настоятельно НЕ рекомендуют, когда речь идёт о безопасности.
Теоретически обезопасить можно и bash(наверное), но на практике сделать это довольно сложно. Потому-то и применяют его тогда, когда есть уверенность, что юзер ничего не сможет сделать даже получив этот shell.
Вопрос "как" зависит естественно от скрипта.
$i это счётчик, а 10 -- это предел окончания цикла. Когда i>=10 цикл заканчивается. Когда символ "/", i=10, и цикл СРАЗУ заканчивается.
каждый символ НЕ заменяет старый. Смотрите:
$
$ X="ABC"
$ ALL="$ALL$X"; echo $ALL
ABC
$ ALL="$ALL$X"; echo $ALL
ABCABC
$ ALL="$ALL$X"; echo $ALL
ABCABCABC
-
SLEDopit
- Модератор
- Сообщения: 4824
- Статус: фанат консоли (=
- ОС: GNU/Debian, RHEL
Re: Помогите написать что-то типа кейлоггера
Ну строго говоря, совершенно в любом ПО, где присутствует обработка пользовательских данных есть потенциальные места для уязвимостей.
когда мы пишем all=$all$char, all='' только при первой итерации цикла. при второй итерации all уже не пустая, а содержит в себе предыдущий $char .
А насчёт 10, у меня строка где i увеличивается на единицу потерялась. Она должна быть во внутреннем цикле.
Код: Выделить всё
#!/bin/bash
while : ;
do
read -r -n1 char
[ "$char" == "*" ] && { i=0; all="";
while [ $i -lt 10 ] ;
do
read -r -n1 char
[ "$char" == "/" ] && i=10 || all="${all}${char}"
((i++))
done ;
# вот тут-то мы и получили все символы между * и / в переменной $all. 10 - это их максимальное количество
echo $all ;
}
doneНу т.е. в двух словах принцип работы такой:
1. читаем в бесконечном цикле символ
2. символ == * → переключаемся во внутренний цикл, обнуляем переменные i и all
3. во внутреннем цикле (не более 10 итераций) продолжаем читать по одному символу, и сравниваем с /
4. если символ не равен / , то сохраняем символ в переменную all и увеличиваем i на единицу
5. если символ == / или i достигло 10, то завершаем цикл и выводим введённые в цикле символы
6. возвращаемся в бесконечный цикл
UNIX is basically a simple operating system, but you have to be a genius to understand the simplicity. © Dennis Ritchie
The more you believe you don't do mistakes, the more bugs are in your code.
The more you believe you don't do mistakes, the more bugs are in your code.
-
drBatty
- Сообщения: 8735
- Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
- ОС: Slackware-current
Re: Помогите написать что-то типа кейлоггера
конечно, но в сишечке с этим намного проще: надо сильно извратиться, что-бы данные стали кодом. В bash'е это намного проще.
-
VladVol
- Сообщения: 142
- ОС: KUbuntu
Re: Помогите написать что-то типа кейлоггера
Вопрос к drBatty и SLEDopit.
Насколько проще? Т.е. если я не подразумеваю ставить эту сигнализацию в банк, а сугубо для офисного, ну может быть еще домашнего использования, на сколько % возрастает опасность, так сказать, взлома возрастает? Или даже не взлома, а опасность изменения кода? Если взять 0% за невозможность взлома, чего, конечно нет в природе )))
SLEDopit и drBatty, спасибо за пояснения по коду!
-
SLEDopit
- Модератор
- Сообщения: 4824
- Статус: фанат консоли (=
- ОС: GNU/Debian, RHEL
Re: Помогите написать что-то типа кейлоггера
В данном случае теоретический взлом возможен исключительно при физическом доступе к машине. А судя по тому, что вы упомянули урезанную версию клавиатуры без символов, то мне сложно представить вредоносную комбинацию.VladVol писал(а): ↑31.10.2013 11:45Насколько проще? Т.е. если я не подразумеваю ставить эту сигнализацию в банк, а сугубо для офисного, ну может быть еще домашнего использования, на сколько % возрастает опасность, так сказать, взлома возрастает? Или даже не взлома, а опасность изменения кода? Если взять 0% за невозможность взлома, чего, конечно нет в природе )))
Впрочем в случае с вышеприведённым кодом, мне сложно представить её и с полноценной клавиатурой. Всё зависит от вашей команды, которая будет обрабатывать введённые символы. Если там не будет eval'a или другой попытки интерпретации данных, как исполняемого кода, то я не вижу опасности.
UNIX is basically a simple operating system, but you have to be a genius to understand the simplicity. © Dennis Ritchie
The more you believe you don't do mistakes, the more bugs are in your code.
The more you believe you don't do mistakes, the more bugs are in your code.
-
drBatty
- Сообщения: 8735
- Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
- ОС: Slackware-current
Re: Помогите написать что-то типа кейлоггера
в данном конкретном случае не проще. Дело в том, что множество допустимых вариантов очень маленькое. Потому вы можете откинуть ВСЕ остальные коды как недопустимые, т.е. ничего не выполнять, если нажато что-то не то.
Ну и нужно обдумать вопрос обработки сигналов, т.е. решить вопрос, как будет обрабатываться например прерывание CTRL+C, и как будут обрабатываться ошибки. Тут правило простое -- пусть хоть как-то ОБРАБАТЫВАЮТСЯ. Ибо стандартная обработка сигналов вам не подходит(в стандартном случае при получении сигнала S процесс завершается с кодом S+128. Вам это не подходит, т.к. возвращаться некуда)