Как проанализировать подозрительный APK в онлайн-декомпиляторе

Вы скачали APK неизвестно откуда — может, друг прислал, может, нашли на каком-то форуме «взломанную» программу, а может, просто хотите проверить приложение перед установкой. Установить на телефон страшно, а выкинуть жалко. Есть способ: загрузить APK в онлайн-декомпилятор и посмотреть, что внутри, не заражая своё устройство.

Ниже — пошагово, как это сделать, на что смотреть и какие сервисы реально работают.

Зачем вообще декомпилять APK

APK — это архив, в котором упакован код приложения, ресурсы, манифест и много чего ещё. Декомпилятор распаковывает этот архив и показывает содержимое в читаемом виде. Вы не получите исходный код в том виде, в каком его писал разработчик, но увидите:

  • манифест приложения — какие разрешения оно запрашивает;
  • ресурсы — строки, картинки, макеты;
  • код — в виде Java или Smali (промежуточное представление байт-кода);
  • библиотеки и зависимости;
  • сертификат и подпись.

Этого достаточно, чтобы понять, делает ли приложение что-то подозрительное: шлёт ли данные на чужие серверы, имеет ли доступ к SMS, какие рекламные SDK тянет за собой.

Какие онлайн-декомпиляторы реально работают

Я перепробовал несколько сервисов. Вот те, которые стабильно открывают APK и выдают нормальный результат:

Сервис Что показывает Ограничения Когда удобен
javadecompilers.com Java-код (несколько декомпиляторов на выбор), ресурсы, манифест Файл до 10 МБ, очередь при загрузке Нужен именно Java-код, а не Smali
apkdecompilers.com Java + Smali, ресурсы, манифест До 50 МБ, иногда медленно Универсальный вариант, если файл не огромный
decompiler.com Java-код, ресурсы, манифест До 50 МБ, базовый бесплатный функционал Быстрая загрузка без регистрации
www.decompiler.com/apk Java, Smali, ресурсы Лимит по размеру, интерфейс попроще Если нужен Smali, а не только Java

Все они бесплатны для базового использования. Если APK весит больше 50 МБ — бесплатные сервисы часто отказываются или режут функционал. В таком случае проще поставить локальные инструменты (Apktool, jadx), но это уже другая история.

Пошаговый процесс анализа

Шаг 1. Загрузите APK в декомпилятор

Откройте сайт, нажмите «Upload» или «Choose file», выберите APK. Загрузка занимает от 10 секунд до пары минут — зависит от размера файла и загрузки сервера. После загрузки сервис автоматически начнёт разбор. Иногда нужно выбрать движок декомпилятора (CFR, Procyon, Fernflower) — если есть выбор, ставьте CFR, он стабильнее всего работает с современным Android-кодом.

Шаг 2. Откройте манифест

Первое, на что смотрим — AndroidManifest.xml. Именно здесь прописаны разрешения. Ищите такие строки:

  • android.permission.SEND_SMS — приложение может отправлять SMS без вашего ведома;
  • android.permission.READ_CONTACTS — доступ к контактам;
  • android.permission.ACCESS_FINE_LOCATION — точное местоположение;
  • android.permission.RECORD_AUDIO — микрофон;
  • android.permission.CAMERA — камера;
  • android.permission.READ_SMS — чтение входящих сообщений.

Если простое приложение-фонарик запрашивает доступ к SMS, контактам и геолокации — это повод насторожиться. Нормальные приложения запрашивают только то, что нужно для работы.

Шаг 3. Проверьте список активностей и сервисов

В том же манифесте посмотрите блоки <activity>, <service> и <receiver>. Обратите внимание на:

  • подозрительные имена — например, названия из набора случайных букв или имена, имитирующие системные компоненты;
  • сервисы, которые запускаются автоматически при загрузке устройства (BOOT_COMPLETED);
  • широковещательные приёмники (receivers), которые слушают системные события — это часто используют для скрытого запуска кода.

Шаг 4. Изучите код

После декомпиляции вы получите структуру папок с Java-файлами (или Smali). Не пытайтесь прочитать всё — это тысячи строк. Вместо этого ищите ключевые слова:

  • http, https, URL, URLConnection, OkHttp — сетевые запросы;
  • SmsManager, sendTextMessage — отправка SMS;
  • Runtime.exec, ProcessBuilder — выполнение системных команд;
  • SharedPreferences, SQLiteDatabase — работа с данными;
  • Base64, AES, encrypt — шифрование (может быть как легитимным, так и признаком скрытия данных);
  • WebView — встроенный браузер, через который могут показывать фишинговые страницы.

Особое внимание — на сетевые запросы. Если видите, что приложение отправляет IMEI, номер телефона, список установленных приложений или контакты на внешний сервер — это плохо. Посмотрите, на какой именно адрес идёт отправка. Незнакомые домены с набором букв — тревожный знак.

Шаг 5. Проверьте сертификат

В папке META-INF лежат файлы подписи: CERT.RSA, CERT.SF, MANIFEST.MF. Откройте CERT.RSA через любой инструмент просмотра сертификатов (или просто дважды кликните, если на компьютере есть Java). Посмотрите:

  • кто издатель (CN — Common Name);
  • срок действия сертификата;
  • используется ли самоподписанный сертификат (self-signed) — это нормально для инди-разработчиков, но подозрительно для приложения, которое выдаёт себя за банк.

