• На проекте открылась регистрация только для продавцов. Для обычных пользователей будет открыта позже. Подробнее.
    P.S. Не надо скидывать ссылки на форумы, где у вас ноль сообщений. Подобные заявки будут отклонятся.

Cracking Реверс-инжениринг Java-трояна

ddd

(•̪̀●́)=o/̵͇̿̿/'̿̿ ̿ ̿̿
Команда форума
WebOwner
WebVoice
Подобным страдал сам, но статью писать было лень, и вот сегодня на хабрее увидел подобное.
Афтор статьи: den_lesnov

torjan-virus_U9P9g_25552.jpg


День начинался как обычно. Некоторое время я пытался листать конспекты, но скукой от них веяло самым жесточайшим образом. И тут внезапно случилось чудо. Самое настоящее чудо. У меня запищал мобильник, сообщая о том, что мне пришла SMSка.

Я схватил мобильник и стал читать эту SMSку. А в ней такой вот текст:
Код:
Postupil MMS podarok ot «Katya» dlya abonenta +7903*******. Posmotret: [U]loadsms.ru/606.jar[/U]

Звёздочками я тут прикрыл свой номер.
Ясное дело, развод. Но блин, руки-то чешутся, зверушка явно написана на моей любимой Джаве, и мне жутко хочется её расковырять.

Открываю браузер, иду по указанной ссылке. Антивирь поднимает визг и не даёт скачаться файлику.

Тут я вспомнил о замечательной качалке файлов на никсах, с которой познакомился в то время, когда пользовался Убунтой. Называется wget и имеет версии под все популярные ОСи. Гуглю, качаю: http://users.ugent.be/~bpuype/wget/

Скачиваю ей 606.jar (антивирь молчит в тряпочку), распаковываю его ZIPом и чешу репу: самое интересное находится в подкаталоге mms и называется Poster.class. Файлы .class есть скомпилированные Java-программы. Просто текстовым редактором их не открыть. Ну, то есть, можно открыть, но человекопонятного текста увидеть при этом не удастся. А мне же хочется...

Но, к счастью, Java обладает одним замечательным механизмом: Reflection (отражение), которые позволяет определять для скомпилированных классов их структуру, имена и сигнатуры методов, и кучу другой полезной информации. На основе этой технологии работает декомпилятор http://java.decompiler.free.fr/, позволяющий провести реверс-инжениринг скомпилированной программы легко и непринуждённо. Чем я и занялся, едва успев его скачать и установить.
UPD: В комментариях подсказали, что Reflection API тут не при делах, а работает эта кухня через Byte code decompilation.

jdec.jpg


Открываю декомпилером файл mms/Poster.class и вижу всё, что нужно: восстановленный исходный код класса.
Самое первое, что я заметил: программа является Java MIDLet’ом, то есть Java-приложением, предназначенным для работы на различных устройствах со сравнительно слабыми техническими характеристиками, такими, как мобильные телефоны. Что вполне ожидаемо для телефонных разводов-то!Работа такого приложения начинается с вызова метода run(). Вот он:

run.jpg


В глаза бросается первая строка тела метода:

if (sendSms())

Судя по имени вызываемого метода, программа куда-то пытается отправить SMS. Смотрю на метод sendSms():

sendsms.jpg


Первым делом тут проверяется, было ли уже отправлено SMS (в методе isRecordstoreExists(), куда я одним глазком заглянул по пути). Если уже было, то больше не отправляем (и на том спасибо).

Далее открывается файл 1.gif, причём как текстовый. Ну и ладно, я с самого начала не верил, что это картинка. Кстати, раз пошла такая пьянка, я его и сам решил открыть своим любимым текстовым редактором Notepad++ (http://notepad-plus-plus.org/). И вот что я в нём увидел:

Код:
[3116:9652516212 200][8464:1]
Не знаю кому как, а мне не очень очевидно, что сиё означает. Поэтому читаю дальше код метода sendSms().

Ниже по течению метод определяет позиции символов «[», «:» и «]» в тексте и выделяет части строк между ними с помощью метода substring.

Следующие несколько строк создают SMS через специальный API и отправляют его. Теперь становятся понятными значения цифр в файле:
«3116» это номер, на который идёт SMS, «9652516212 200» — текст сообщения. Во вторых скобках всё то же самое: «8464» — номер, «1» — текст.

Внимательный читатель тут же спросит: «Неужели две SMSки?». Да, две. Вообще, их может быть сколько угодно — столько, сколько записей вида [number:text] будет найдено в файле. Ибо процедура чтения и отправки выполняется в цикле до тех пор, пока не будет прочитан весь файл до конца.

Тут мне стало интересно, что же означает текст сообщения «9652516212 200», и я обратился с этим вопросом к гуглу. Гугл мне ответил, что:
  1. Номер 3116 принадлежит билайновскому сервису «МОБИ.Деньги».
  2. Формат сообщения «9652516212 200» соответствует просьбе перевести 200 рублей с моего счёта на номер 965-251-6212.
Аналогично я поступил и с 8464.

Вот так тайна и перестала быть тайной. Грубый, брутальный развод обернулся для меня почти часом любопытнейших изысканий.
 
Сверху