Скачали APK не из Google Play — может с торрент-трекера, форума или «друзья посоветовали» — и теперь сомневаетесь, стоит ли ставить? Разбираемся, как на самом деле проверить WebView-компоненты внутри такого файла на подозрительное поведение. Без теории про «WebView — это мощный инструмент в руках злоумышленника», а с конкретными шагами и инструментами.
- Почему именно WebView — и почему это важно
- Что понадобится для проверки
- Шаг 1. Распаковываем APK и смотрим структуру
- Шаг 2. Ищем подозрительные паттерны в коде WebView
- JavaScript включён без видимой причины
- addJavascriptInterface — мост между JS и Android
- Загрузка URL из внешних источников
- onReceivedSslError с игнорированием ошибок
- Скрытый WebView
- Шаг 3. Анализируем сетевую активность
- Шаг 4. Автоматизированный анализ
- Шаг 5. Проверяем загружаемый веб-контент
- Частые ошибки при проверке
- Что делать в зависимости от вашей ситуации
- Ситуация 1: Вы обычный пользователь и просто хотите проверить APK перед установкой
- Ситуация 2: Вы разработчик и проверяете стороннюю библиотеку/SDK
- Ситуация 3: Вы аналитик безопасности и проводите полноценный анализ
- Признаки чистого и грязного 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 для полноценной декомпиляции:
-
apktool d suspicious_app.apk -o output_folder— разбирает APK на составные части: манифест, ресурсы, Smali-код (ассемблер Dalvik), файлы разметки. -
В папке
output_folder/smali/илиoutput_folder/smali_classes2/(если несколько DEX) ищем файлы, связанные с WebView. -
Быстрый поиск:
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— загружает конкретный URLloadDataWithBaseURL— загружает HTML-код напрямую, привязывая к базовому URL
Если URL захардкожен в коде — проверьте его через VirusTotal или вручную. Если URL собирается динамически (из SharedPreferences, из ответа сервера, из файла) — это признак того, что зловред может подменить адрес в рантайме.
onReceivedSslError с игнорированием ошибок
Ищем обработчик onReceivedSslError, где вызывается proceed() — это значит, WebView игнорирует ошибки SSL-сертификатов. В сочетании с загрузкой подозрительных URL это почти наверняка плохой знак.
Скрытый WebView
Проверьте, есть ли в приложении WebView, который:
- имеет размер 0x0 или 1×1 пикселя (невидимый для пользователя)
- помечен как
visibility: goneилиinvisible - загружается без какого-либо визуального контекста (просто висит в фоне)
Невидимый WebView — это не всегда зловред, но чаще всего именно он используется для скрытых операций: загрузки фишинговых страниц, отправки данных, подгрузки эксплойтов.
Шаг 3. Анализируем сетевую активность
Даже если код чистый на вид, вредоносное поведение может проявляться только в рантайме. Поэтому:
-
Установите приложение на тестовый эмулятор (Android Studio → AVD) или на старый телефон без важных данных.
-
Настройте прокси — Burp Suite Community (бесплатный) или mitmproxy. Для этого:
- установите сертификат Burp на эмулятор
- настройте прокси в Wi-Fi настройках эмулятора
- включите перехват HTTPS в настройках Burp
-
Запустите приложение и поользуйтесь им. Смотрите, какие запросы уходят с WebView — особенно на подозрительные домены.
-
Обратите внимание на: запросы с данными форм (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 перед установкой
Самый быстрый путь:
- Загрузите APK на VirusTotal — посмотрите количество детектов
- Проверьте разрешения в самом APK (через
aapt dump badging app.apkили через приложение App Inspector на Android) - Если есть подозрительные разрешения (SMS, Accessibility, Overlay) — не ставьте
- Если сомневаетесь — загрузите в MobSF (можно запустить локально через Docker) и посмотрите отчёт
Ситуация 2: Вы разработчик и проверяете стороннюю библиотеку/SDK
Вам нужно глубже:
- Декомпилируйте APK через jadx, откройте в jadx-gui
- Найдите все классы, наследующие WebViewClient или WebChromeClient
- Проверьте переопределённые методы:
onReceivedSslError,shouldOverrideUrlLoading,onReceivedHttpError - Убедитесь, что
setJavaScriptEnabledне включается без необходимости - Проверьте, не используется ли
evaluateJavascriptс пользовательским вводом — это может быть уязвимость XSS
Ситуация 3: Вы аналитик безопасности и проводите полноценный анализ
Полный цикл:
- Статический анализ: MobSF + jadx + ручной просмотр Smali
- Динамический анализ: запуск в эмуляторе с Frida для хука WebView-методов
- Сетевой анализ: Burp Suite для перехвата трафика WebView
- Проверка загружаемых URL через urlscan.io и VirusTotal
- Если найден вредоносный контент — документируйте цепочку: 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 минут на проверку, чем потом восстанавливать аккаунты и чистить устройство.
