Пожалуйста, обратите внимание, что пользователь заблокирован
Всем привет
Я давненько наблюдаю за форумным рынком, решил пройтись по существующим продуктам и сделать публичный обзор, чтобы вы могли понять, какой софт достоин внимания, а какой является шлаком
Первым на обзор попал стиллер Phoenix, это MaaS решение, иными словами админка стоит на серверах владельца, клиенту достаточно оплатить подписку и можно начинать работать
Стоимость софта 99$ в месяц, что довольно сильно меня удивило, поскольку лично у меня не было бы мотивации даже встать со стула за эту сумму, не говоря уже о поддержке кучи клиентов
Никаких предварительных договоренностей с автором продукта у меня не было, я считаю, что они не нужны, поскольку обзор должен быть обьективным и показывать всё, как есть
Итак, на руках у меня доступ в админку стиллера. Админка находится в клирнете, на входе в неё меня встретила авторизация. Ввожу логин и пароль от аккаунта и попадаю в главное меню:
В главном меню меня встретила надпись "Welcome, username" и табличка, указывающая до какого числа активна моя подписка
Как по мне, глупо выносить такое в отдельную вкладку, на странице много пустого места, практичнее было бы, если бы вся информация была на одной вкладке
Идём дальше, вкладка с логами:
Таблица с логами, пагинация, возможность скачать все логи и удалить все логи
Меня удивило то, что нельзя скачать один конкретный лог. Если я захочу посмотреть пароли конкретного юзера, мне прийдётся перекачивать все логи с админки
Настройки:
Самая неприятная часть панели, страница перегружена, я бы отбил руки дизайнеру
В настройках на одной странице можно указать миллион опций в том числе сменить пароль и скачать билды
Это ненормально, нужно разграничивать интерфейс, чтобы в каждой вкладке был функционал, относящийся только к ней
В данном случае нужны подвкладки: настройка уведомлений, управление аккаунтом и т.д, а так же отдельная страница с билдером, ему не место в настройках
Цветовая схема админки мне понравилась, прикольно, не бьёт по глазам в ночное время суток, сделано в стиле минимализма
Так же под конец осмотра админки я заметил, что она стоит за обычным DDOS Guard, это меня сильно удивило, я бы не стал доверять безопасность такого проекта белому сервису, находящемуся в РУ
Ладно, админку посмотрели, переходим к билду. Я скачал билд и начал с осмотра в статике
Мы имеем нативный х86 бинарник весом 29 кб, в импорте видны следующие функции:
Как вы уже наверняка поняли, импорт частично скрыт
Далее я решил посмотреть, какие строки содержатся внутри бинарника и к моему удивлению я обнаружил некоторые строки, относящиеся к работе стиллера в открытом виде
Опять же, почему некоторые строки зашифрованы а некоторые нет я не знаю, держать строки в открытом виде в такого рода софте глупо и непрофессионально
Переходим к IDA. Загрузив в неё бинарник, попадаем на точку входа
Как видим, сразу же при запуске стиллер создаёт мьютекс, название которого является статическим и лежит в открытом виде в секции данных
В моём случае, мьютекс имеет вид GUID'a. Если он существует, софт прекращает свою работу
После этого происходит инициализация, дешифруется конфиг и происходят проверки на нахождение в песочнице
Антипесочница в этом стиллере работает немного странно, получается позиция курсора мыши и производится проверка на изменение позиции курсора в бесконечном цикле. Т.е если не двигать мышкой, стиллер будет крутиться в бесконечном цикле
Метод довольно глупый, потому что в любом более менее нормальном песке движения мыши эмулируются. Эта функция вызывается два раза на точке входа, видимо для надежности =)))
Далее происходит инициализация таблицы, содержащей адреса winapi функций, первыми получаются адреса таких функций как SHGetFolderPathW из shell32.dll и FindNextFileW
К слову, об инициализации апи функций. Функции ищутся по хешу, для этого вызывается функция со следующим прототипом:
Вот её вид в дизасме:
Как вы уже заметили, она вызывает GetModuleHandle и LoadLibraryA, что убивает весь смысл затеи с динамическим импортом. Впрочем, можно было ограничиться одним вызовом LoadLibraryA, но видимо автор не читал документацию к этой функции на мсдн
Далее происходит стандартная процедура перечисления функций в таблице экспорта, хеширование с помощью crc32 и возврат адреса функции в случае эквивалентности хешей, при этом не поддерживается обработка переадресcации функций (api forwarding), возможно поэтому некоторые функции, в том числе HeapAlloc, которая уходит в ntdll.RtlAllocateHeap импортируются статически
Далее выделяется память размером в MAX_PATH * 2 байт, адреса выделенной памяти помещаются в 3 глобальные переменные, мы назовём их LocalAppDataPath, DesktopPath и AppdataPath
После того как память была выделена, с помощью SHGetFolderPathW получаются пути к локалаппдате, рабочему столу и аппдате, они сохраняются в раннее выделенной памяти
После того, как пути получены, стиллер инициализирует массив из хендлов, в нём будут храниться хендлы потоков, которые создаются для работы
Всего создаётся 4 потока, 1 поток под сбор c appdata и localappdata, 1 поток под сбор со всех дисков, 1 поток под файлграббер (собирает рабочий стол), 1 поток под создание скриншота рабочего стола
Вызывается функция WaitForMultipleObjects, которая ожидает завершения всех потоков. После того, как потоки завершились, закрываются их хендлы
Тут случился забавный момент, в цикле автор закрывает 3 хендла, а не 4. Т.е 1 хендл остаётся не закрытым
Далее в потоках происходит сбор необходимых файлов, там нет ничего интересного лично для меня, но подмечу следующее
В рекламной теме сказано, что "файловый сканер" работает через системные вызовы, или же проще говоря, сисколлы
Я не понял смысла этой затеи, но раз сказано - проверим: открываем дизасм "файлового сканнера" и видим вот такое:
Это обычный FindNextFileW, инициализацию которого можно увидеть здесь:
CRC32 от FindNextFileW == -2114741223, поэтому всё сходится. Нас надули
Сейчас покажу полный вид этой функции, вы можете подумать, что блоки кода перемешаны control flow flattening'ом, но нет, код не обфусцирован
После того, как все потоки отработали, производится отправка лога
Для отправки используется winsock2, загружается ws2_32.dll, получаются адреса нужных функций и идёт конект на адрес прокладки по порту 2227
В связи с тем что используются сокеты, стиллер не отстучит на машинах, где проброшен прокси. Так же, отстук на нестандартный порт вызовет затриггерит файрвол
Общие впечатления от кода стиллера:
Это ужас. Куча глобальных переменных, результат выполнения функций не проверяется, т.е если какой то кусок кода даст ошибку, стиллер пойдет дальше
Код не разделён на функциональные части, всё в куче, функционал перемешан в функциях, одна функция выполняет кучу задач
Так же в коде зачем то постоянно используются критические секции, вот, например, есть функция выделения памяти и перед тем как вызвать HeapAlloc стиллер постоянно входит в критическую секцию:
С технической частью всё, теперь просто погоняем софт на ВМ и посмотрим, как он работает в деле.
ОС - Win10 х64, антивирус отключен, проверяем только работоспособность
Софт на борту:
- Google Chrome (+ расширение metamask)
- Mozilla Firefox
- Exodus Wallet
- Electrum
Так же на рабочем столе находились несколько текстовых файлов со случайным содержимым, к тесту они никак не относятся
Стиллер отработал с первого раза, но с некоторыми "НО":
1) Exodus'a не было в логе
2) Пароли из Firefox, содержащие русские буквы и иероглифы были заменены вопросительными знаками
3) С рабочего стола были собраны бесполезные .txt файлы, граббер собирает файлы по расширению, в лог часто будет попадать ненужный мусор
4) Файл скриншота в архиве назывался $s.bmp, я так понимаю, $s это какая то метка для админки, которая должна быть заменена на слово, но почему то не заменилась
5) Криво отображается информация о системе в файле Log.txt. В полях System Layout и Keyboard Layouts какие то цифры, хотя должны быть идентификаторы раскладок
Итого:
Посмотрев стиллер, я могу сказать, что продукт сырой. Видимо, автор только учится кодить и при этом пытается заработать на своих клиентах
Очень много детских ошибок, код перегружен, функционал не полностью соответствует описанию
На данный момент я бы не советовал покупать этот стиллер, да, он оправдывает свою цену, но если вы настроены работать серьёзно - поищите другой вариант
Я давненько наблюдаю за форумным рынком, решил пройтись по существующим продуктам и сделать публичный обзор, чтобы вы могли понять, какой софт достоин внимания, а какой является шлаком
Первым на обзор попал стиллер Phoenix, это MaaS решение, иными словами админка стоит на серверах владельца, клиенту достаточно оплатить подписку и можно начинать работать
Стоимость софта 99$ в месяц, что довольно сильно меня удивило, поскольку лично у меня не было бы мотивации даже встать со стула за эту сумму, не говоря уже о поддержке кучи клиентов
Никаких предварительных договоренностей с автором продукта у меня не было, я считаю, что они не нужны, поскольку обзор должен быть обьективным и показывать всё, как есть
Итак, на руках у меня доступ в админку стиллера. Админка находится в клирнете, на входе в неё меня встретила авторизация. Ввожу логин и пароль от аккаунта и попадаю в главное меню:
В главном меню меня встретила надпись "Welcome, username" и табличка, указывающая до какого числа активна моя подписка
Как по мне, глупо выносить такое в отдельную вкладку, на странице много пустого места, практичнее было бы, если бы вся информация была на одной вкладке
Идём дальше, вкладка с логами:
[
Таблица с логами, пагинация, возможность скачать все логи и удалить все логи
Меня удивило то, что нельзя скачать один конкретный лог. Если я захочу посмотреть пароли конкретного юзера, мне прийдётся перекачивать все логи с админки
Настройки:
Самая неприятная часть панели, страница перегружена, я бы отбил руки дизайнеру
В настройках на одной странице можно указать миллион опций в том числе сменить пароль и скачать билды
Это ненормально, нужно разграничивать интерфейс, чтобы в каждой вкладке был функционал, относящийся только к ней
В данном случае нужны подвкладки: настройка уведомлений, управление аккаунтом и т.д, а так же отдельная страница с билдером, ему не место в настройках
Цветовая схема админки мне понравилась, прикольно, не бьёт по глазам в ночное время суток, сделано в стиле минимализма
Так же под конец осмотра админки я заметил, что она стоит за обычным DDOS Guard, это меня сильно удивило, я бы не стал доверять безопасность такого проекта белому сервису, находящемуся в РУ
Ладно, админку посмотрели, переходим к билду. Я скачал билд и начал с осмотра в статике
Мы имеем нативный х86 бинарник весом 29 кб, в импорте видны следующие функции:
Как вы уже наверняка поняли, импорт частично скрыт
Далее я решил посмотреть, какие строки содержатся внутри бинарника и к моему удивлению я обнаружил некоторые строки, относящиеся к работе стиллера в открытом виде
Опять же, почему некоторые строки зашифрованы а некоторые нет я не знаю, держать строки в открытом виде в такого рода софте глупо и непрофессионально
Переходим к IDA. Загрузив в неё бинарник, попадаем на точку входа
Как видим, сразу же при запуске стиллер создаёт мьютекс, название которого является статическим и лежит в открытом виде в секции данных
В моём случае, мьютекс имеет вид GUID'a. Если он существует, софт прекращает свою работу
После этого происходит инициализация, дешифруется конфиг и происходят проверки на нахождение в песочнице
Антипесочница в этом стиллере работает немного странно, получается позиция курсора мыши и производится проверка на изменение позиции курсора в бесконечном цикле. Т.е если не двигать мышкой, стиллер будет крутиться в бесконечном цикле
Метод довольно глупый, потому что в любом более менее нормальном песке движения мыши эмулируются. Эта функция вызывается два раза на точке входа, видимо для надежности =)))
Далее происходит инициализация таблицы, содержащей адреса winapi функций, первыми получаются адреса таких функций как SHGetFolderPathW из shell32.dll и FindNextFileW
К слову, об инициализации апи функций. Функции ищутся по хешу, для этого вызывается функция со следующим прототипом:
C:
LPVOID my_get_proc_address(LPCSTR LibName, int Hash)
Вот её вид в дизасме:
Как вы уже заметили, она вызывает GetModuleHandle и LoadLibraryA, что убивает весь смысл затеи с динамическим импортом. Впрочем, можно было ограничиться одним вызовом LoadLibraryA, но видимо автор не читал документацию к этой функции на мсдн
Далее происходит стандартная процедура перечисления функций в таблице экспорта, хеширование с помощью crc32 и возврат адреса функции в случае эквивалентности хешей, при этом не поддерживается обработка переадресcации функций (api forwarding), возможно поэтому некоторые функции, в том числе HeapAlloc, которая уходит в ntdll.RtlAllocateHeap импортируются статически
Далее выделяется память размером в MAX_PATH * 2 байт, адреса выделенной памяти помещаются в 3 глобальные переменные, мы назовём их LocalAppDataPath, DesktopPath и AppdataPath
После того как память была выделена, с помощью SHGetFolderPathW получаются пути к локалаппдате, рабочему столу и аппдате, они сохраняются в раннее выделенной памяти
После того, как пути получены, стиллер инициализирует массив из хендлов, в нём будут храниться хендлы потоков, которые создаются для работы
Всего создаётся 4 потока, 1 поток под сбор c appdata и localappdata, 1 поток под сбор со всех дисков, 1 поток под файлграббер (собирает рабочий стол), 1 поток под создание скриншота рабочего стола
Вызывается функция WaitForMultipleObjects, которая ожидает завершения всех потоков. После того, как потоки завершились, закрываются их хендлы
Тут случился забавный момент, в цикле автор закрывает 3 хендла, а не 4. Т.е 1 хендл остаётся не закрытым
Далее в потоках происходит сбор необходимых файлов, там нет ничего интересного лично для меня, но подмечу следующее
В рекламной теме сказано, что "файловый сканер" работает через системные вызовы, или же проще говоря, сисколлы
Я не понял смысла этой затеи, но раз сказано - проверим: открываем дизасм "файлового сканнера" и видим вот такое:
Это обычный FindNextFileW, инициализацию которого можно увидеть здесь:
CRC32 от FindNextFileW == -2114741223, поэтому всё сходится. Нас надули
Сейчас покажу полный вид этой функции, вы можете подумать, что блоки кода перемешаны control flow flattening'ом, но нет, код не обфусцирован
После того, как все потоки отработали, производится отправка лога
Для отправки используется winsock2, загружается ws2_32.dll, получаются адреса нужных функций и идёт конект на адрес прокладки по порту 2227
В связи с тем что используются сокеты, стиллер не отстучит на машинах, где проброшен прокси. Так же, отстук на нестандартный порт вызовет затриггерит файрвол
Общие впечатления от кода стиллера:
Это ужас. Куча глобальных переменных, результат выполнения функций не проверяется, т.е если какой то кусок кода даст ошибку, стиллер пойдет дальше
Код не разделён на функциональные части, всё в куче, функционал перемешан в функциях, одна функция выполняет кучу задач
Так же в коде зачем то постоянно используются критические секции, вот, например, есть функция выделения памяти и перед тем как вызвать HeapAlloc стиллер постоянно входит в критическую секцию:
С технической частью всё, теперь просто погоняем софт на ВМ и посмотрим, как он работает в деле.
ОС - Win10 х64, антивирус отключен, проверяем только работоспособность
Софт на борту:
- Google Chrome (+ расширение metamask)
- Mozilla Firefox
- Exodus Wallet
- Electrum
Так же на рабочем столе находились несколько текстовых файлов со случайным содержимым, к тесту они никак не относятся
Стиллер отработал с первого раза, но с некоторыми "НО":
1) Exodus'a не было в логе
2) Пароли из Firefox, содержащие русские буквы и иероглифы были заменены вопросительными знаками
3) С рабочего стола были собраны бесполезные .txt файлы, граббер собирает файлы по расширению, в лог часто будет попадать ненужный мусор
4) Файл скриншота в архиве назывался $s.bmp, я так понимаю, $s это какая то метка для админки, которая должна быть заменена на слово, но почему то не заменилась
5) Криво отображается информация о системе в файле Log.txt. В полях System Layout и Keyboard Layouts какие то цифры, хотя должны быть идентификаторы раскладок
Итого:
Посмотрев стиллер, я могу сказать, что продукт сырой. Видимо, автор только учится кодить и при этом пытается заработать на своих клиентах
Очень много детских ошибок, код перегружен, функционал не полностью соответствует описанию
На данный момент я бы не советовал покупать этот стиллер, да, он оправдывает свою цену, но если вы настроены работать серьёзно - поищите другой вариант
Последнее редактирование:
