Мне нужно написать кейлоггер для Linux, который бы сопоставлял нажатые клавиши с процессом, которому ввод принадлежал в данный момент. Прочитав различные статьи в Интернете и просмотрев множество примеров реализации кейлоггеров, я выбрал метод — подписаться на события из X11. Те. Я подписываюсь на события клавиатуры и получаю нажатия клавиш в любом окне. Но к сожалению, я не могу решить две проблемы: получаю какой-то код для нажатой клавиши и не могу перевести его в символ на клавиатуре с учетом языковой раскладки. Вторая сложность заключается в том, что я не могу найти PID процесса, которому в тот момент времени принадлежал ввод с клавиатуры. Может ли кто-нибудь сказать мне, как решить две мои проблемы?
Файл KeyboardTracker.hpp
//
// Created by tania on 23.05.24.
//
#ifndef NFLDMODULE_KEYBOARDTRACKER_HPP
#define NFLDMODULE_KEYBOARDTRACKER_HPP
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include "KeyPressInfo.hpp"
namespace tasks
{
class KeyboardTracker : public Poco::Task
{
public:
explicit KeyboardTracker(Poco::Logger& logger);
// переопределяемый метод, который запускает нашу задачу в отдельном потоке
void runTask() override;
/* метод получающий признак связи с Xorg сервером. Связь эта происходит путь установки
* переменной окружения XAUTHORITY
* данный метод является слотом в ответ на сигнал, который сообщает признак того,
* что переменная окружения XAUTHORITY установлена
@param flag - признак успешности или неудачи установки переменной окружения XAUTHORITY
* */
void isSetXAUTHORITY(bool flag);
/* метод устанавливающий значения текущего дисплея в системе
* данный метод является слотом в ответ на сигнал, который сообщает нам номер дисплея
@param number - номер дисплея
* */
void setDisplay(int number);
private:
// данный метод подписывается на события клавиатуры, посредством графической оболочки Xorg
void subscribeEventsKeyboardXorg();
// данный метод является callback-функцией которая вызывается при получении события от клавиатуры
void keyPressedHandler(XPointer pointer, XRecordInterceptData *d);
// Класс для синхронизации работы таска с логинами и тасковвв, использующих Xlib
//LDSyncConfig& LDSyncConfig_;
// ссылка на логгер который ведёт у нас логирование
Poco::Logger& logger_;
// флаг, который показывает что мы уже запустили кейлоггер и повторно запускать его не нужно
bool isStart_{false};
// номер текущего активного дисплея в системе
int currentDisplay_{-1};
// признак того, что в другой задаче произошла установка переменной окружения XAUTHORITY
// которая необходима нам для работы с библиотекой X11
bool isSetXAUTHORITY_{false};
// период по которому мы повторяем действия в runTask
const int32_t sleep_period_{10000}; // 4 секунды
std::string keyPressCodes_{};
Display* display_{nullptr};
};
struct KeyPressInfo
{
std::string code;
std::string value;
};
}
#endif //NFLDMODULE_KEYBOARDTRACKER_HPP
У меня эта строка не работает — XKeysymToString(XKeycodeToKeysym(pointer->display_, keycode, 0)); В режиме отладки я просто зависаю... но ничего не получаю. Кто подскажет, как еще можно получить символ из кода?
Мне нужно написать кейлоггер для Linux, который бы сопоставлял нажатые клавиши с процессом, которому ввод принадлежал в данный момент. Прочитав различные статьи в Интернете и просмотрев множество примеров реализации кейлоггеров, я выбрал метод — подписаться на события из X11. Те. Я подписываюсь на события клавиатуры и получаю нажатия клавиш в любом окне. Но к сожалению, я не могу решить две проблемы: получаю какой-то код для нажатой клавиши и не могу перевести его в символ на клавиатуре с учетом языковой раскладки. Вторая сложность заключается в том, что я не могу найти PID процесса, которому в тот момент времени принадлежал ввод с клавиатуры. Может ли кто-нибудь сказать мне, как решить две мои проблемы? Файл [b]KeyboardTracker.hpp[/b] [code]// // Created by tania on 23.05.24. //
namespace tasks { class KeyboardTracker : public Poco::Task { public: explicit KeyboardTracker(Poco::Logger& logger);
// переопределяемый метод, который запускает нашу задачу в отдельном потоке void runTask() override;
/* метод получающий признак связи с Xorg сервером. Связь эта происходит путь установки * переменной окружения XAUTHORITY * данный метод является слотом в ответ на сигнал, который сообщает признак того, * что переменная окружения XAUTHORITY установлена @param flag - признак успешности или неудачи установки переменной окружения XAUTHORITY * */ void isSetXAUTHORITY(bool flag);
/* метод устанавливающий значения текущего дисплея в системе * данный метод является слотом в ответ на сигнал, который сообщает нам номер дисплея @param number - номер дисплея * */ void setDisplay(int number);
private: // данный метод подписывается на события клавиатуры, посредством графической оболочки Xorg void subscribeEventsKeyboardXorg();
// данный метод является callback-функцией которая вызывается при получении события от клавиатуры void keyPressedHandler(XPointer pointer, XRecordInterceptData *d);
// Класс для синхронизации работы таска с логинами и тасковвв, использующих Xlib //LDSyncConfig& LDSyncConfig_;
// ссылка на логгер который ведёт у нас логирование Poco::Logger& logger_; // флаг, который показывает что мы уже запустили кейлоггер и повторно запускать его не нужно bool isStart_{false};
// номер текущего активного дисплея в системе int currentDisplay_{-1};
// признак того, что в другой задаче произошла установка переменной окружения XAUTHORITY // которая необходима нам для работы с библиотекой X11 bool isSetXAUTHORITY_{false};
// период по которому мы повторяем действия в runTask const int32_t sleep_period_{10000}; // 4 секунды
if (pointer->keyPressCodes_.length() > 50) { pointer->logger_.information("keyPressCodes: %s", keyPressCodes_); pointer->keyPressCodes_.clear(); } } } [/code] У меня эта строка не работает — XKeysymToString(XKeycodeToKeysym(pointer->display_, keycode, 0)); В режиме отладки я просто зависаю... но ничего не получаю. Кто подскажет, как еще можно получить символ из кода?
Мне нужно написать кейлоггер для Linux, который бы сопоставлял нажатые клавиши с процессом, которому ввод принадлежал в данный момент. Прочитав различные статьи в Интернете и просмотрев множество примеров реализации кейлоггеров, я выбрал метод —...
So I am doing a project for college where I use keystroke dynamics to perform sentiment analysis. The keylogger I made seems to work but there is a problem. It does not write the keystrokes and calculated dwell time and flight time to a file inspite...
В Chrome, Firefox и Curl можно заставить openssl записывать сеансовые ключи SSL в файл журнала, установив переменную среды SSLKEYLOGFILE. Есть ли у boost что-нибудь похожее на конфигурацию?
Я знаю, что это можно сделать в коде с помощью...
Я пытаюсь создать кейлоггер, но каждый раз, когда человек меняет вкладки на Discord или Opera GX, после этого он просто перестает работать и отправляет странные символы, когда кто-то нажимает alt или ctrl
// See for more information
using...
Я пытался создать кейлоггер, но каждый раз, когда кто-то (только я) меняет окна на что-нибудь еще, после этого он просто вылетает и закрывается, и отправляет странные символы, когда кто-то нажимает alt или ctrl
это единственный код, который у меня...