• XSS.stack #1 – первый литературный журнал от юзеров форума

Малварь на Go, python и новые технологии. Почему нельзя ?

Скрытое содержимое
Довольно странное видео, понимаю конечно, то, что автор является фанатом плюсов, но можно было бы и пообъективнее делать оценку и не умалчивать о деталях. Даже в первой части видео где он говорит, что все браузеры написаны на плюсах, он не упоминает то, что значительная часть кода в firefox написана на rust, и сравнивая производительность firefox и chromium браузеров которые написаны на плюсах, мы получаем то, что firefox в большинстве случаев справляется намного лучше и жрет меньше памяти.
Переходя дальше где автор сравнивает C++ vs Rust, показывает пример с бесконечной рекурсией и указывает что в обоих случаях и rust и c++ компилирует код (тем самым показывает что раст не такой уж и безопасный язык), опять же умалчивает, что раст при компиляции генерит варнинг https://pastebin.com/vkx02E63 где очень ясно показывает, что у вас в коде бесконечная рекурсия, а то что компилится он будет это очевидно, это все таки системный язык, и такое он обязан компилить.

Дальше автор говорит, что компилятор раста в некоторых случаях генерит немного больше обращений к памяти, возможно оно конечно и так, сейчас не проверял, и скорее всего в нынешней версии уже все лучше, ибо раст за последний год выкатил кучу апдейтов. И даже если оно так, то это все компенсируется memory safety языка, что в любом хайлоаде будет намного важнее, да и в мальваре тоже.

Дальше про портирование приложений с плюсов на раст, и о том, что весь вызываемый си код надо оборачивать в unsafe, и тут автор говорит, что внутри unsafe блока выключаются все safety проверки раста, это конечно же глупость, достаточно опять же открыть раст бук или доки по unsafe кейворду в расте и увидеть, что внутри unsafe блока позволено делать такие операции:
  • Dereference a raw pointer
  • Call an unsafe function or method
  • Access or modify a mutable static variable
  • Implement an unsafe trait
  • Access fields of unions
Unsafe блок не выключает проверку на borowing checker, лайфтаймы, овнершип и все другие проверки в расте. И оборачивать весь код в unsafe как раз таки и является bad practice, если вы конечно не пишите свою OS, в большинстве случаев достаточно обернуть 10 строк кода в unsafe и все, и если у вас случается где-то memory corruption, то как раз таки среди нескольких строк unsafe кода баг искать будет намного проще, чем в тонне файлов в плюсах. Ну и плюс уже имеется куча pure rust implementations кучи разных проектов, включая разного рода криптоалгоритмы и прочее, что исключает надобность использовать C либы в новых проектах. В конце опять автор допускает ошибку говоря, что unsafe == небезопасный код, по этому поводу уже написал
 
с rust не работаю, но поглядываю на него. мне в нём нравится наличие полноценной экосистемы и само отношением к разработке (пакетный менеджер, юнит тесты - всё из коробки). для Си, конечно, тоже всё это есть, но отдельно от основной среды разработки + свои нюансы (привет изменениям мейк файла на каждый новый тест). ну и embedded само собой в тему. интересно было бы посмотреть на реализацию чего-нибудь тематического на языке rust под win32, допустим на инжект в 64-битный процесс или хотя бы просто на работу с PE. может у кого завалялся сорец?
 
Скрытый контент для зарегистрированных пользователей.

Довольно странное видео, понимаю конечно, то, что автор является фанатом плюсов, но можно было бы и пообъективнее делать оценку и не умалчивать о деталях. Даже в первой части видео где он говорит, что все браузеры написаны на плюсах, он не упоминает то, что значительная часть кода в firefox написана на rust, и сравнивая производительность firefox и chromium браузеров которые написаны на плюсах, мы получаем то, что firefox в большинстве случаев справляется намного лучше и жрет меньше памяти.
Переходя дальше где автор сравнивает C++ vs Rust, показывает пример с бесконечной рекурсией и указывает что в обоих случаях и rust и c++ компилирует код (тем самым показывает что раст не такой уж и безопасный язык), опять же умалчивает, что раст при компиляции генерит варнинг https://pastebin.com/vkx02E63 где очень ясно показывает, что у вас в коде бесконечная рекурсия, а то что компилится он будет это очевидно, это все таки системный язык, и такое он обязан компилить.

