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

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

Тема в разделе "H4X S0FTW4RE", создана пользователем ddd, 19 янв 2011.

  1. ddd (•̪̀●́)=o/̵͇̿̿/'̿̿ ̿ ̿̿

    ddd
    TS
    Команда форума WebOwner WebVoice
    Регистрация:
    5 мар 2007
    Сообщения:
    2.899
    Симпатии:
    191
    ICQ:
    943084
    Подобным страдал сам, но статью писать было лень, и вот сегодня на хабрее увидел подобное.
    Афтор статьи: den_lesnov

    [​IMG]

    День начинался как обычно. Некоторое время я пытался листать конспекты, но скукой от них веяло самым жесточайшим образом. И тут внезапно случилось чудо. Самое настоящее чудо. У меня запищал мобильник, сообщая о том, что мне пришла 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.

    [​IMG]

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

    [​IMG]

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

    if (sendSms())

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

    [​IMG]

    Первым делом тут проверяется, было ли уже отправлено 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.

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