Skip to content
KitploitKITPLOIT
ИнструментыБлог
Отправить
ИнструментыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

··Ленты·Контакты·Конфиденциальность·© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
apk-interceptor — Помощник для оценки Android deeplink, Intent и WebView bridge для этичного взлома | Kitploit
Инструменты/GitHubGitHub/sterrasec/apk-interceptor
Безопасность AndroidАнализ уязвимостейПентестинг мобильных приложенийЭксплуатация веб-приложенийСбор информацииТестирование на Проникновение
GitHubsterrasec/apk-interceptor

apk-interceptor

Помощник для оценки Android deeplink, Intent и WebView bridge для этичного взлома

Репозиторий
9152 месяцев назадЕщё не проверено

Популярное

Смотреть все →

Откройте для себя самые используемые инструменты нашего сообщества.

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
Поделиться

apk-interceptor

Build Check

Помощник для оценки Android deeplink, Intent и WebView bridge

apk-interceptor — это портативный APK для тестирования Android в рамках авторизованных оценок безопасности приложений. Он помогает инженерам по безопасности проверить, как Android-приложение обрабатывает внешние точки входа, такие как пользовательские схемы URI, deeplink, экспортированные Activity и WebView JavaScript bridge.

Инструмент намеренно ограничен:

  • Он не использует разрешение android.permission.INTERNET
  • Он не отправляет данные на внешние серверы
  • Он не выполняет команды оболочки
  • Он не требует root, Magisk, Frida или инструментов времени выполнения
  • Он предоставляет только один локальный файл полезной нагрузки content://
  • Он регистрирует одну пользовательскую схему URI, фиксированную во время сборки

Мотивация

Во время оценки безопасности Android-приложений многие находки статического анализа всё ещё требуют небольшого Proof of Concept на устройстве, прежде чем они могут быть подтверждены: регистрация пользовательской схемы URI, отправка явного Intent, предоставление локальной полезной нагрузки content:// или проверка, может ли JavaScript достичь WebView bridge.

Создание нового одноразового тестового приложения для каждого случая повторяемо и чревато ошибками. Небольшие различия в записях манифеста, authority, предоставлении URI, именах пакетов или построении Intent могут замедлить проверку и сделать результаты менее воспроизводимыми.

apk-interceptor был создан, чтобы сделать этот шаг подтверждения повторяемым. Вместо написания нового PoC APK для каждой оценки вы собираете этот инструмент с нужной авторизованной схемой или идентификатором приложения, запускаете тест на устройстве и сохраняете рабочий процесс ограниченным по проекту: без разрешения INTERNET, без передачи данных вовне, без выполнения команд оболочки и без зависимости от root.

Что можно протестировать

apk-interceptor полезен для следующих задач оценки:

Подробные разборы уязвимостей:

  • Custom URI Scheme Hijacking
  • Deeplink Open Redirect
  • Exported Activity With Untrusted Intent Data
  • WebView JavaScript Bridge Exposure Via content://

Приложение ведет журнал оценки в памяти для отправленных Intent, полученных deeplink, обратных вызовов bridge, результатов JavaScript и ошибок. Журналы исчезают, когда процесс приложения убит. Поскольку журналы не сохраняются, фиксируйте доказательства с помощью скриншотов или записи экрана во время работы.

Сравнение

apk-interceptor — это инструмент подтверждения, а не фреймворк для обнаружения или эксплуатации. Он предполагает, что вы уже знаете, что тестировать (схема, класс Activity, имя bridge) из статического анализа, и предоставляет безопасный способ на устройстве проверить достижимость и зафиксировать доказательства. Он создан для установки на устройство оценки и даже для передачи клиенту, поэтому не требует разрешения INTERNET, выполнения команд оболочки, эксфильтрации данных и root.

Где он находится рядом с обычными инструментами Android:

Две области, в которых apk-interceptor имеет наиболее явное преимущество перед альтернативами:

  • Доказательства перехвата схемы: выступает в роли второго приложения, которое фактически регистрирует схему, и регистрирует каждый полученный параметр, что adb/статический анализ не могут показать.
  • Проверка content:// → WebView bridge: неэкспортированный однофайловый провайдер, нагрузка которого доставляется только через временное разрешение Intent на чтение, плюс локальный тестовый WebView для предварительной проверки синтаксиса нагрузки.