Дальше автор говорит, что компилятор раста в некоторых случаях генерит немного больше обращений к памяти, возможно оно конечно и так, сейчас не проверял, и скорее всего в нынешней версии уже все лучше, ибо раст за последний год выкатил кучу апдейтов. И даже если оно так, то это все компенсируется memory safety языка, что в любом хайлоаде будет намного важнее, да и в мальваре тоже.

Дальше про портирование приложений с плюсов на раст, и о том, что весь вызываемый си код надо оборачивать в unsafe, и тут автор говорит, что внутри unsafe блока выключаются все safety проверки раста, это конечно же глупость, достаточно опять же открыть раст бук или доки по unsafe кейворду в расте и увидеть, что внутри unsafe блока позволено делать такие операции:
Было бы странно, если бы Firefox не использовал свой же язык :D.
В принципе, я со всем согласен, кроме лишних асм инструкций. Твои слова - пустой треп (немного грубо), нужно все-таки проводить сравнения. Может запилим статью по типу "C++ vs Rust"? :D
 
Вообще не понимаю, почему в теме о малвари приводят в пример вполне себе легальный софт, над которым трудятся тысячи индусов на своих там всяких питонах и растах... ну хз крч.
 
Вообще не понимаю, почему в теме о малвари приводят в пример вполне себе легальный софт, над которым трудятся тысячи индусов на своих там всяких питонах и растах... ну хз крч.
Мне кажется разработка серьезной малвари принципиально мало отличается от разработки легал. софта и по сложности также.
И это тяжело делать одному человеку, практически невозможно.

Я не профи, так играюсь. И вряд-ли буду в комерсе, т.к. не мое это.

Но в качестве примера, было время игрался с крипторами, писали мне разные люди, что например по началу "Вау ! Круто, не детектит...", через буквально три-пять дней детект, нужно чистить, через неделю-две уже чистить практически невозможно по времени...

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

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

Но это мое мнение, я далек от комерса, так наблюдение просто.)))
 
с rust не работаю, но поглядываю на него. мне в нём нравится наличие полноценной экосистемы и само отношением к разработке (пакетный менеджер, юнит тесты - всё из коробки). для Си, конечно, тоже всё это есть, но отдельно от основной среды разработки + свои нюансы (привет изменениям мейк файла на каждый новый тест). ну и embedded само собой в тему. интересно было бы посмотреть на реализацию чего-нибудь тематического на языке rust под win32, допустим на инжект в 64-битный процесс или хотя бы просто на работу с PE. может у кого завалялся сорец?
Выглядит страшно
 
файл 10 - 15 метров грузить со связки - юзер просто закроет подвисшую вкладку. да и массово раздавать файлы с таким весом из ливанского подвала, где канал дай бог 100мбит шаред, это вообще гением быть надо.
Бро конечно в теме, но бро неправ.
Нормальный кодер PE SC для связки:
- сразу уйдет из эксплуатируемого в другой процесс да еще и через обход;
- в эксплуатируемом потоке потрет SC и например поставит на слип чтоб не было крэша и не отправлялся дамп;
- и уже из другого процесса будет себе качать 15 метров, но опять же качая что 100кб, что 15метров нужно учитывать возможность обрыва соединения, и эти проблемы связанные с отстуком и весом как раз из за горе кодеров кто качает "на удачу", просто вероятность обрыва во время скачивания 15м намного выше, вот вам и ваша причина разницы отстука больших и меленьких файлов - говношк в говносвязках, тупое скачивание лоадера в эксплуатируемом процессе.
 
ну самое простое - это создать отдельный поток. тогда хотя бы вкладка не повиснет. сейчас вообще только особо одарённые вешают вкладку на время dl&exec. а то что ты пишешь - угу, все нормальные люди так и делают. некоторые при этом успевают подняться до system. для стиллера вообще всё намного проще - там чисто чтение из диры пользователя и во многих случаях не проблема работать с урезанными привилегиями.
только у нас условие загрузить стиллер 15 мб напрямую. уже не помню, почему именно так, что-то из серии "с чего ты взял, что все юзают лоадеры, можно и без него."
а пилить свою связку, лпе и шк ради того, чтобы потом можно было сократить трудозатраты, заюзав сорцы какого-то стиллака на го с гитхаба - ну это пиздец, товарищи :)
 
ну самое простое - это создать отдельный поток. тогда хотя бы вкладка не повиснет.
Наверное ты имеешь ввиду что фиксить эксплуатируемый поток от крэша если позволяет бага и у кодера есть время на разработку "фикса" то да, для 0day оптимальный вариант чтоб небыло даже визуального намека на эксплуатацию. Кстати как то делал PDF сплоит то тут фриз был простым и тихим вариантом, так как плагин, вкладка работала нормально, только скрытый фрейм с PDF висит что не заметно.

По поводу лоадера или бота то мое мнение конечно же Си + Асм, без асма часто не выходит некоторые вещи провернуть ну или придется опкоды в виде бинаря писать. Малварь не про то как удобнее писать, а про то как скрытнее и универсальнее.
Но, на сегодня PE != скрытность, иногда нужно юзать и скрипты если это помогает избежать детект, да и разные векторы есть, если шлешь JS нарпимер, то тут 1я ступень JS, далее уже по ситуации, у PE в плане возможностей больше преимуществ но его еще запустить нужно, а может вы не нашли как тихо запустить PE из JS, но нашли тихий способ JS->PS->PE.

А серьезные ребята что делают точечные атаки могут себе позволить на питоне кодить, у них 0days есть чтоб АВ устранить например и развлекаться как угодно, и атаки редкие, точечные не нуждаются в постоянном крипте/борьбе с АВ.
 
Пожалуйста, обратите внимание, что пользователь заблокирован
Там простой мессаджбокс, исходник в архиве. Вес около 700 кб, под upx до 300 кб ужимается
Лично у меня PE loader не запустил этот go хелловорлд, особо глубоко не смотрел, где-то вначале и упало (пе лоадер самый простой, без обработки эксепшнов и т.д.). Мб у тех, кто профессионально криптует, есть какие-то фишки или они тупо пакуют, хз. Но короче чисто запуск в памяти не пошел. Конечно, хелловорлд от новой студии тоже , скорее всего, просто так не запустится - но там можно отключить всю эту цртшную поебень. В случае же Go - наверное, тогда надо исходить из самого языка, прятать малваре функционал за всем этим "легальным мусором". Ну или хз.
 
Пожалуйста, обратите внимание, что пользователь заблокирован
пе лоадер самый простой, без обработки эксепшнов
Скорее всего проблема в этом. Там с голангом много всяких приколюх можно делать. К примеру, можно собрать в виде статик-либы и юзать в с/++ коде. Правда там гемор с кросс-компиляцией. Вряд ли это все применимо в малвари на практике, чисто из интереса поковырял.
 
Пожалуйста, обратите внимание, что пользователь заблокирован
Вряд ли это все применимо в малвари на практике, чисто из интереса поковырял.
Можно попробовать на голанге сделать обертку, т.е. РЕ лоадер-криптор, для аверов это будет выглядеть как легальное приложение.
Меня все таки Rust интересует, просто руки не дойдут до изучения.
 
Меня все таки Rust интересует, просто руки не дойдут до изучения.
Сейчас его учить начал, напару с Cи. Потом оставлю, что лучше пойдёт :)
 
Последнее редактирование:
Пожалуйста, обратите внимание, что пользователь заблокирован
Сейчас его учить начал, напару с C. Потом отпределюсь, что продолжать :)
Напишешь потом впечатления от Rust, стоит ли учить или ерунда (для нашей темы). Мне он нравится, т.к. рекламируют мол как плюсы, но тесты в нем проще, и вообще, более "современный" ЯП.
Хм , а ты разве не знал Си? Я помню что ты на фасме кодил когда-то, но то давно было, 10 лет назад).
 
