December 19, 2018

Анализ стиллера Immortal

Писал не я, так что статья четко спизжена 😂

Введение

NoFile - это стиллер, написанный на языке C# кодером 1ms0rry, ему уже не один год, но даже в 2018 можно найти яркий пример использования его исходников. Таковым "ремейком" является стиллер от Zet5D под названием Immortal 2.7.5.

Тема продажник: https://lolzteam.net/threads/626111/

Последние обновление этого стиллера было 27 октября:

Мне повезло достать семпл последней версии:

Анализ

Прежде всего, сканируем файлик через DiE 2.0:

Удивительно, что в графе compiler мы видим C\C++, однако в графе protector написано, что использовался .NET Reactor(4.5-4.7). Тому виной специальная функция протектора NET Reactor. Так же подвох заключается в том что, использовался NET Reactor 5.0.0.0, а DiE показывает другую версию.

Деобфускация (de4dot в помощь) много времени не занимает...

Полученный .NET (4.0!!!) файл декомпилировать можно через dnSpy:

Исходный код

Для удобства чтения я переназвал все методы и поля. Идти стоит по порядку, открываем точку входа:

Тут все просто:

Переменные windows_username, version - тут все понятно. А в переменную hwid записывается значение guid машины:

Далее вызывается единственный метод, в нем же и находятся все основные функции этого стиллера:

Я немного удивился: "В релиз версии, дебаг код?" - да. Но что более странно - так это то, что каждый этот метод обернут в try\catch еще и внутри.

В начале статьи, я вспомнил про такой стиллер NoFile и сделал это не с проста, дело в том, что 80% написанного кода является списанным с того самого проекта от 1msorry.

На моей памяти NoFile - это первый стиллер, который использует вместо Sqlite собственное решение, даже не смотря на то, что код этого модуля, написанный 1msorry, родом из другой малвари. Думаю, об этом не сложно догадаться, просто взглянув на названия переменных и функций, читать это сложновато, и сам факт работы этого модуля удивляет. Основывается он на хитром обходе sqlite базы данных, для примера:

Это строка (34) из того самого стиллера -

this.ReadMasterTable(100L);

Статья на habr -

Теперь вернемся к исходникам Immortal:

И обратимся к тому самому SqlHandler:

Если продолжать смотреть код, то там сходство 100%. Да и более того, я хорошо изучил SqlHandler и могу смело сказать, что там как минимум 3 серьезных бага, которые могут сильно нарушить работоспособность программы.

Вот мы и подошли к методу получения паролей:

Учитывая, то, что все пути до дефолтных учеток хранятся в полу константном массиве:

А теперь последнее, охуеть какое совпадение, снова откроем GitHub 1ms0rry:

А теперь в dnSpy:

Итог

Думаю понятно, что стиллер полностью является ремейком старого стиллера, который сейчас можно редко где встретить.

Исходный код проекта: https://github.com/Alexuiop1337/Immortal2.0-by-Zet5D