Стиллер C# - [Tron Source]

k$$

0x00000001
0x00000001
1 lvl
Joined
Feb 3, 2020
Messages
113
Reaction score
39
Разработчик не я. Код не мой.
ПЛАН ПРОЕКТА
Язык программирования C# очень удобен - дружелюбная IDE, понятные названия методов и прочее. Однако, есть некоторые моменты о которых нужно помнить:

1) Декомпиляция.
DotNet легко разбирается, поэтому программы приходится обфусцировать (накрывать протекторами).

2) Зависимость от .Net Framework.
На данный момент оптимальным фреймворком для написания стиллера является net 4.0

3) Крипт
К .net софту нужен особый подход. Увы, довести до состояния фуда на VT не получится.

Итак, это отметили. Далее идет композиция софта.

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

Поэтому в Троне была реализована "модульность" - разбитие файла на отдельные dll, которые запускаются посредством рефлексии главым exe. Звучит страшно, но на схеме все понятнее:



Decryptor.dll выступает в роли этакого "прокси" - она расшифровывает и запускает Stealer.dll и Sender.dll.

Полное описание работы софта:

1. MainEXE
Расшифровывает и вызывает метод из Decryptor.dll, возвращающий массив байт из Stealer.dll
Потом передает этот массив байт в Sender.dll через вызов метода в Decryptor.dll



2. Decryptor.dll
Содержит в себе Stealer.dll и Sender.dll, а также методы декомпрессии, расшифровки этих библиотек.



3. Stealer.dll
Содержит в себе sqlite3.dll (о ней позже), а также методы сбора информации о пк.



4. Sender.dll
Содержит в себе урезанную Ionic.dll для архивации файлов (о ней тоже позже) и методы отправки данных на хост.



Все dll достаются из ресурсов, разжимаются Gzip'om и дешифруются.
Сами понимаете, C# софт должен как то выживать.

Это реализация трона, вы же можете придумать что то свое. Как бы это странно ни звучало - такой говнокод (в разумных пределах) иногда бывает полезен.



СБОР ДАННЫХ
Останавливаться буду лишь на самых интересных моментах, Steam/FileZilla/Jabber можно легко найти в пабе или у меня в коде.



Запуск граббера

Схема расшифровки конфига была такова:

b64_decode(b64_decode(00101010)$b64_decode(Rule1+userprofile/desktop/+*.txt;*.pdf+0+none)$b64_decode(http://gooogle.com/file.exe)$b64_decode(mspaint))



Где:

00101010 - дефолтные настройки той или иной функции граббера (стим, телега и проч). 1 - собираем, 0 - нет.

Rule1+userprofile/desktop/+*.txt;*.pdf+0+none - правила юзера. Имя, пусть, расширение, рекурсия/в той же папке, ограничение по размеру.

http://gooogle.com/file.exe - файл для лоадера

mspaint - команда cmd



Для рандомизации рантайма я добавлял нужные методы в массив ThreadStart, перемешивал его и запускал через for.



Браузеры

Не буду лукавить, метод сбора данных я позаимствовал из открытых источников. Мне было слишком влом разбирать, переписывать багованный и, вместе с тем, пользующийся огромной популярностью SqliteHandler.

Работа с бд осуществлялась при помощи обычной sqlite3.dll.

Длл дропалась с рандомным именем в %programdata%, в конец файла дописывалась рандомная строка, SetDllDirectory добавляем путь. Что удивительно, по рантайму с этой длл не возникало никаких проблем.

Трон искал файлы браузеров по всей APPDATA и LOCALAPPDATA. Долго, но зато все что есть выгребал.

Чуть позже добавил статические пути.

Дешифровка паролей Gecko-браузеров - та еще жопоболь. Проще стырить два файла (key3.dll/key4.dll и logins.json) и расшифровать их бесплатной прогой от NirSoft.

https://www.nirsoft.net/utils/passwordfox.html



Рекурсивный поиск файлов

Стоит отметить системные папки, в которые лучше не лезть.

Функция принимает исходный каталог, массив паттернов, рекурсия или нет, ограничение по размеру.



Обертка функций

Чтобы код был не столь нагляден я решил оберуть стандартные функции.



Сбор Outlook

Просто перебираем стандартные пути и возможные имена ключей в реестре



Криптовалюта

Ограничился статическими путями. Кто знает что и где искать - пропишет в правилах самостоятельно.



ОТПРАВКА ДАННЫХ
Изначально вся сграбленная инфа сохраняется в словарь вида <string, byte[]> где key - имя файла, а value - массив байт.

Все это в виде массива объектов (первый элемент - словарь, второй ip пк) передается в MainEXE, а оттуда в Sender.dll.

Для упаковки в памяти юзал урезанную и чуть чуть допиленную Ionic.Zip. Полученный массив байт ксорился и переводился в base64 строку. Вариантов загрузки масса, выбирайте на свой вкус.

https://github.com/haf/DotNetZip.Semverd - Zip Reduced



ОБФУСКАЦИЯ
К этому должен быть креативный подход.

Я использовал обертки функций, динамически подгружаемые либы, а также свой недописанный обфускатор на основе dnlib. Хороший обфускатор может превратить все это в неплохую кашу.

Тк софт был бюджетным, он был наиболее доступен. Поэтому приходилось извращаться еще больше - делать лоадер.

Лоадер детектил вм, плохие процессы, докачивал шифрованный бинарник и запускал посредством рефлексии.

Ошибки, которые совершил я:

1) Не шифровал строки - процесс написания модуля обфускации сторк затянулся

2) Не использовал достаточную обфускацию в некоторых dll



ПАНЕЛЬ
Просто принимал входящую base64 строку, расшифровывал и сохранял в файл. Сурцы также можно найти ниже.

Билдер конфига был реализован в виде десктопной приложухи - мне так было удобней.


ИТОГ
TRON создавался по большей части из интереса, на таком денег особо не заработаешь. Да и к тому же рынок и так переполнен всякими форками бессмертного NoFile c отправкой логов в телеграмм. Лучшим бюджетным решением на данный момент является кряк азора/предатора последней версии + толковый крипт.

Исходники: https://github.com/onek1lo/TRON-Project-Stealer
 
Top