Пишем свой V-Encryptor с самоудалением на С#

Пишем свой V-Encryptor с самоудалением на С#

@webware

t.me/webware

Доброго времени суток!

Сегодня я покажу как написать простой и уже опробованный в разных местах шифровальщик (не детектится антивирусами), который после завершения процесса сам себя удалит.

Писать будем на С#

Все исходники будут по ссылке ниже, но я и администрация форума предупреждают, что статья написана исключительно в ознакомительных целях и Вы несёте персональную ответственность по закону УК вашей страны за использование материалов из этой статьи в неправомерных целях.

Итак.

Шифрование будет обеспечено модулем, известным еще с моих предыдущих статей CryptoNote
Модуль Copy - открывающий файл и проводящий математические операции с каждым байтом. Очень шустрый. Его описание вы можете найти в тех же старых статьях.

!!! Обратите внимание на комментарии. !!! Если хотите получить шифровальщик без возможности расшифровки - вместо decodeString используйте Random()-функцию и в дальнейшем уберите ветку (CoderMode==false) - она отвечает за расшифровку.

Поскольку данный экземпляр является примером, то давайте мы будем видеть, какие файлы у нас шифруются (на всякий случай). Для этого напишем модуль TraverseTree. Он умеет не только показывать файлы, но и переходить в директории и суб-директории. Этот модуль ответственный за перебор файлов.

Принцип простой: устанавливаем текущую директорию и всё что нашли грузим в стэк. Потом по этому стеку считаем кол-во папок и файлов:

Потом для каждого файла производим процедуру шифрования - выводим на экран список файлов, вызываем процедуру Copy:

Также у нас присутствует модуль, удаляющий временные (tmp) файлы. Они могут появляться, если файл будет занят каким-либо иным процессом. Код этого модуля прост: получаем файлы в папке и в цикле удаляем по расширению *.tmp

С модулями разобрались. Осталось заставить это дело работать. Переходим к Main-блоку.

В нем видим следующее:

Закомментированная строка string result показывает как получить директорию Temp пользователя. Пригодится на будущее (в данный момент не используется).

Переменная curDir - будет содержать текущую папку и выведет её на экран. Эта фича для debug.

Закомментированная строка Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments); отсылает нас в MSND Environment.GetFolderPath - эта функция позволяет получить очень много интересных целей, т.е. можно задать параметр и программа зашифрует все файлы в MyDocuments пользователя, т.о. можно зашифровать вообще весь текущий профиль юзера.

Мы в качестве примера указали просто string CoderPath = @"C:\users\admin\Desktop\test";

т.е. на рабочем столе пользователя admin есть папка test с неким содержимым. Этот параметр измените под себя, чтобы проверить!

Но вот мы добрались до строки, вызывающий некий модуль Odissey - это наш троянский конь, задача которого после шифрования удалить сам модуль, чтобы код не достался вирусным аналитикам или просто подозрительным лицам.

Принцип модуля Odissey - в нужную нам папку распаковать файл с именем DeleteMe.exe и запустить его.

Сам модуль deleteme "компилируется" на лету из массива (его также можно зашифровать)

Записывается он используя функцию File.WriteAllBytes(outputFilePath, bytesmass);

Массив выглядит примерно так:

public static byte[] bytesmass = { 0x4D,0x5A,0x90,0x0,0x3,0x0,0x0,0x0,0x4,0x0,0x0,0x0,0xFF...}

По-сути это хорошо известный шелл-код, как в эксплойтах.

Сам модуль DeleteMe был написан отдельно и представляет из себя такой код:

Алгоритм такой: ждём несколько секунд пока завершится процесс шифрования и в папке, полученной при запуске программы, удаляем файл PackMan - так зовут нашего шифровальщика.

Скомпилированный код переведен в hex-опкоды отдельной утилитой, которая будет присутствовать отдельно (энтузиасты смогут найти её в теле PackMan). Утилиту OpcodeGen тоже поправьте под себя, т.к. в коде жестко зашита переменная для запуска.

Процесс работы выглядит примерно так: в папке test у меня лежит несколько документов, которые прекрасно выглядят и читаются:

Происходит запуск программы: сначала нам показывается папка, из которой мы запустили программу (в данном случае это было по F5 из VisualStudio), а потом нам показывается, над какими файлами уже поработал шифровальщик.

В итоге текстовый файл у нас больше не читается:

ґ¤ќЈњўљ¤d њ“љ–ўdњd—џ–ЈЏ– њ˜‰џd•¤љџ’‰Jwzwz1?2.?2U

С картинками тоже самое:

При этом размеры получившихся файлов не меняются.

Вот и весь процесс. Используя вполне простые и чистые механизмы можно написать весьма бойкую малварь, которая не будет детектится антивирусами (можно шифровать файлы, а потом брать деньги за расшифровку вполне легально, если подойти с умом. Но я вам этого не говорил)

На текущем этапе код вполне боеспособен, но как и всегда, чтобы его заставить работать, нужно отредактировать основные переменные. Иначе всё было бы слишком просто, а так у вас будет challenge 

Вопросы пишите в комментарии 

p.s. Да прибудет с вами сила и с наступающим Новым Годом!

(и в коде есть интересная ошибка. кто найдет - напишите)

Источник codeby.net