Разработчик не я. Код не мой.
ПЛАН ПРОЕКТА
Язык программирования 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