Если приложение подписано сертификатом, который ранее использовался в известном вредоносном ПО — это можно проверить через VirusTotal по SHA-256 хешу сертификата.

Что искать: красные флаги

Вот конкретные признаки того, что APK лучше не ставить:

  • запрашивает разрешения, не связанные с функционалом (калькулеру не нужен доступ к SMS);
  • отправляет данные на внешние серверы без явной на то причины;
  • содержит обфусцированный код (имена классов вида a.b.c, d.e.f — это не всегда злонамеренно, но в сочетании с другими признаками настораживает);
  • использует рефлексию для вызова скрытых API (Class.forName, Method.invoke);
  • содержит встроенные рекламные SDK с агрессивным сбором данных (некоторые рекламные сети соберут больше, чем нужно);
  • при установке просит отключить Google Play Protect или разрешить установку из неизвестных источников — это почти гарантированно вредоносное поведение.

Частые ошибки при анализе

Ошибка 1: Считать, что декомпиляция даст полную картину. Декомпилятор показывает статический код. Он не увидит код, который подгружается из интернета во время работы (dynamic code loading), и не покажет, что приложение делает в реальном времени. Для полного анализа нужен динамический анализ — запуск в песочнице с перехватом сетевого трафика.

Ошибка 2: Загружать APK на подозрительные сайты. Если вы нашли декомпилятор на каком-то малоизвестном ресурсе с кучей рекламы — есть риск, что сам сервис сохранит ваш APK и использует его. Известные сервисы (из таблицы выше) заявляют, что удаляют файлы через несколько часов. Но сто раз подумайте, прежде чем загружать туда APK коммерческого приложения — это может нарушать чужие права.

Ошибка 3: Игнорировать Smali, если Java-код выглядит чисто. Злоумышленники могут спрятать вредоносную логику именно на уровне Smali, а декомпилятор в Java её не восстановит корректно. Если видите в Java-коде вызовы через рефлюксию или странные конструкции — смотрите Smali для этих классов.

Ошибка 4: Полагаться только на один сервис. Разные декомпиляторы по-разному восстанавливают код. Если один выдал кашу — попробуйте другой. CFR может восстановить то, что не смог Procyon, и наоборот.

Что выбрать в зависимости от вашей ситуации

Ситуация 1: Быстрая проверка перед установкой. Загрузите APK на javadecompilers.com, откройте манифест, проверьте разрешения. Если всё логично — можно ставить. Если что-то странное — не ставьте.

Ситуация 2: Нужно понять, что приложение делает с данными. Загрузите на apkdecompilers.com, ищите сетевые вызовы в Java-коде. Проверьте, какие данные отправляются и куда. Используйте поиск по ключевым словам из списка выше.

Ситуация 3: Подозрение на вредоносное ПО. Одного онлайн-декомпилятора недостаточно. Загрузите APK на VirusTotal — там его проверят десятками антивирусов. Параллельно посмотрите хеш файла в базах вредоносного ПО. Если антивирусы ругаются — удаляйте файл.

Ситуация 4: APK весит больше 50 МБ. Бесплатные онлайн-сервисы скорее всего не примут. Установите jadx (бесплатный, с графическим интерфейсом) или Apktool — они работают локально и без ограничений по размеру.

Практические рекомендации

  1. Всегда проверяйте разрешения в манифесте первым делом. Это занимает минуту и сразу показывает, не просит ли приложение лишнего.
  2. Ищите сетевые запросы и проверяйте адреса. Откройте URL в браузере или проверьте через VirusTotal — если домен числится в чёрных списках, дело пахнет.
  3. Сверяйте имя пакета с оригиналом. Если приложение называется «WhatsApp», а имя пакета com.whatsapp.free.messenger — это не WhatsApp.
  4. Проверяйте сертификат. Если приложение выдаёт себя за известный сервис, а сертификат самоподписанный или выдан неизвестному лицу — это подделка.
  5. Не забывайте про VirusTotal. Загрузите APK туда параллельно с декомпиляцией. Даже если код выглядит чисто, антивирус может знать об этом файле больше вас.
  6. Сохраняйте результаты. Если нашли что-подозрительное — сохраните скриншоты и фрагменты кода. Это пригодится, если захотите сообщить о вредоносном приложении.

Итог

Онлайн-декомпилятор — это быстрый и простой способ заглянуть внутрь APK без установки на устройство. Загрузите файл, проверьте манифест (разрешения, компоненты), изучите код на предмет сетевых запросов и подозрительных вызовов, сверьте сертификат. Если что-то выглядит странным — не ставьте приложение.

Для быстрой проверки используйте javadecompilers.com. Если нужен Smali или файл побольше — apkdecompilers.com. Для серьёзного анализа подозрительных файлов дополните декомпиляцию проверкой через VirusTotal и, при необходимости, локальными инструментами вроде jadx.

Главное правило: если приложение запрашивает больше, чем ему нужно для работы — это не баг, а дизайн. И такой дизайн не стоит вашего доверия.

Оцените статью
PEFile — Безопасность и технологии простым языком