Принцип простой: устанавливаем текущую директорию и всё что нашли грузим в стэк. Потом по этому стеку считаем кол-во папок и файлов:
![]()
string - ссылочный тип, который хранится в куче. Каким образом тут ты грузишь его в стэк?
Следуйте инструкциям в видео ниже, чтобы узнать, как установить наш сайт как веб-приложение на главный экран вашего устройства.
Примечание: Эта функция может быть недоступна в некоторых браузерах.
Статья читается полностью. Тезисы со ссылками на разделы появятся позже.
Принцип простой: устанавливаем текущую директорию и всё что нашли грузим в стэк. Потом по этому стеку считаем кол-во папок и файлов:
![]()
Используя Stack<string> dirs = new Stack<string>(20); - в стек пишем папки, а файлы уже вstring - ссылочный тип, который хранится в куче. Каким образом тут ты грузишь его в стэк?
а в стэк в смысле в структуру данных))) я проглядел, ну окИспользуя Stack<string> dirs = new Stack<string>(20); - в стек пишем папки, а файлы уже в
массив string[] files.
https://msdn.microsoft.com/ru-ru/library/3278tedw(v=vs.110).aspx
это скрин ошибки о поврежденииУ меня у одного upload_2017-12-11_13-39-14.png - поврежден?
В исходнике ошибке исправьте если нетрудно файл с картинкой ведь мороситИспользуя Stack<string> dirs = new Stack<string>(20); - в стек пишем папки, а файлы уже в
массив string[] files.
https://msdn.microsoft.com/ru-ru/library/3278tedw(v=vs.110).aspx
здорово...как исправить ошибку в кодеДоброго времени суток!
Сегодня я покажу как написать простой и уже опробованный в разных местах шифровальщик (не детектится антивирусами), который после завершения процесса сам себя удалит.
Писать будем на С#
Все исходники будут по ссылке ниже, но я и администрация форума предупреждают, что статья написана исключительно в ознакомительных целях и Вы несёте персональную ответственность по закону УК вашей страны за использование материалов из этой статьи в неправомерных целях.
Итак.
Шифрование будет обеспечено модулем, известным еще с моих предыдущих статей CryptoNote
Модуль Copy - открывающий файл и проводящий математические операции с каждым байтом. Очень шустрый. Его описание вы можете найти в тех же старых статьях.
Посмотреть вложение 13786
!!! Обратите внимание на комментарии. !!! Если хотите получить шифровальщик без возможности расшифровки - вместо decodeString используйте Random()-функцию и в дальнейшем уберите ветку (CoderMode==false) - она отвечает за расшифровку.
Поскольку данный экземпляр является примером, то давайте мы будем видеть, какие файлы у нас шифруются (на всякий случай). Для этого напишем модуль TraverseTree. Он умеет не только показывать файлы, но и переходить в директории и суб-директории. Этот модуль ответственный за перебор файлов.
Посмотреть вложение 13787
Принцип простой: устанавливаем текущую директорию и всё что нашли грузим в стэк. Потом по этому стеку считаем кол-во папок и файлов:
Посмотреть вложение 13788
Потом для каждого файла производим процедуру шифрования - выводим на экран список файлов, вызываем процедуру Copy:
Посмотреть вложение 13790
Также у нас присутствует модуль, удаляющий временные (tmp) файлы. Они могут появляться, если файл будет занят каким-либо иным процессом. Код этого модуля прост: получаем файлы в папке и в цикле удаляем по расширению *.tmp
Посмотреть вложение 13792
С модулями разобрались. Осталось заставить это дело работать. Переходим к Main-блоку.
В нем видим следующее:
Посмотреть вложение 13791
Закомментированная строка 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 был написан отдельно и представляет из себя такой код:
Посмотреть вложение 13793
Алгоритм такой: ждём несколько секунд пока завершится процесс шифрования и в папке, полученной при запуске программы, удаляем файл PackMan - так зовут нашего шифровальщика.
Скомпилированный код переведен в hex-опкоды отдельной утилитой, которая будет присутствовать отдельно (энтузиасты смогут найти её в теле PackMan). Утилиту OpcodeGen тоже поправьте под себя, т.к. в коде жестко зашита переменная для запуска.
Процесс работы выглядит примерно так: в папке test у меня лежит несколько документов, которые прекрасно выглядят и читаются:
Посмотреть вложение 13794
Происходит запуск программы: сначала нам показывается папка, из которой мы запустили программу (в данном случае это было по F5 из VisualStudio), а потом нам показывается, над какими файлами уже поработал шифровальщик.
Посмотреть вложение 13795
В итоге текстовый файл у нас больше не читается:
ґ¤ќЈњўљ¤d њ“љ–ўdњd—џ–ЈЏ– њ‰џd•¤љџ’‰Jwzwz1?2.?2U
С картинками тоже самое:
Посмотреть вложение 13796
При этом размеры получившихся файлов не меняются.
Вот и весь процесс. Используя вполне простые и чистые механизмы можно написать весьма бойкую малварь, которая не будет детектится антивирусами (можно шифровать файлы, а потом брать деньги за расшифровку вполне легально, если подойти с умом. Но я вам этого не говорил)
На текущем этапе код вполне боеспособен, но как и всегда, чтобы его заставить работать, нужно отредактировать основные переменные. Иначе всё было бы слишком просто, а так у вас будет challenge
Вопросы пишите в комментарии
p.s. Да прибудет с вами сила и с наступающим Новым Годом!
(и в коде есть интересная ошибка. кто найдет - напишите![]()
Конечно можно, на С и на С++ и нужно это дело писать, но если ты об этом спрашиваешь то первый более менее криптор на с++ у тебя будет минимум через года дваПриветствую.
К Вам вопрос: возможно ли что-то подобное реализовать, только на C++ и, желательно, без сторонних библиотек, вроде Crypto++?
С уважением.
Безусловно, я и не спорю.Конечно можно, на С и на С++ и нужно это дело писать, но если ты об этом спрашиваешь то первый более менее криптор на с++ у тебя будет минимум через года два
Что за культ С и С++.Конечно можно, на С и на С++ и нужно это дело писать, но если ты об этом спрашиваешь то первый более менее криптор на с++ у тебя будет минимум через года два
Твое призвание интерпретируемые языки - наше компилируемые, если разница не понятна, то видимо и малвари соответствующие. Ничего личного - только бизнесЧто за культ С и С++.
Я пишу всякую малварь и крипторы на Go и нормально живу.
Go компилируемыйТвое призвание интерпретируемые языки - наше компилируемые, если разница не понятна, то видимо и малвари соответствующие. Ничего личного - только бизнес![]()
Стал недавноGo компилируемый![]()
Стал недавнов 2016 году а до этого переваривал себя через чистый Си) но мы малвари пишем с 2000-ых и не могли ждать 16 лет пока выйдет ваш Голанг)
Но для меня он всегда остенется в памяти скриптовым языком)
Не имею смысла обсуждать далее, так как вы о собственном языке не знаете важных вещей, что тот самый компилятор которым вы собираете ваш софт перешел на язык Go в 2016 году до этого компилятор был написан на Си. Пруф к моей полемике на официальном сайте Go https://talks.golang.org/2014/c2go.slide#1 что с 2014 года ведется разработка своего компилятора что бы уйти с компилятора Си и наконец он был выпущен ближе к 2016 году. покажите примеры ваших программ очень сомнительно что вы пишите на нем)))Вы о чем.
Go всегда был компилируемым.
А по поводу 16 лет, ну как бы уже не 2000 год, не обязательно сидеть на одном и том же всю жизнь.
Go 1 версии кстати в 2009 еще появился
Я не спорю что C хороший язык, я сам его иногда использую, но время идет, и ничто не мешает использовать более удобные языки.
Не имею смысла обсуждать далее, так как вы о собственном языке не знаете важных вещей, что тот самый компилятор которым вы собираете ваш софт перешел на язык Go в 2016 году до этого компилятор был написан на Си. Пруф к моей полемике на официальном сайте Go https://talks.golang.org/2014/c2go.slide#1 что с 2014 года ведется разработка своего компилятора что бы уйти с компилятора Си и наконец он был выпущен ближе к 2016 году. покажите примеры ваших программ очень сомнительно что вы пишите на нем)))
То что он использовал компилятор написаный на С не делает его интерпретируемым языком.
Вы немного путаете понятия интерпретируемых и компилируемых языков, видимо.
Компилируемый преобразуется в машинный код, а интерпретируемый исполняется с помощью специальной программы-интерпретатора.
Питон вот интерпретируемый, а вот go всегда был и есть компилируемым языком.
Комментарии
20