Напишешь потом впечатления от Rust, стоит ли учить или ерунда (для нашей темы). Мне он нравится, т.к. рекламируют мол как плюсы, но тесты в нем проще, и вообще, более "современный" ЯП.
Хм , а ты разве не знал Си? Я помню что ты на фасме кодил когда-то, но то давно было, 10 лет назад).
Для "вашей темы" он мало пригоден. Это ещё один го, только в другой обёртке. С/С++ будут жить вечно.
 
Напишешь потом впечатления от Rust, стоит ли учить или ерунда (для нашей темы). Мне он нравится, т.к. рекламируют мол как плюсы, но тесты в нем проще, и вообще, более "современный" ЯП.
Хм , а ты разве не знал Си? Я помню что ты на фасме кодил когда-то, но то давно было, 10 лет назад).
Да, я тупо начал учить FASM как первый язык :)
Потом постепенно забил на это дело.

Для "вашей темы" он мало пригоден. Это ещё один го, только в другой обёртке. С/С++ будут жить вечно.
Почему? В отличии от Go, получившийся бинарь не весит мегабайты, плюс Rust более-менее дружит с winapi.
 
Да, я тупо начал учить FASM как первый язык :)
Потом постепенно забил на это дело.


Почему? В отличии от Go, получившийся бинарь не весит мегабайты, плюс Rust более-менее дружит с winapi.
На самом деле, Rust - не такой уж и плохой язык для малвари. Единственное, что меня напрягает - вес (не очень критично). Может быть, я тупой, но мне не удалось избавиться от всего мусора, что тянет за собой Rust. Минимальный вес бинарника (на Rust, а не на C :D) - 100KB
 
Пожалуйста, обратите внимание, что пользователь заблокирован
Да, я тупо начал учить FASM как первый язык :)
Потом постепенно забил на это дело.
А я начал с Масм, если помнишь, тебя еще спрашивал на экспе разную ерунду ). Не жалею ни разу, Асм дает правильное мышление для кодера, именно понимаешь как и что работает.
А потом по совету 1 товарища с васма (помучившись перед этим с ассемблером 2 года) начал учить Си - и пошло. На Масме и щас пишу, там РоС разные или еще какую фигню, т.к. язык простой, оттестить можно алгоритм. Но Си банально быстрее и проще. Смотрю в сторону плюсов из-за неймспейсов и шаблонов, но как то не хочется учить это ООП все. Просто чем больше проект, тем больше хочется спрятать разную ерунду за абстракцией, а самопальные реализации ООП в Асм/Си (делаем структуру, в ней указатели на функции) как то не особо выглядят.
 
На самом деле, Rust - не такой уж и плохой язык для малвари. Единственное, что меня напрягает - вес (не очень критично). Может быть, я тупой, но мне не удалось избавиться от всего мусора, что тянет за собой Rust. Минимальный вес бинарника (на Rust, а не на C :D) - 100KB
4-8 кб

А я начал с Масм, если помнишь, тебя еще спрашивал на экспе разную ерунду ). Не жалею ни разу, Асм дает правильное мышление для кодера, именно понимаешь как и что работает.
А потом по совету 1 товарища с васма (помучившись перед этим с ассемблером 2 года) начал учить Си - и пошло. На Масме и щас пишу, там РоС разные или еще какую фигню, т.к. язык простой, оттестить можно алгоритм. Но Си банально быстрее и проще. Смотрю в сторону плюсов из-за неймспейсов и шаблонов, но как то не хочется учить это ООП все. Просто чем больше проект, тем больше хочется спрятать разную ерунду за абстракцией, а самопальные реализации ООП в Асм/Си (делаем структуру, в ней указатели на функции) как то не особо выглядят.
Да, если писать мелкий софт, то Асм удобен. Но, имхо, писать и потом поддерживать крупные проекты на нём такое-себе удовольствие :)
 


Напишите ответ...
  • Вставить:
Прикрепить файлы
Верх