Отправка против перехвата

apk-interceptor по-разному относится к отправке и перехвату, и это самое важное, что нужно понять перед использованием:

ДействиеМодульНужна ли пользовательская схема во время сборки?
Отправить Intent или deeplink в другое приложениеSenderНет, можно ввести любой URI, пакет или Activity во время выполнения
Перехватить (получить) deeplink для пользовательской схемыInterceptorДа, схема фиксируется в APK во время сборки

Чтобы отправить подготовленный deeplink в оцениваемое приложение, пересобирать не нужно: используйте режим Implicit Deeplink на вкладке Sender и введите любой URI.

Чтобы перехватить deeplink, то есть заставить Android направить пользовательскую схему на apk-interceptor, чтобы вы могли наблюдать возможный перехват схемы, вы должны собрать APK с этой схемой через --scheme. Схема фиксируется во время сборки намеренно (проектное ограничение); apk-interceptor никогда не регистрирует произвольные схемы во время выполнения. Если вы меняете оцениваемую схему, пересоберите и переустановите.

Требования

  • Android Studio с Android SDK 35
  • Устройство или эмулятор с Android 12+
  • JDK 17+
  • adb для установки на устройство и дополнительного тестирования из командной строки

Сборка и установка

Соберите APK с пользовательской схемой URI, которую вы авторизованы оценивать:

root@kitploit:~
./build-interceptor.sh --scheme <authorized_custom_scheme>
adb install ./out/apk-interceptor-<authorized_custom_scheme>-debug.apk

Необязательные флаги сборки:

root@kitploit:~
./build-interceptor.sh \
  --scheme <authorized_custom_scheme> \
  --app-id <custom.application.id> \
  --output ./out

