В нашем современном мире, где мобильные устройства ориентированы на мобильные устройства, популярность мобильных приложений стремительно растет, заменяя традиционные веб-сайты для многих сервисов. Сейчас в крупных магазинах приложений доступно более 5 миллионов приложений. Среднестатистический пользователь смартфона имеет более 80 установленных приложений. А на мобильные приложения приходится 90% времени, проводимого онлайн в приложениях, по сравнению с мобильным Интернетом.
Что это значит? Мобильные приложения становятся одним из самых ценных и обильных источников данных в нашем все более цифровом мире. Данные о местоположении, статистика использования, профили, транзакции и многое другое можно извлечь из трафика мобильного приложения.
Это открывает огромные возможности для бизнеса, исследователей и разработчиков. Но для сбора этих данных требуется перехват связи между приложениями и их серверными API. Это связано с тем, что мобильные приложения используют зашифрованные соединения HTTPS для безопасной передачи данных.
Простое прослушивание сетевого трафика не раскроет его содержимое. Вам нужен способ расшифровки трафика.
Введите прокси-серверы типа «человек посередине» (MITM).
Из этого подробного руководства объемом 4,000 слов вы узнаете:
- Что такое MITM-прокси и как он работает
- Пошаговая инструкция по настройке собственного MITM-прокси для анализа трафика мобильных приложений.
- Как использовать прокси-сервер для наблюдения и обратного проектирования API мобильного приложения
- Инструменты и методы для извлечения ценных данных из API мобильных приложений
- Лучшие практики MITM-прокси для ответственного сбора данных
Если вам нужен практический опыт извлечения данных из таких приложений, как Tinder, Airbnb, Yelp и других, вы попали по адресу. Давайте начнем!
Что такое прокси-сервер «Человек посередине» (MITM)?
Чтобы понять, как прокси-серверы MITM позволяют очищать данные мобильных приложений, сначала необходимо понять, что делает шифрование HTTPS.
HTTPS использует сертификаты SSL/TLS для шифрования связи между клиентом (например, мобильным приложением) и сервером (например, серверной частью API). Это предотвращает просмотр или изменение трафика кем-либо, кто шпионит в сети.
Но что, если бы вы могли перехватить этот трафик, расположившись посередине — между клиентом и сервером назначения?
Это именно то, что делает прокси-сервер MITM. Прокси выступает в роли посредника, через который проходит весь трафик:
Клиент <—-> MITM-прокси <—-> Целевой сервер
Прокси устанавливает отдельные SSL-соединения с клиентом и сервером для расшифровки их трафика. Затем он может проверять, анализировать и даже изменять запросы открытого текста перед повторным шифрованием и отправкой их.
Установив корневой сертификат прокси-сервера в качестве доверенного центра, он может эффективно выдавать себя за любой домен. Это обеспечивает беспрепятственный перехват без появления предупреждений безопасности браузера.
Некоторые популярные прокси MITM включают в себя:
доверенное лицо | Платформа | Заметки |
---|---|---|
митмпрокси | Мак, Виндовс, Линукс | Мощный консольный инструмент |
Чарльз Прокси | Мак, Виндовс, Линукс | Графический интерфейс, поддержка конфигурации устройства |
Скрипач | Windows | Может отлаживать трафик из приложений Windows. |
В этом руководстве мы продемонстрируем использование митмпрокси поскольку он бесплатный, с открытым исходным кодом и быстро устанавливается.
Теперь давайте посмотрим, как настроить мобильное устройство для маршрутизации трафика через прокси-сервер MITM.
Шаг 1. Установите mitmproxy на свой компьютер
Первым шагом является установка и запуск прокси-сервера mitmproxy на настольном компьютере или ноутбуке. Он будет перехватывать запросы от устройств, настроенных на маршрутизацию через него.
Установить на macOS
Если вы используете Mac, самый простой способ установить mitmproxy — через Homebrew:
$ brew install mitmproxy
Установить в Linux
В Linux используйте менеджер пакетов вашего дистрибутива, например:
$ sudo apt install mitmproxy # Debian/Ubuntu
$ sudo dnf install mitmproxy # Fedora
Установить в Windows
Пользователи Windows могут загрузить официальную бинарную версию с сайта mitmproxy.org. Обязательно выберите последнюю версию mitmproxy, а не утилиту mitmdump.
Запустить прокси
После установки запустите mitmproxy на порту по умолчанию 8080:
$ mitmproxy
Вы должны увидеть перехваченные запросы, появившиеся в консоли mitmproxy:
Оставьте это работающим в фоновом режиме, пока вы настраиваете свое мобильное устройство для использования прокси.
Шаг 2. Настройте мобильное устройство для маршрутизации через mitmproxy
Теперь нам нужно настроить мобильное устройство на маршрутизацию трафика через прокси-сервер mitmproxy для перехвата.
Вот шаги для распространенных мобильных операционных систем:
На iPhone/iOS
Подключите свой iPhone к той же сети Wi-Fi, что и компьютер, на котором работает mitmproxy.
Перейдите в «Настройки» > «Wi-Fi» и выберите текущую сеть.
Прокрутите вниз и нажмите Настроить прокси.
Выберите Вручную чтобы установить свои собственные данные прокси:
Сервер: IP-адрес вашего компьютера в сети (например, 192.168.1.10).
Порт: 8080
Это маршрутизирует весь трафик устройства через ваш компьютер и mitmproxy!
На Android
Подключите свое Android-устройство к той же сети Wi-Fi, что и прокси.
Перейдите в «Настройки» > «Wi-Fi» > «Дополнительные параметры» > «Прокси» и выберите Вручную.
Введите IP-адрес вашего компьютера в поле «Имя хоста» и 8080 в качестве порта.
Нажмите «Сохранить», чтобы применить конфигурацию прокси-сервера.
На Windows Phone
На рабочем столе проведите пальцем влево к списку приложений и нажмите Настройки.
Нажмите Wi-Fi и нажмите и удерживайте подключенную сеть. Выбирать Редактировать.
Нажмите Показать дополнительные опции тогда Установить прокси в Руководство.
Введите IP-адрес вашего компьютера и порт 8080.
Нажмите Сохранить подключиться через прокси.
Вот и все! Теперь ваше мобильное устройство должно маршрутизировать весь трафик через mitmproxy для перехвата.
Шаг 3. Установите сертификат mitmproxy на мобильное устройство.
На этом этапе вы увидите трафик в консоли mitmproxy с вашего мобильного устройства. Однако большинство приложений используют HTTPS, поэтому вы не сможете просмотреть контент.
Чтобы расшифровать HTTPS-трафик, вам необходимо установить сертификат mitmproxy в качестве доверенного корневого центра сертификации на вашем мобильном устройстве.
Mitmproxy предоставляет удобный сайт по адресу http://mitm.it это сгенерирует сертификат для вашей конкретной платформы устройства.
Просто перейдите к http://mitm.it в браузере вашего мобильного устройства и нажмите ссылку для вашей ОС:
Затем установите загруженный сертификат на свое устройство:
На iOS
Перейдите в «Настройки» > «Основные» > «О программе» > «Настройки доверия сертификатам».
Включите митмпрокси сертификат
На Android
Сохранить
mitmproxy-ca-cert.pem
файл где-нибудь в памяти устройстваПерейдите в «Настройки» > «Безопасность» > «Установить из хранилища».
Выберите
mitmproxy-ca-cert.pem
файл
На Windows Phone
Перейдите в Система > Шифрование > Импортировать сертификат.
Выберите скачанный
mitmproxy-ca-cert.crt
Возможно, вам придется установить сертификат mitmproxy как доверенный для VPN или приложений. Теперь mitmproxy может перехватывать даже HTTPS-зашифрованный трафик с устройства.
Включайте сертификат только тогда, когда вам нужно отладить трафик, и отключайте его, когда закончите! Не раскрывайте данные других приложений без необходимости.
Ладно, настало время самого интересного… давайте посмотрим, как наблюдать за трафиком, реконструировать и очищать API мобильных приложений!
Шаг 4. Наблюдение и изменение API мобильного приложения
Откройте мобильное приложение, которое хотите изучить, на устройстве, настроенном на использование прокси. Например, я буду использовать приложение для доставки еды Swiggy.
В консоли mitmproxy на вашем компьютере вы должны увидеть запросы, поступающие с IP-адреса вашего мобильного устройства.
Отфильтруйте представление по домену API, который вы хотите проанализировать. Для Свигги это prod-api.swiggy.com
:
При взаимодействии с мобильным приложением ищите закономерности в запросах API. Вы можете развернуть запрос, чтобы просмотреть полную информацию:
Тестирование различных потоков приложений показывает, какие конечные точки существуют во внутреннем API и какие данные они возвращают. Для парсинга нас интересуют ПОЛУЧИТЬ запросы, возвращающие данные JSON.
Основываясь на наблюдении за трафиком от Swiggy, мы можем увидеть:
/restaurants/list/v5
возвращает список ресторанов для определенного местоположения/menu/v4
получает меню для конкретного ресторана/geocode/v1
преобразует адреса в координаты широты и долготы
И так далее. Это позволяет нам понимать и отображать конечные точки API.
Теперь мы можем реплицировать запросы API для извлечения данных. Например, вызов /restaurants/list/v5
с lat
и lng
параметры возвращают список ресторанов в формате JSON:
import requests
api_url = ‘https://prod-api.swiggy.com/restaurants/list/v5‘
params = {
‘lat‘: 12.972442,
‘lng‘: 77.580643
}
response = requests.get(api_url, params=params)
data = response.json()
for restaurant in data:
print(restaurant[‘name‘], restaurant[‘area‘])
При этом распечатываются названия и районы ресторанов Swiggy рядом с заданным местом. Прокси позволяет нам увидеть, как работает приложение, и выполнить реверс-инжиниринг API для парсинга.
Стратегии парсинга API мобильных приложений
После того как вы проверили трафик API приложения, чтобы понять конечные точки и параметры, вы можете начать сбор данных программным способом.
Вот несколько примеров:
Используйте прокси – Меняйте разные резидентные IP-адреса, чтобы избежать блокировки из-за ограничения скорости.
Рандомизировать входные данные – Меняйте геокоординаты, идентификаторы пользователей и т. д., чтобы выглядеть более человечно.
Запросы дроссельной заслонки – Добавьте задержки между запросами, чтобы ограничить громкость.
Данные кеша – Сохраняйте ответы, чтобы избежать дублирования запросов.
Обработка ошибок – Повторяйте неудачные запросы и корректно обрабатывайте ошибки HTTP.
Разбивка данных на страницы – Следуйте ссылкам на страницы в ответах, чтобы извлечь все данные.
Используйте POST при необходимости – Некоторые действия, такие как размещение заказа, требуют POST-запросов.
Разбираем быстро – Извлекайте только те данные, которые вам нужны, вместо того, чтобы анализировать все.
Очистить метаданные – Удалите уникальные идентификаторы, временные метки и т. д., которые могут идентифицировать записи.
Будьте в курсе – Проверьте изменения API после обновлений приложения.
Проявив немного творчества, вы можете создавать парсеры для извлечения всех видов ценных данных из API мобильных приложений. Просто внимательно соблюдайте Условия обслуживания и используйте данные ответственно!
Ответственный парсинг мобильных API
Как и любая форма веб-скрапинга, сбор данных с помощью мобильных API требует некоторых этических соображений:
Не перегружайте серверы – Ограничьте объем запросов, чтобы минимизировать влияние.
Ограничить использование – Собирайте только те данные, потребность в которых оправдана.
Соблюдайте Условия обслуживания – Избегайте нарушения условий обслуживания или соглашений о неразглашении.
Защитите данные – Надежно храните данные и минимизируйте сроки хранения.
Деидентификация данных – Удалите личную информацию, не необходимую для ваших целей.
Проверьте законы – В некоторых местах регулируются виды сбора данных.
Используйте мудро – Данные должны приносить пользу, а не просто собираться, потому что вы можете это сделать.
Прозрачность и этика имеют решающее значение. С отличными данными приходит и большая ответственность!
Заключение
Я надеюсь, что это руководство предоставило вам всестороннее представление о перехвате данных мобильных приложений с помощью прокси-серверов «человек посередине». Ключевые выводы:
Прокси-серверы MITM позволяют перехватывать HTTPS-трафик мобильных приложений путем установки прокси-сертификата.
Такие инструменты, как mitmproxy, позволяют легко проверить этот трафик и понять, как приложение взаимодействует с серверными API.
Реверс-инжиниринг конечных точек API позволяет реплицировать запросы для очистки данных мобильных приложений.
Прокси, регулирование и другие методы можно использовать для эффективного сбора данных мобильных приложений в любом масштабе.
Убедитесь, что вы очищаете мобильные API этично и законно.
Мобильные приложения предоставляют огромное количество данных, которые только и ждут, чтобы их использовали. Теперь, когда вы знаете, как использовать прокси-серверы MITM для доступа к нему, возможности безграничны!
Из каких крутых приложений вы начнете собирать данные? Дайте мне знать, если у вас есть еще вопросы по парсингу мобильных прокси!