Mars ******* врывается на форумы с красивым описанием - "Написан на ASM/C WinAPI, не используется CRT, STD" Давайте закроем глаза на то, что нет никакого STD, есть STL, но сами же написали, что написано на Си - какое там вообще может быть STL, если это стандартная библиотека C++? Но мало того, что про ассемблер вам наврали, так ещё и наврали про скрытие запросов секретной техникой и отсутствие CRT - тоже! "Весит 95 килобайт, использует техники скрытия запросов к WinAPI, шифрует используемые строки, собирает весь лог в памяти, а так же поддерживает защищённое SSL-соединение командным сервером" (95 килобайт подозрительно много для ASM/C, и вы позже поймёте почему так много) Билд действительно было сложно достать, но я нашёл какую-то статью про Mars ******* ("how to remove Mars *******"), где был прикреплён его отчёт на VirusTotal, и, к счастью, целых 6 дней назад! Хэш: 7da3029263bfbb0699119a715ce22a3941cf8100428fd43c9e1e46bf436ca687 Давайте сравним описанное: (Вес файла 94.50 kb, пока что всё сходится) Дальше я пошёл по хэшу, и нашёл его на Bazaar, и там уже нашёл его тэг - "MarsStealer" Ну а потом скачал его по хэшу с AnyRun, где он засветился два раза. Скачал я самую последнюю версию, которая засветилась в 11:16 09 авг. 2021 Из странного хочу отметить, что ******* всегда палится, обращаясь к sqlite.dll на домене, возможно он его скачивает, но почему разработчики просто не поместили его в ресурсы, или не скомпилировали статически? Давайте разбираться.. Ревёрс-инжиниринг Mars ******* / Первый взгляд Итак. Скачав билд, я сразу требую забанить того, кто продаёт *******, за обман. Потому что в *******е используются CRT, и используются - ещё мало сказано: (Нас всех обманули!) Идём дальше. Строки зашифрованы, своё шифрование, или нет - я разбираться не стал UPD: Это Base64(RC4), по словам разработчика Ревёрс-инжиниринг Mars ******* / Динамический, статический анализ При запуске нас встречает 6 функций. Первая функция - подгрузка библиотек и инициализация функций. Прописано без таблицы адресов, абсолютно никакой оптимизации: Вторая функция - проверка на наличие пошаговой отладки. Если пошаговая отладка - вызвать ExitProcess: Далее идёт ещё одна проверка, получением языка машины (проверка на СНГ). В общем, меняем всё это дело вот так: Идём дальше... Потом идёт создание мутекса, проверка на то, успешно ли он создался... И потом первая функция после проверки мутекса - бинго! Расшифровка. Заходим внутрь первой функции, в которую передаётся аргумент с зашифрованной строкой: И видим вызов первой функции. Она просто работает с локальными переменными, и делаем вывод, что это генерировал Си-компилятор, впрочем, нигде ассемблера я так и не увидел... Далее идёт вторая функция. Она переводит строку в бинарный вид, через CryptStringToBinaryA (так же через неё можно конвертировать из\в base64) Далее идёт выделение памяти, и сама расшифровка... Первым расшифровывается дата.. 28\08\2021, это для проверки лицензии Далее расшифровывается "http://" Не успели мы уже **** собрать, а нам тут уже домен первым делом расшифровали. cookreceipts.fun Дальше Гейт - /some2.php Ну и дальше уже без скриншотов: "open" - для ShellExecuteA "%hu/%hu/%hu %hu:%hu:%hu" - для панели, на это место вставится дата Потом наш путь к sqlite3.dll "/public/sqlite3.dll" Потом идёт путь, куда скачивать DLL: "C:\ProgramData\sqlite3.dll" Потом ещё скачивается вторая библиотека, и вообще, вот вам список библиотек, которые переносятся через домен: "/public/freebl3.dll" -> "C:\ProgramData\freebl3.dll" "/public/mozglue.dll" -> "C:\ProgramData\mozglue.dll" "/public/msvcp140.dll" -> "C:\ProgramData\msvcp140.dll" "/public/nss3.dll" -> "C:\ProgramData\nss3.dll" "/public/softokn3.dll" -> "C:\ProgramData\softokn3.dll" "/public/vcruntime140.dll" -> "C:\ProgramData\vcruntime140.dll" И дальше строки для панели: ".zip", "BotID: ", "IP: ", "Country: ", "Working path: ", "Local time: ", "TimeZone: ", "Display Language: ", "Keyboard language: ", "Is Laptop: ", "Processor: ", "Installed RAM: ", "OS: (", " bit)", "Videocard: ", "Display resolution: ", "PC name: ", "User name: ", "Domain name: ", "Machine ID: ", "GUID: ", "Installed software: ", "system.txt", "Grabber\%s.zip", "%APPDATA%", "%LOCALAPDDATA%", "%USERPROFILE%", "%DESKTOP%", "Wallets\", "Ethereum", "keystore", "Electrum", "\Electrum\wallets\", ну продолжать можно бесконечно... Ужасный код расшифровки одним огромнейшим списком: (Можно было сократить в один маленький цикл) Следующая функция после дешифровки всех данных - импорт оставшихся функций (нужных для последующих действий). В самом начале - идёт первая часть функций, она небольшая, это в основном из kernel32 - для получения даты, и т.д, а теперь идут остальная - огромная часть, и мало того, что огромная - так ещё и неоптимизированная. UPD: Разработчик написал, что это компилятор виноват, но мы ведь все знаем, что на O0 он не сгенерирует даже это, а в результате на O3 он бы сам оптимизировал в циклы, но подозрение у меня, что разработчик написал копирайт кучи строк, а потом ещё и в O0-O2 скомпилировал, вот вам и 95 килобайт: В ассемблерном листинге это ещё длиннее, поэтому я покажу вам в декомпиляторе, т.к так это более компактнее. Впитайте в себя килобайты, и представьте, как бы вы это оптимизировали в один маленький цикл с таблицей: После подгрузки функций - идёт сбор данных... Неясно, почему перед сборкой ***** идут расшифровка всех данных, импорт WinInet, а потом только отправка, можно было всё намного лучше перестроить. В сборе данных так же используются системные переменные: Что убивает переносимость, т.к если переменные выставлены неверно - ******* работать не будет. Порядок сбора данных: Не поместилось - сначала идёт получение sqlite3 из домена Потом браузеры, криптокошельки, делается скриншот, GetAnotherLibs (не разобрал, отправляется запрос на гейт, и читается ответ), граббер, фукции от Си-компилятора, а потом отправка Отправка - очень много lstrcat Сбор данных идёт на диске: В общем виде выглядит всё вот так: (не CheckVM, а проверка на СНГ) Естественно, про многопоточность и речи не идёт. Итоги: Плюсы: - Шифрование - Защищённая импорт-таблица (получение функций в рантайме) Минусы: - Максимально неоптимизированный код - Неправильная постановка хода *******а. Сначала расшифровывается всё, импортируются функции, а только потом собираются и отправляются данные. Ничего не мешает в отладке зайти в функцию дешифровки, получить строки, и выйти... - Отсутствие обнаружения виртуальной среды. - Подгрузка библиотек с панели, нагрузка - Обман пользователей с намерениями специально привлечь внимание - Сбор данных на диске - Используются системные переменные - Отсутствие многопоточности Скачать рассматриваемый билд MarsStealer -> https://dl.uploadgram.me/612456b287686h Читайте так же: * Ревёрс-инжиниринг *******а RedLine -> https://zelenka.guru/threads/2866730/ * Ревёрс-инжиниринг DC-RAT -> https://zelenka.guru/threads/2878088/ * Ревёрс-инжиниринг *******а X-FILES -> https://zelenka.guru/threads/2884957/ * Пишем полиморфный код на ассемблере с шифрованием (обход VirtualBox, AnyRun, дампа памяти, 5 блоков кода) -> https://zelenka.guru/threads/2881723/ * Ревёрс-инжиниринг MarsStealer -> https://zelenka.guru/threads/2888161/ * Кряк MarsStealer v3 -> https://bhf.io/threads/636515/#post-7113209 * Ревёрс-инжиниринг SHurk Steal -> https://zelenka.guru/threads/2889104/
LLCPPC_inactive4415647, "смирись" у тебя вечно повторяется. Ну "иди тут" просто не уместно. "в ******ы полез" это вообще по моему не правильно, более грамотно было бы выразиться в малваре кодинг.
G0odDay, Мне просто не нравится употреблять взаимствованное слово "малварь", оно звучит не по-русски, а писать "программирование вредоносного ПО" иногда забываю, поэтому легче просто указать "ветку" вредоносного ПО, вроде "*******" - легко, и просто. А про "смирись" - я сделал фон утверждающего предложения, однако я писал это с раздражительностью, поэтому мог не следить за речью
LLCPPC_inactive4415647, Вообще про англицизмы это спорная тема, вроде не есть хороша, а вроде и не плохо. А про раздражительность я тебя понимаю
Обновил. Всем стоит это видеть. Добавил порядок сбора данных (и в принципе показал сбор данных, и отправку), как ты просил, marsteam, добавил ещё два минуса - сбор данных на диске, использование системных переменных. Ну и ещё добавил побольше доказательств твоего говнокода, пусть люди видят. Так же поправил "общий вид", т.к я там ошибся, порядок -> Дешифровка всех данных, получение функций (в том числе winapi, в одном говнокоде), проверка лицензии по дате (легко крякается), получение\отправка *****. Рекорд по минусам Добавлено: где же твоя секретная техника скрытия запросов?
marsteam, Всё, больше отвечать тебе вообще не буду, тебе не доходит никак, ты говоришь только про то, что не так, за то проигнорировал системные переменные, что же ты про них молчишь, гений WinAPI? Или не знаешь функции рода GetTempPathA?
marsteam, "Давай до привычек цепляться, может ещё мне левой рукой начать писать?" Это не привычка, это доказывает твою зелёность в программировании. Ты банально не знаешь терминов. Это как называть функции - процедурами...
marsteam, "Мда, на этом можно спор заканчивать. Совсем забыл, что у нас msvcrt что-то в kernel32 забыла. https://docs.microsoft.com/en-us/windows/win32/api/winbase/nf-winbase-lstrcata " А я и не про lstrcat писал. Давай поговорим про memcpy, memset, strtstr, getenv, strtok, stmcpy, strcpy? И strcat тоже аналог использовался в msvcrt, но это так, раз ты не понял ничего
Лжедмитрий, самый лучший ******- это продукт, который ты написал сам, и который тебя устраивает) Понятное дело сбор в памяти-самое главное+ шифрование.
не эксперт, но по моему билиотека sqlite на си использует crt, если его компилировать статически, то это сильно повлияет на вес *******а + уже будет противоречить и так нарушенному заявлению кодера о том что crt не юзается