
Сегодня, продолжая цикл статей про настройку и использование X Neural Switcher (программы для автоматического переключения раскладки), я расскажу про одну немаловажную и даже спорную возможность программы.
Эта возможность — возможность записи набираемого текста в файл журнала.
Краткий разбор кейлогеров для linux я приводил в предыдущей статье цикла X Neural Switcher — Поваренная книга (Часть 1). Предтечи и аналоги
Вообще, я покривлю душой, если скажу, что не думал внедрять такой функционал в программу с самого начала. Punto Switcher уже имел функционал кейлоггера под названием «Дневник», так почему xneur должен был быть обделен такой функцией? Да и глупо не сделать такой простой вещи в программе, которая предназначена для перехвата клавиатуры, в конце концов!
Из личного опыта скажу, что я никогда не думал, что лично мне функционал кейлоггера может пригодиться. Да и включена эта опция в моем конфиге была по забывчивости — осталась после тестирования программы. Однако, в один далеко не прекрасный момент, эта функция позволила разоблачить одного нехорошего человека, который использовал мой компьютер в дискредитирующих меня целях. Вот и получилось, что никогда не знаешь, где «соломки подстелить».

Цели применения в качестве кейлогера
В общем-то, цели применения не блещут оригинальностью, и вполне стандартны для программ класса «кейлоггер».
- отследить набор на клавиатуре словосочетаний или слов, передача которых третьим лицам приведет к материальному или моральному ущербу
- восстановить информацию после сбоя компьютера
- иметь журнал набираемого текста для всех программ, а не только для поддерживающих историю набора
- проконтролировать использование личного компьютера посторонними лицами
Общее описание возможностей по ведению журнала
На данный момент программа имеет такие возможности:
- сохранять набираемый на клавиатуре текст в html-файл с указанием программы, в которой он набирался, и указанием даты и времени записи в журнал
- определять размер несжатого файла журнала, при превышении которого журнал будет заархивирован
- отправлять архив журнала по указанному емейлу через SMTP-сервер (сервер должен быть без авторизации)
Опции настройки программы для ведения журнала
Ниже я приведу опции конфигурационного файла, отвечающие непосредственно за функцию кейлоггера.
- LogSave — может принимать значения Yes или No. Если No, то остальные опции не имеют значения.
- LogSize — принимает значение размера файла журнала в байтах. После достижения данного размера программа заархивирует журнал и попытается отправить его на емейл.
- LogMail — здесь вы указываете адрес почты, на который будет отправляться архив журнала. Если адрес не указан, то попытка отправки происходить не будет.
- LogHostIP — указываете smtp-сервер исходящей почты. Через этот сервер будет осуществляться отправка. В качестве аргумента может быдь указан или IP, или доменное имя сервера.
- LogPort — порт на smtp-сервере.
Пример конфигурационного файла
Далее я приведу конкретный конфигурационный файл, в котором отключены все опции, не относящиеся к кейлоггеру.
Автоматический режим переключения отключен, все горячие клавиши отключены, вся нотификация о работе программы отключена, проблемные приложения занесены в список исключений — в общем отключено все, что не относится к кейлоггеру.
В идеальном случае, программа никак не будет проявлять своего присутствия, и будет только писать журнал и отправлять его на почту. Значимые опции выделены жирным шрифтом.
# It's a X Neural Switcher configuration file by XNeur
# All values writted XNeur
# Config version
Version 0.15.0
# Work in manual mode
ManualMode Yes
# Level of messages program will write to output
#LogLevel Error
#LogLevel Warning
#LogLevel Log
#LogLevel Debug
#LogLevel Trace
LogLevel Error
# Define unused languages
# Example:
#ExcludeLanguage de
# Define initial keyboard layout for all new applications
DefaultXkbGroup 0
# Add Applications names to exclude it from procces with xneur
# Xneur will not process the input for this applications
# Example:
#ExcludeApp Gaim
ExcludeApp Krdc
ExcludeApp Remmina
ExcludeApp Unity-2d-launcher
ExcludeApp Unity-2d-places
ExcludeApp VirtualBox
ExcludeApp Wine
ExcludeApp rdesktop
# Use this parameter to force set work mode in current application to Auto.
# Example:
#SetAutoApp Gedit
# Use this parameter to force set work mode in current application to Manual.
# Example:
#SetManualApp Anjuta
# Binds hotkeys for some actions
AddBind ChangeWord
AddBind TranslitWord
AddBind ChangecaseWord
AddBind PreviewChangeWord
AddBind ChangeString
AddBind ChangeMode
AddBind ChangeSelected
AddBind TranslitSelected
AddBind ChangecaseSelected
AddBind PreviewChangeSelected
AddBind ChangeClipboard
AddBind TranslitClipboard
AddBind ChangecaseClipboard
AddBind PreviewChangeClipboard
AddBind EnableLayout1
AddBind EnableLayout2
AddBind EnableLayout3
AddBind EnableLayout4
AddBind RotateLayout
AddBind RotateLayoutBack
AddBind ReplaceAbbreviation
AddBind AutocompletionConfirmation
AddBind BlockKeyboardAndMouseEvents
AddBind InsertDate
# This option add user action when pressed key bind
# Example:
#AddAction Control Alt f Firefox Browser <cmd>firefox</cmd>
# Word Replacing
# Ignore keyboard layout for abbreviations list
# Example:
#ReplaceAbbreviationIgnoreLayout No
ReplaceAbbreviationIgnoreLayout No
# Abbreviations list
# Example:
#ReplaceAbbreviation xneur X Neural Switcher
# This option enable or disable sound playing
# Example:
#PlaySounds No
PlaySounds No
# This option defined sound playing volume percent
# Example:
#SoundVolumePercent 10
SoundVolumePercent 15
# Binds sounds for some actions
AddSound XneurStart
AddSound XneurReload
AddSound XneurStop
AddSound PressKeyLayout1
AddSound PressKeyLayout2
AddSound PressKeyLayout3
AddSound PressKeyLayout4
AddSound EnableLayout1
AddSound EnableLayout2
AddSound EnableLayout3
AddSound EnableLayout4
AddSound AutomaticChangeWord
AddSound ManualChangeWord
AddSound ManualTranslitWord
AddSound ManualChangecaseWord
AddSound ManualPreviewChangeWord
AddSound ChangeString
AddSound ChangeSelected
AddSound TranslitSelected
AddSound ChangecaseSelected
AddSound PreviewChangeSelected
AddSound ChangeClipboard
AddSound TranslitClipboard
AddSound ChangecaseClipboard
AddSound PreviewChangeClipboard
AddSound ReplaceAbbreviation
AddSound CorrectIncidentalCaps
AddSound CorrectTwoCapitalLetter
AddSound CorrectTwoSpaceWithCommaAndSpace
AddSound CorrectTwoMinusWithDash
AddSound CorrectCWithCopyright
AddSound CorrectTMWithTrademark
AddSound CorrectRWithRegistered
AddSound ExecuteUserAction
AddSound BlockKeyboardAndMouseEvents
AddSound UnblockKeyboardAndMouseEvents
# This option enable or disable self education of xneur
# Example:
#EducationMode No
EducationMode No
# This option enable or disable layout remember for each window
# Example:
#LayoutRememberMode No
LayoutRememberMode No
# Use this parameter to force enable layout remember for each application, not window.
# Option "LayoutRememberMode" must be enabled.
# Example:
#LayoutRememberModeForApp Gaim
# This option enable or disable saving selection text
# Example:
#SaveSelectionMode No
SaveSelectionMode No
# This option enable or disable rotating layout after convert selected text
# Example:
#RotateLayoutAfterChangeSelectedMode No
RotateLayoutAfterChangeSelectedMode No
# This option define delay before sendind events to application (in milliseconds between 0 to 50).
SendDelay 0
# This option enable or disable logging keyboard
# Example:
#LogSave No
LogSave Yes
# This option set max size of log file (bytes).
# Example:
#LogSize 1048576
LogSize 1048576
# This option define e-mail for send log file, if it's size greater then max size.
# Example:
#LogMail your.mail@your.server.com
LogMail example@xneur.ru
# This option define host to send e-mail without login and password.
# Example:
#LogHostIP 127.0.0.1
#LogHostIP mail.example.com
LogHostIP mail.example.com
# This option define port to send e-mail without login and password.
# Example:
#LogPort 25
LogPort 25
# This option enable or disable correction of iNCIDENTAL CapsLock
# Example:
#CorrectIncidentalCaps Yes
CorrectIncidentalCaps No
# This option enable or disable correction of two CApital letter
# Example:
#CorrectTwoCapitalLetter Yes
CorrectTwoCapitalLetter No
# This option enable or disable correction of small letter to capital letter after dot
# Example:
#CorrectCapitalLetterAfterDot Yes
CorrectCapitalLetterAfterDot No
# This option enable or disable correction of two space with a comma and a space
# Example:
#CorrectTwoSpaceWithCommaAndSpace Yes
CorrectTwoSpaceWithCommaAndSpace No
# This option enable or disable correction of two minus with a dash
# Example:
#CorrectTwoMinusWithDash Yes
CorrectTwoMinusWithDash No
# This option enable or disable correction of (c) with a copyright sign
# Example:
#CorrectCWithCopyright Yes
CorrectCWithCopyright No
# This option enable or disable correction of (tm) with a trademark sign
# Example:
#CorrectTMWithTrademark Yes
CorrectTMWithTrademark No
# This option enable or disable correction of (r) with a registered sign
# Example:
#CorrectRWithRegistered Yes
CorrectRWithRegistered No
# This option enable or disable flushing internal buffer when pressed Escape
# Example:
#FlushBufferWhenPressEscape Yes
FlushBufferWhenPressEscape No
# This option enable or disable flushing internal buffer when pressed Enter or Tab
# Example:
#FlushBufferWhenPressEnter Yes
FlushBufferWhenPressEnter No
# This option disable or enable processing word when pressed Enter or Tab
# Example:
#DontProcessWhenPressEnter Yes
DontProcessWhenPressEnter No
# This option disable or enable show OSD
# Example:
#ShowOSD Yes
ShowOSD No
# This option set font for OSD
# Example:
#FontOSD -*-*-*-*-*-*-32-*-*-*-*-*-*-u
FontOSD -*-*-*-*-*-*-32-*-*-*-*-*-*-u
# Binds OSDs for some actions
AddOSD XneurStart
AddOSD XneurReload
AddOSD XneurStop
AddOSD PressKeyLayout1
AddOSD PressKeyLayout2
AddOSD PressKeyLayout3
AddOSD PressKeyLayout4
AddOSD EnableLayout1
AddOSD EnableLayout2
AddOSD EnableLayout3
AddOSD EnableLayout4
AddOSD AutomaticChangeWord
AddOSD ManualChangeWord
AddOSD ManualTranslitWord
AddOSD ManualChangecaseWord
AddOSD ManualPreviewChangeWord
AddOSD ChangeString
AddOSD ChangeSelected
AddOSD TranslitSelected
AddOSD ChangecaseSelected
AddOSD PreviewChangeSelected
AddOSD ChangeClipboard
AddOSD TranslitClipboard
AddOSD ChangecaseClipboard
AddOSD PreviewChangeClipboard
AddOSD ReplaceAbbreviation
AddOSD CorrectIncidentalCaps
AddOSD CorrectTwoCapitalLetter
AddOSD CorrectTwoSpaceWithCommaAndSpace
AddOSD CorrectTwoMinusWithDash
AddOSD CorrectCWithCopyright
AddOSD CorrectTMWithTrademark
AddOSD CorrectRWithRegistered
AddOSD ExecuteUserAction
AddOSD BlockKeyboardAndMouseEvents
AddOSD UnblockKeyboardAndMouseEvents
# This option disable or enable show popup messages
# Example:
#ShowPopup Yes
ShowPopup No
# This option defines popup expiration interval in milliseconds
# Example:
#PopupExpireTimeout 1000
PopupExpireTimeout 1000
# Binds popup messages for some actions
AddPopup XneurStart
AddPopup XneurReload
AddPopup XneurStop
AddPopup PressKeyLayout1
AddPopup PressKeyLayout2
AddPopup PressKeyLayout3
AddPopup PressKeyLayout4
AddPopup EnableLayout1
AddPopup EnableLayout2
AddPopup EnableLayout3
AddPopup EnableLayout4
AddPopup AutomaticChangeWord
AddPopup ManualChangeWord
AddPopup ManualTranslitWord
AddPopup ManualChangecaseWord
AddPopup ManualPreviewChangeWord
AddPopup ChangeString
AddPopup ChangeSelected
AddPopup TranslitSelected
AddPopup ChangecaseSelected
AddPopup PreviewChangeSelected
AddPopup ChangeClipboard
AddPopup TranslitClipboard
AddPopup ChangecaseClipboard
AddPopup PreviewChangeClipboard
AddPopup ReplaceAbbreviation
AddPopup CorrectIncidentalCaps
AddPopup CorrectTwoCapitalLetter
AddPopup CorrectTwoSpaceWithCommaAndSpace
AddPopup CorrectTwoMinusWithDash
AddPopup CorrectCWithCopyright
AddPopup CorrectTMWithTrademark
AddPopup CorrectRWithRegistered
AddPopup ExecuteUserAction
AddPopup BlockKeyboardAndMouseEvents
AddPopup UnblockKeyboardAndMouseEvents
# This option disable or enable checking language on input process
# Example:
#CheckOnProcess Yes
CheckOnProcess No
# This option disable or enable CapsLock use
# Example:
#DisableCapsLock Yes
DisableCapsLock No
# This option disable or enable correction spaces befor punctuation
# Example:
#CorrectSpaceWithPunctuation No
CorrectSpaceWithPunctuation No
# This option disable or enable pattern mining and recognition (autocompletion)
# Example:
#Autocompletion No
Autocompletion No
# This option disable or enable adding space after autocompletion
# Example:
#AddSpaceAfterAutocompletion No
AddSpaceAfterAutocompletion No
# Add Applications names to exclude it from autocompletion process
# Xneur will not process the autocompletion for this applications
# Example:
#AutocompletionExcludeApp Gnome-terminal
# Use next options for troubleshoot on autoswitching
# Disable autoswitching if pressed backspace
TroubleshootBackspace No
# Disable autoswitching if pressed left arrow
TroubleshootLeftArrow No
# Disable autoswitching if pressed right arrow
TroubleshootRightArrow No
# Disable autoswitching if pressed up arrow
TroubleshootUpArrow No
# Disable autoswitching if pressed down arrow
TroubleshootDownArrow No
# Disable autoswitching if pressed delete
TroubleshootDelete No
# Disable autoswitching if layout switched
TroubleshootSwitch No
# Disable autoswitching for full screen apps
TroubleshootFullScreen No
# Work-arround for compatibility with the completion
CompatibilityWithCompletion No
# Disabling this option will add any application to the list of excluded applications.
TrackingInput Yes
# Disabling this option will disable mouse tracking.
TrackingMouse No
# Disable send KeyRelease event
DontSendKeyRelease No
# Modules list
# Example:
#LoadModule libxntest.so
# That's all
Таким образом, вам только остается прописать свой емайл, сервер исходящей почты и его порт вместо фейковых, и вперед — кейлоггер готов!
Что, где, когда
Конфигурационный файл пользователя программы находится тут — ~/.xneur/xneurrc.
Файл журнала находится тут — ~/.xneur/xneurlog.html
Архивы журнала лежат тут — ~/.xneur/, и имеют вид «xneurlog.html 23.06.2010 09:08:36.gz»
Запись в журнал происходит в момент сброса внутреннего буфера программы, обычно при смене активного окна.
Если вы собираете программу из исходников самостоятельно, вы можете совсем отключить функционал кейлоггера, использовав опцию конфигуратора сборки --without-keylogger.
Предыдущие части
X Neural Switcher — Поваренная книга (Часть 0). Введение. Сборка и настройка
X Neural Switcher — Поваренная книга (Часть 1). Предтечи и аналоги
X Neural Switcher — Поваренная книга (Часть 2). Алгоритмы
При подготовке статьи использованы значки из комплекта беcплатных значков «Aroma».