--app-id устанавливает идентификатор установленного приложения (идентификатор пакета на устройстве и authority content://<applicationId>.payload) во время сборки. По умолчанию — com.sterrasec.apkinterceptor. Переопределите с помощью --app-id, когда вам нужно несколько отдельных устанавливаемых сборок для разных оценок. Эквивалент для Windows — build-interceptor.bat.

Схема по умолчанию intercept-poc-example — безвредный заполнитель. Скрипт сборки отказывается создавать оценочный APK с этой схемой по умолчанию.

Первый запуск

При первом запуске каждой версии приложения apk-interceptor показывает диалог авторизованного использования. После нажатия I understand та же версия больше не показывает диалог. На вкладке Sender по-прежнему отображается постоянное предупреждение, так как она может отправлять Intent другим приложениям.

Диалог авторизованного использования

Скриншоты

SenderPayloadInterceptor
Вкладка SenderВкладка PayloadВкладка Interceptor

Модули приложения

Interceptor

Используйте эту вкладку для проверки перехвата пользовательской схемы URI.

Что она показывает:

  • Схему, скомпилированную в этот APK
  • Предупреждение, если всё ещё используется фиктивная схема по умолчанию
  • Журнал полученных deeplink
  • Поле для тестового параметра запроса
  • Send Test Deeplink
  • Clear

Базовый рабочий процесс:

  1. Соберите APK с оцениваемой пользовательской схемой.
  2. Установите его рядом с оцениваемым приложением.
  3. Запустите deeplink для этой схемы из оцениваемого потока, браузера, adb или встроенной кнопки Send Test Deeplink.
  4. Если Android направляет ссылку в apk-interceptor, откройте вкладку Interceptor и просмотрите полученный URI и параметры запроса.

О Send Test Deeplink: он всегда отправляет <scheme>://test?<your params> с фиксированным хостом test, поэтому предназначен для подтверждения того, что apk-interceptor получает и регистрирует схему, а не для управления конкретными маршрутами deeplink оцениваемого приложения. Чтобы отправить подготовленный deeplink, соответствующий требуемому хосту или пути оцениваемого приложения, используйте вместо этого режим Implicit Deeplink на вкладке Sender.

Пример через adb:

root@kitploit:~
adb shell am start -W \
  -a android.intent.action.VIEW \
  -d 'my-authorized-scheme://test?source=adb\&message=hello%20world'

Используйте \& при отправке нескольких параметров запроса через adb shell; в противном случае оболочка устройства может интерпретировать & как разделитель команд.

Ожидаемый результат:

  • apk-interceptor открывается на вкладке Interceptor
  • Появляется запись лога RECEIVED
  • Нажатие на запись лога разворачивает полный URI и список параметров

Sender

Используйте эту вкладку для отправки контролируемых Intent во время авторизованного теста.

Режимы:

  • Implicit Deeplink: отправляет Intent(ACTION_VIEW, Uri.parse(uri))
  • Explicit Activity: отправляет Intent в конкретный пакет и класс Activity

Поля и элементы управления:

  • URI для режима неявного deeplink
  • Package name для режима явной Activity
  • Activity class для режима явной Activity
  • Attach content:// URI для установки URI локальной полезной нагрузки в качестве данных Intent (показывается только в режиме Explicit Activity; см. примечание ниже)
  • FLAG_GRANT_READ_URI_PERMISSION для предоставления доступа на чтение прикреплённой полезной нагрузки URI
  • Send Intent

Рабочий процесс с неявным deeplink:

  1. Выберите Implicit Deeplink.
  2. Введите URI, соответствующий шаблону deeplink оцениваемого приложения.
  3. Нажмите Send Intent.
  4. Наблюдайте поведение оцениваемого приложения и журнал apk-interceptor.

Рабочий процесс с явной Activity:

  1. Убедитесь, что целевая Activity экспортирована и покрывается вашей авторизацией.
  2. Выберите Explicit Activity.
  3. Введите имя пакета оцениваемого приложения.
  4. Введите имя класса экспортированной Activity.
  5. При необходимости включите Attach content:// URI.
  6. Нажмите Send Intent.

Примечания:

  • apk-interceptor не знает, обработало ли оцениваемое приложение Intent безопасно. Вы должны наблюдать поведение оцениваемого приложения, его логи или тестовую среду.
  • Прикрепление content:// полезно при проверке, передаёт ли целевая Activity непроверенные данные Intent в WebView.
  • Attach content:// URI предлагается только в режиме Explicit Activity. Полезная нагрузка доставляется как data Intent, что перезапишет URI, который вы вводите в режиме Implicit Deeplink, поэтому опция там скрыта.
  • PayloadProvider не экспортирован. Оцениваемое приложение может прочитать прикреплённый content:// полезной нагрузки только потому, что Intent предоставляет ему временное разрешение на чтение через FLAG_GRANT_READ_URI_PERMISSION. Оставьте этот флаг включённым и доставляйте URI через Intent. URI content://, открытый любым другим способом, не будет читаться другим приложением.

Payload

Используйте эту вкладку для создания локальной HTML-нагрузки и проверки синтаксиса JavaScript bridge в собственном тестовом WebView apk-interceptor.

Что она содержит:

  • Редактор HTML
  • Редактор JavaScript, выполняемый после загрузки страницы
  • Bridge object name
  • Сгенерированный URI content://
  • Save Payload
  • Run Self-Test
  • Тестовый WebView
  • Результаты bridge и журналы консоли

Формат сгенерированного URI нагрузки:

root@kitploit:~
content://<applicationId>.payload/current.html

Провайдер обслуживает только этот фиксированный файл:

root@kitploit:~
filesDir/payloads/current.html

Рабочий процесс самопроверки нагрузки:

  1. Введите или вставьте HTML в поле HTML.
  2. Введите имя объекта bridge, которое вы хотите протестировать локально, например localBridge.
  3. Добавьте JavaScript либо внутри HTML, либо в редакторе JavaScript.
  4. Нажмите Save Payload.
  5. Нажмите Run Self-Test.
  6. Просмотрите записи BRIDGE_RESULT, console.log и evaluateJavascript result в журнале.

Пример JavaScript для самопроверки:

root@kitploit:~
console.log("payload loaded");
window.localBridge.logResult(window.localBridge.getInfo());

Тестовый bridge предоставляет:

root@kitploit:~
window.<bridgeName>.logResult("message");
window.<bridgeName>.getInfo();

Важное ограничение:

Тестовый WebView подтверждает, что ваша локальная нагрузка и синтаксис вызова bridge работают внутри apk-interceptor. Он не может наблюдать, выполнил ли WebView другого приложения вашу нагрузку или вызвал собственный bridge. Для оцениваемого приложения проверяйте через его UI, логи, тестовые перехватчики или Chrome DevTools, если приложение отлаживаемо.

Уязвимостно-ориентированные рабочие процессы

1. Перехват пользовательской схемы URI

Риск:

Android-приложение регистрирует пользовательскую схему URI вместо проверенной App Link. Любое другое приложение может зарегистрировать ту же самую схему, поэтому Android может показать выбор приложений или направить ссылки в другое приложение.

Используйте apk-interceptor, чтобы проверить:

  • Может ли схема быть зарегистрирована другим приложением
  • Предлагает ли Android apk-interceptor в качестве обработчика
  • Появляются ли чувствительные значения в параметрах deeplink

Шаги:

  1. Определите пользовательскую схему оцениваемого приложения из его манифеста или документации.
  2. Соберите apk-interceptor с этой схемой.
  3. Установите apk-interceptor и оцениваемое приложение на одно тестовое устройство.
  4. Запустите deeplink из авторизованного тестового потока.
  5. Если apk-interceptor получает его, просмотрите журнал Interceptor.

Доказательства для фиксации:

  • Поведение выбора ОС, если отображается
  • Полный полученный URI
  • Параметры запроса и содержат ли они чувствительные значения
  • Необходимость взаимодействия с пользователем для маршрутизации ссылки

2. Внедрение параметров Deeplink

Риск:

Оцениваемое приложение доверяет параметрам deeplink для навигации, загрузки URL, флагов функций, выбора учётной записи или рендеринга без достаточной проверки.

Используйте apk-interceptor, чтобы проверить:

  • Принимаются ли созданные параметры
  • Переходит ли приложение на непредназначенный экран
  • Используются ли небезопасные значения URL/пути/содержимого

Шаги:

  1. Определите формат deeplink оцениваемого приложения.
  2. Откройте Sender.
  3. Выберите Implicit Deeplink.
  4. Введите авторизованный тестовый URI с контролируемыми параметрами.
  5. Нажмите Send Intent.
  6. Наблюдайте поведение оцениваемого приложения.

Пример заполнителя:

root@kitploit:~
my-authorized-scheme://open?next=https%3A%2F%2Fauthorized-test.example%2Flanding

Не используйте реальные сторонние домены или учётные записи, если они явно не входят в область оценки.

3. Контроль доступа к экспортированной Activity

Риск:

Экспортированная Activity выполняет чувствительные действия или отображает чувствительные данные без проверки вызывающего, состояния пользователя или требуемой авторизации.

Используйте apk-interceptor, чтобы проверить:

  • Запускается ли экспортированная Activity из другого приложения
  • Выполняет ли она чувствительные действия без ожидаемых проверок
  • Меняет ли данные Intent её поведение

Шаги:

  1. Убедитесь, что Activity экспортирована и входит в область оценки.
  2. Откройте Sender.
  3. Выберите Explicit Activity.
  4. Введите имя пакета и класс Activity.
  5. При необходимости прикрепите локальный URI полезной нагрузки content://.
  6. Нажмите Send Intent.
  7. Наблюдайте, применяет ли оцениваемое приложение контроль доступа.

Доказательства для фиксации:

  • Activity запущена или заблокирована
  • Появилось ли какое-либо окно аутентификации или авторизации
  • Чувствительное действие или раскрытие данных
  • Использование данных Intent Activity

4. Экспонирование WebView JavaScript Bridge через content://

Риск:

Оцениваемое приложение загружает непроверенные данные Intent content:// в WebView, который также раскрывает JavaScript bridge через addJavascriptInterface.

Используйте apk-interceptor, чтобы проверить:

  • Можно ли доставить локальную HTML-нагрузку как content://
  • Загружает ли целевой WebView нагрузку
  • Может ли JavaScript из этого источника достичь bridge

Шаги:

  1. Определите целевую Activity и имя объекта bridge во время авторизованного анализа.
  2. Откройте Payload.
  3. Создайте HTML/JS, вызывающий ожидаемый bridge.
  4. Используйте Run Self-Test для проверки локального синтаксиса.
  5. Откройте Sender.
  6. Выберите Explicit Activity.
  7. Введите целевой пакет и класс Activity.
  8. Включите Attach content:// URI и оставьте FLAG_GRANT_READ_URI_PERMISSION включённым.
  9. Нажмите Send Intent.
  10. Наблюдайте оцениваемое приложение, чтобы определить, загрузил ли его WebView нагрузку и выполнились ли вызовы bridge.

Важное ограничение:

apk-interceptor не может получать результаты от другого приложения, если только это приложение явно не возвращает или не отображает их. Инструмент предназначен для доставки локальной нагрузки и проверки синтаксиса, а не для эксфильтрации данных.

Проверки из командной строки

Убедитесь, что APK не запрашивает сетевой доступ:

root@kitploit:~
aapt dump permissions ./out/apk-interceptor-<scheme>-debug.apk

Ожидаемый результат: отсутствие android.permission.INTERNET.

Запустить deeplink явно в apk-interceptor:

root@kitploit:~
adb shell am start -W \
  -n com.sterrasec.apkinterceptor/.InterceptActivity \
  -a android.intent.action.VIEW \
  -d 'my-authorized-scheme://test?source=adb'

Запустить deeplink через резолвер Android:

root@kitploit:~
adb shell am start -W \
  -a android.intent.action.VIEW \
  -d 'my-authorized-scheme://test?source=adb'

Явная команда подтверждает поведение InterceptActivity. Неявная команда подтверждает Intent-фильтр манифеста и поведение резолвера.

Тесты

Модульные тесты выполняются на JVM с Robolectric, поэтому устройство или эмулятор не требуются. Они покрывают PayloadProvider, включая проверки белого списка путей и обхода, которые не позволяют провайдеру обслуживать что-либо, кроме единственной полезной нагрузки current.html.

root@kitploit:~
./gradlew testDebugUnitTest

Результаты тестов записываются в app/build/reports/tests/testDebugUnitTest/index.html. Та же задача выполняется в CI при каждом push и pull request в main.

Проектные ограничения

  • Отсутствие android.permission.INTERNET
  • Отсутствие внешней передачи данных или автоматической эксфильтрации
  • Отсутствие функции выполнения команд оболочки
  • Отсутствие зависимости от root, Magisk, Frida или инструментов
  • Отсутствие регистрации произвольных схем во время выполнения
  • Отсутствие универсального провайдера файлов
  • Только /current.html обслуживается PayloadProvider

Лицензия

MIT

Скачать инструмент
СценарийМодульЧто помогает проверить
Перехват пользовательской схемы URIInterceptorМожет ли другое приложение зарегистрировать ту же пользовательскую схему и получать ссылки
Обработка параметров deeplinkSenderПринимает ли оцениваемое приложение небезопасные параметры запроса/пути
Экспонирование экспортированной ActivitySenderМожет ли экспортированная Activity быть запущена напрямую другим приложением
Экспонирование WebView bridge через content://Payload + SenderМожет ли локальная HTML-нагрузка достичь WebView JavaScript bridge
Проверка синтаксиса локальной нагрузкиPayloadВыполняется ли ваша HTML/JS нагрузка в тестовом WebView
ИнструментРольЧем отличается apk-interceptor
jadx / MobSF / QARK / SemgrepПоиск уязвимых точек входа (статический)apk-interceptor не сканирует и не декомпилирует; он подтверждает находку, которая у вас уже есть
deep-C / NSdeepLink / adb am startПеречисление и отправка deeplinkapk-interceptor тоже может отправлять, но его отличительная особенность — приём перехваченной схемы и отображение точного URI и параметров
drozerОбщий фреймворк атак на устройстве (агент + часто root)apk-interceptor — это один легковесный APK с преднамеренными защитными ограничениями, более узкой областью применения и более простым безопасным распространением клиентам
Metasploit / FridaВооружение или перехват (например, addJavascriptInterface RCE)apk-interceptor проверяет только достижимость bridge с безвредной нагрузкой; он никогда не эксфильтрует и не выполняет команды оболочки