Как проверить .apk-файл на наличие вредоносных WebView-контролов

Скачали APK не из Google Play — может с торрент-трекера, форума или «друзья посоветовали» — и теперь сомневаетесь, стоит ли ставить? Разбираемся, как на самом деле проверить WebView-компоненты внутри такого файла на подозрительное поведение. Без теории про «WebView — это мощный инструмент в руках злоумышленника», а с конкретными шагами и инструментами.

Почему именно WebView — и почему это важно

WebView в Android-приложении — по сути встроенный мини-браузер. Приложение использует его, чтобы показать веб-контент без открытия Chrome: формы входа, рекламу, страницы оплаты, новостную ленту. В нормальном приложении WebView показывает то, что ему сказал разработчик. В вредоносном — может:

  • подменить форму входа и украсть логин с паролем (фишинг внутри легитимного на вид приложения)
  • загрузить JavaScript, который отправляет SMS на платные номера или подписывает на платные услуги
  • перехватывать вводимые данные — номера карт, коды из push-уведомлений
  • скрытно загружать и запускать дополнительные вредоносные модули

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

Что понадобится для проверки

Никаких специфических навыков не нужно, но минимальный набор инструментов пригодится:

  • APK-файл на компьютере или телефоне
  • APKTool — для декомпиляции APK (бесплатный, открытый исходный код)
  • jadx или Bytecode Viewer — для просмотра Java/Kotlin-кода
  • jar2 dex / dex2jar — если нужно покопаться в DEX-файлах
  • grep или любой поиск по тексту — для быстрого поиска подозрительных строк
  • Желательно — Linux или macOS, но на Windows всё работает через WSL или виртуальную машину

Шаг 1. Распаковываем APK и смотрим структуру

APK — это обычный ZIP-архив. Переименуйте расширение в .zip и распакуйте, или используйте APKTool для полноценной декомпиляции:

  1. apktool d suspicious_app.apk -o output_folder — разбирает APK на составные части: манифест, ресурсы, Smali-код (ассемблер Dalvik), файлы разметки.

  2. В папке output_folder/smali/ или output_folder/smali_classes2/ (если несколько DEX) ищем файлы, связанные с WebView.

  3. Быстрый поиск: grep -r "WebView" output_folder/smali/ --include="*.smali" -l — покажет все smali-файлы, где упоминается WebView.

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

Шаг 2. Ищем подозрительные паттерны в коде WebView

Вот на что обращаем внимание в Smali-коде (и в Java, если декомпилировали через jadx):

JavaScript включён без видимой причины

Ищем: setJavaScriptEnabled(true). Само по себе это нормально — 90% приложений включают JS. Но если приложение, которое по идее просто показывает список товаров, включает JavaScript и при этом загружает контент с внешних сайтов — это повод насторожиться.

addJavascriptInterface — мост между JS и Android

Это самое опасное место. Через addJavascriptInterface вредоносный скрипт внутри WebView получает доступ к методам Android. Ищем:

  • addJavascriptInterface в Smali или Java-коде
  • Какой класс передаётся в этот мост — если это класс с доступом к файловой системе, отправке SMS, доступу к контактам — красный флаг
  • Как называется объект моста в JS (например, Android, NativeBridge, app) — поищите это имя в файлах ресурсов и веб-контенте

Загрузка URL из внешних источников

Проверяем, откуда WebView загружает страницы:

  • loadUrl — загружает конкретный URL
  • loadDataWithBaseURL — загружает HTML-код напрямую, привязывая к базовому URL

Если URL захардкожен в коде — проверьте его через VirusTotal или вручную. Если URL собирается динамически (из SharedPreferences, из ответа сервера, из файла) — это признак того, что зловред может подменить адрес в рантайме.

onReceivedSslError с игнорированием ошибок

Ищем обработчик onReceivedSslError, где вызывается proceed() — это значит, WebView игнорирует ошибки SSL-сертификатов. В сочетании с загрузкой подозрительных URL это почти наверняка плохой знак.

Скрытый WebView

Проверьте, есть ли в приложении WebView, который:

  • имеет размер 0x0 или 1×1 пикселя (невидимый для пользователя)
  • помечен как visibility: gone или invisible
  • загружается без какого-либо визуального контекста (просто висит в фоне)

Невидимый WebView — это не всегда зловред, но чаще всего именно он используется для скрытых операций: загрузки фишинговых страниц, отправки данных, подгрузки эксплойтов.

Шаг 3. Анализируем сетевую активность

Даже если код чистый на вид, вредоносное поведение может проявляться только в рантайме. Поэтому:

  1. Установите приложение на тестовый эмулятор (Android Studio → AVD) или на старый телефон без важных данных.

  2. Настройте прокси — Burp Suite Community (бесплатный) или mitmproxy. Для этого:

    • установите сертификат Burp на эмулятор
    • настройте прокси в Wi-Fi настройках эмулятора
    • включите перехват HTTPS в настройках Burp
  3. Запустите приложение и поользуйтесь им. Смотрите, какие запросы уходят с WebView — особенно на подозрительные домены.

  4. Обратите внимание на: запросы с данными форм (POST), редиректы на сторонние ресурсы, загрузку скриптов с внешних хостов.

Шаг 4. Автоматизированный анализ

Если не хотите ковыряться в коде вручную, есть инструменты, которые ускоряют проверку:

Инструмент Что делает Удобство Где взять
MobSF (Mobile Security Framework) Автоматически декомпилирует APK, ищет подозрительные WebView-конфигурации, проверяет URL, анализирует разрешения, сетевую активность Высокое — веб-интерфейс, отчёты с цветовой маркировкой рисков GitHub (open-source)
APKScan Специализированный сканер для APK, ищет известные паттерны вредоносного кода в WebView-компонентах Среднее — командная строка GitHub (open-source)
Quark-Engine Анализирует вредоносное поведение по комбинации вызовов API, включая эксплуатацию WebView Среднее — нужно понимать контекст оценки GitHub (open-source)
VirusTotal Загрузите APK — получите проверку по 70+ антивирусам. Покажет, если APK уже известен как вредоносный Высокое — просто загрузить virustotal.com

MobSF — пожалуй, лучший старт для большинства ситуаций. Запускается через Docker, загружаете APK — получаете отчёт с разделом «WebView Analysis», где перечислены все найденные WebView, их настройки и загружаемые URL.

Шаг 5. Проверяем загружаемый веб-контент

Если вы нашли URL, которые загружает WebView, проверьте их отдельно:

  • Откройте URL в браузере на отдельной машине (или в виртуалке) и посмотрите исходный код страницы
  • Ищите подозрительные элементы: <script src="https://somewhere-ads.com/...">, скрытые iframe, формы входа без HTTPS
  • Проверьте домен через urlscan.io — покажет, что делает страница, какие запросы отправляет, куда редиректит
  • Если страница загружает контент по частям (AJAX/fetch) — проверьте все конечные точки, к которым обращается скрипт

Частые ошибки при проверке

Ошибка 1: «Проверил через VirusTotal — чисто, значит безопасно».
VirusTotal проверяет сигнатуры известных зловредов. Если APK свежий или собран на заказ — антивирусы его не знают. Нуль детектов ≠ безопасно.

Ошибка 2: «В коде нет WebView, значит всё ок».
WebView может быть загружен динамически из DEX-файла, который подтягивается с сервера после установки. Проверяйте не только основной APK, но и разрешения на интернет и загрузку файлов.

Ошибка 3: «Приложение просит много разрешений, но это нормально для его типа».
Калькулятор, который просит доступ к контактам, SMS и камере — это не нормально. Сверяйте разрешения с реальной функциональностью приложения.

Ошибка 4: «Запустил в эмуляторе, ничего подозрительного не увидел».
Многие зловреды определяют, что они запущены в эмуляторе, и ведут себя прилично. Либо используйте физическое устройство, либо маскируйте эмулятор (меняйте build.prop, устанавливайте Google Play Services).

Что делать в зависимости от вашей ситуации

Ситуация 1: Вы обычный пользователь и просто хотите проверить APK перед установкой

Самый быстрый путь:

  1. Загрузите APK на VirusTotal — посмотрите количество детектов
  2. Проверьте разрешения в самом APK (через aapt dump badging app.apk или через приложение App Inspector на Android)
  3. Если есть подозрительные разрешения (SMS, Accessibility, Overlay) — не ставьте
  4. Если сомневаетесь — загрузите в MobSF (можно запустить локально через Docker) и посмотрите отчёт

Ситуация 2: Вы разработчик и проверяете стороннюю библиотеку/SDK

Вам нужно глубже:

  1. Декомпилируйте APK через jadx, откройте в jadx-gui
  2. Найдите все классы, наследующие WebViewClient или WebChromeClient
  3. Проверьте переопределённые методы: onReceivedSslError, shouldOverrideUrlLoading, onReceivedHttpError
  4. Убедитесь, что setJavaScriptEnabled не включается без необходимости
  5. Проверьте, не используется ли evaluateJavascript с пользовательским вводом — это может быть уязвимость XSS

Ситуация 3: Вы аналитик безопасности и проводите полноценный анализ

Полный цикл:

  1. Статический анализ: MobSF + jadx + ручной просмотр Smali
  2. Динамический анализ: запуск в эмуляторе с Frida для хука WebView-методов
  3. Сетевой анализ: Burp Suite для перехвата трафика WebView
  4. Проверка загружаемых URL через urlscan.io и VirusTotal
  5. Если найден вредоносный контент — документируйте цепочку: APK → WebView → URL → payload

Признаки чистого и грязного WebView

Чтобы быстрее ориентироваться, вот короткая шпаргалка:

Признаки чистого WebView:

  • Загружает контент только с домена разработчика
  • JavaScript включён обоснованно (например, для интерактивных графиков)
  • Нет addJavascriptInterface или мост ведёт к безопасному классу
  • SSL-ошибки не игнорируются
  • WebView виден пользователю и логично вписан в интерфейс

Признаки грязного WebView:

  • Загружает контент с внешних доменов, не связанных с приложением
  • Невидимый WebView или размером в несколько пикселей
  • addJavascriptInterface с доступом к чувствительным API
  • Игнорирование SSL-ошибок
  • Динамическая сборка URL из нескольких источников
  • Загрузка HTML через loadDataWithBaseURL с обфусцированным кодом

Итог

Проверка APK на вредоносные WebView-контролы — это не магия, а последовательный анализ. Начните с загрузки в VirusTotal и MobSF для быстрого первичного анализа. Если нашли подозрительные паттерны — декомпилируйте через jadx и проверьте ключевые точки: addJavascriptInterface, onReceivedSslError, динамические URL, невидимые WebView. Для полной уверенности — запустите в тестовой среде с перехватом сетевого трафика.

Главное правило: если APK скачан не из официального магазина и при этом содержит WebView с подозрительными настройками — не ставьте его на основной телефон. Лучше потратить 20 минут на проверку, чем потом восстанавливать аккаунты и чистить устройство.

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