Защитник Windows идентифицирует мою программу как несколько троянов ("Wacatac" и "Persistence") - предположительно вызвано перезаписью ключа реестра
2 трояна:
Вот код, который, как мне кажется, вызывает проблему. Цель состоит в том, чтобы создать/изменить раздел реестра, чтобы программа запускалась при запуске:
void SoftwareDlg::SetSURegValue() {
string regSubKey("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run\\");
string regValueName = "Software";
string regValue = "D:\\Users\\Skew\\Documents\\repos\\Software\\Debug\\Software.exe"
try
{
size_t bufferSize = 0xFFF;
auto cbData = static_cast<DWORD>(regValue.size() * sizeof(char));
HKEY hKey;
DWORD position;
auto rc = RegCreateKeyEx(HKEY_CURRENT_USER, regSubKey.c_str(), 0, NULL, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &hKey, &position);
if (position == REG_OPENED_EXISTING_KEY) {
DEBUG_PRINT("Key already exists & has been opened.")
}
else if (position == REG_CREATED_NEW_KEY) {
DEBUG_PRINT("Created new key.")
}
else {
DEBUG_PRINT("ERROR: Key does not exist, and a new key was not created.")
}
if (rc == ERROR_SUCCESS) {
auto rc = RegSetValueEx(hKey, regValueName.c_str(), 0, REG_SZ, (BYTE*)regValue.data(), cbData);
if (rc != ERROR_SUCCESS)
{
throw std::runtime_error("Windows system error code: " + to_string(rc));
}
}
else {
DEBUG_PRINT("Error opening key.\n")
}
}
catch (std::exception& e)
{
DEBUG_PRINT(e.what())
}
}
В своих попытках решить эту проблему я начал тестировать различные сценарии создания/изменения ключа, но мои результаты стали неубедительными, когда я понял, что Защитник Windows, по-видимому, перестал регистрировать каждый запуск как «новые угрозы» и, казалось, регистрировал их вместе как одну. "постоянная угроза", я полагаю? Не уверен.
С учетом сказанного, Защитник Windows, похоже, не регистрировал угрозу, когда я изначально создавал ключ или когда открывал его и назначал ему то же значение, но, похоже, регистрировал угрозу, когда я перемещал программу в новый каталог. (и программа попытается изменить значение параметра реестра «Программное обеспечение» на новое местоположение EXE).
Это оставило меня с несколькими вопросами:
- Моя программа имитирует поведение двух троянов из-за какой-то ошибки в коде?
- Или на моей машине есть какое-то латентное, оппортунистическое вредоносное ПО, которое только и ждало, чтобы им воспользоваться?
- Нужно ли удалять существующее значение, прежде чем пытаться его изменить? Поведение
RegCreateKeyEx
приводит меня к мысли, что это не так. - Запись в реестр без повышенных разрешений запрещена? Если да... то почему моя машина позволяет мне это делать?
- Я делаю какое-то неправильное преобразование типа в
RegSetValueEx()
функция?
Если дело № 4, я думаю, я просто очень удивлен, что меня уведомил Защитник Windows, а не Visual Studio или приглашение UAC.
Редактировать 1: Ни один движок на VirusTotal.com не обнаружил файл как вредоносное ПО.