Эта статья была полезной?
Как обойти Prosopo в мобильном приложении Edge
Технический специалист
Мобильное приложение Edge использует систему защиты Prosopo ProCaptcha для предотвращения автоматизированного входа. Главная сложность работы с нативными мобильными приложениями заключается в отсутствии консоли разработчика, как в обычном браузере.
Для успешного решения необходимо перехватить сетевой трафик приложения, чтобы извлечь динамические параметры websiteURL и websiteKey, решить капчу через API v2, а затем модифицировать исходящий запрос приложения, подставив полученный токен.
Параметры задачи
Для решения используется тип задачи ProsopoTaskProxyless в формате API v2.
| Параметр | Тип | Обязательный | Описание |
|---|---|---|---|
| type | String | Да | Должен быть установлен в ProsopoTaskProxyless |
| websiteURL | String | Да | Полный URL эндпоинта, где загружается капча (например, https://login.edge.app/captcha/...) |
| websiteKey | String | Да | Уникальный идентификатор экземпляра капчи, извлеченный из трафика |
Как найти параметры в мобильном приложении Edge
Поскольку это мобильное приложение, параметры необходимо перехватывать из сетевого трафика с помощью инструментов анализа трафика (MITM-прокси), таких как Charles Proxy, mitmproxy или HTTP Toolkit.
Инструкция:
- Установите и настройте прокси-инструмент (например, Charles Proxy) на вашем компьютере.
- Настройте мобильное устройство на использование IP-адреса и порта вашего компьютера в качестве HTTP-прокси.
- Установите корневой сертификат прокси-инструмента на мобильное устройство, чтобы иметь возможность расшифровывать HTTPS-трафик.
- Откройте приложение Edge и перейдите к экрану входа, чтобы спровоцировать загрузку капчи.
- В логах прокси найдите запросы к домену login.edge.app или непосредственно к серверам Prosopo.
- Изучите полезную нагрузку (Payload) или параметры URL этого запроса. Там вы найдете значения websiteKey и полный websiteURL.
- Скопируйте эти значения для использования в API-запросе.
Примечание: Если приложение Edge использует защиту SSL Pinning, вам потребуется обойти ее (например, с помощью фреймворка Frida или патча приложения), иначе прокси не сможет расшифровать трафик и вы не увидите параметры.
Примеры кода
Python + requests (API v2)
Классический пример отправки задачи и получения результата через API v2 с использованием JSON.
python
import requests
import time
API_KEY = 'ВАШ_API_КЛЮЧ'
WEBSITE_URL = 'https://login.edge.app/captcha/ITJHWHZGDZ4OGOIZ'
WEBSITE_KEY = '5E1bGh2NgRb8dD4NC5bQKRbgiCz8oBc2EhAuYJzy99q3iJ3s'
# 1. Отправка задачи
url = 'https://api.2captcha.com/createTask'
headers = {
'Content-Type': 'application/json'
}
payload = {
"clientKey": API_KEY,
"task": {
"type": "ProsopoTaskProxyless",
"websiteKey": WEBSITE_KEY,
"websiteURL": WEBSITE_URL
}
}
response = requests.post(url, headers=headers, json=payload)
result = response.json()
if result.get('errorId') == 0:
task_id = result.get('taskId')
print(f"Задача создана, ID: {task_id}")
# 2. Ожидание решения
res_url = 'https://api.2captcha.com/getTaskResult'
while True:
time.sleep(5) # Пауза между запросами
res_payload = {
"clientKey": API_KEY,
"taskId": task_id
}
res_response = requests.post(res_url, headers=headers, json=res_payload).json()
if res_response.get('errorId') == 0 and res_response.get('status') == 'ready':
print("Капча успешно решена!")
token = res_response['solution']['token']
print(f"Токен: {token}")
break
elif res_response.get('errorId') != 0:
print(f"Ошибка при получении результата: {res_response.get('errorDescription')}")
break
else:
print(f"Ошибка создания задачи: {result.get('errorDescription')}")
Python + Playwright (Эмуляция мобильного WebView)
Если капча в приложении Edge отображается внутри системного WebView, можно использовать Playwright с эмуляцией мобильного устройства для перехвата параметров и внедрения токена.
python
from playwright.sync_api import sync_playwright
import requests
import time
API_KEY = 'ВАШ_API_КЛЮЧ'
TARGET_URL = 'https://login.edge.app/captcha/ITJHWHZGDZ4OGOIZ'
def solve_prosopo_edge_webview():
with sync_playwright() as p:
# Эмуляция мобильного устройства
iphone = p.devices['iPhone 12']
browser = p.chromium.launch(headless=False)
context = browser.new_context(**iphone)
page = context.new_page()
captured_params = {}
# Перехват запросов для поиска параметров
def handle_request(request):
if 'prosopo' in request.url.lower() or 'captcha' in request.url.lower():
# Логика извлечения websiteKey и websiteURL из запроса
pass
page.on('request', handle_request)
try:
page.goto(TARGET_URL)
# Действия для вызова капчи
# page.click('button[type="submit"]')
page.wait_for_timeout(3000)
# Отправка в API v2 (параметры должны быть извлечены выше)
api_url = 'https://api.2captcha.com/createTask'
headers = {'Content-Type': 'application/json'}
payload = {
"clientKey": API_KEY,
"task": {
"type": "ProsopoTaskProxyless",
"websiteKey": "ИЗВЛЕЧЕННЫЙ_KEY",
"websiteURL": page.url
}
}
task_response = requests.post(api_url, headers=headers, json=payload).json()
task_id = task_response.get('taskId')
# Ожидание решения
res_url = 'https://api.2captcha.com/getTaskResult'
token = None
for _ in range(20):
time.sleep(5)
res = requests.post(res_url, headers=headers, json={"clientKey": API_KEY, "taskId": task_id}).json()
if res.get('status') == 'ready':
token = res['solution']['token']
break
if res.get('errorId') != 0:
print(f"Ошибка API: {res.get('errorDescription')}")
break
if token:
print(f"Токен получен: {token}")
# Внедрение токена в WebView
page.evaluate(f"""
// Пример внедрения, точные селекторы зависят от реализации приложения Edge
const input = document.querySelector('input[name="prosopo_token"]');
if (input) input.value = "{token}";
""")
else:
print("Не удалось получить токен.")
except Exception as e:
print(f"Ошибка: {e}")
finally:
# browser.close()
if __name__ == '__main__':
solve_prosopo_edge_webview()
Как использовать полученный токен в мобильном приложении Edge
Поскольку внедрение токена в нативное мобильное приложение отличается от веб-браузера, стандартные методы манипуляции DOM не сработают напрямую. Существует три основных подхода:
- Перехват и модификация запроса (MITM): Используя тот же прокси (Charles/mitmproxy), настройте правило (Rewrite или Breakpoint) для перехвата исходящего запроса приложения Edge, который отправляет ответ на капчу. Замените пустое или сгенерированное значение поля токена на тот, который вы получили от API, и отправьте запрос на сервер. Это самый надежный способ для нативных приложений.
- Инструменты динамического анализа (Frida / Xposed): Если вы автоматизируете Android-версию приложения Edge, вы можете использовать фреймворк Frida, чтобы создать хук на нативную функцию, которая обрабатывает ответ капчи, и принудительно вернуть ей ваш решенный токен до того, как он будет отправлен на сервер.
- Автоматизация WebView через Appium: Если капча отображается внутри системного WebView приложения Edge, используйте инструменты мобильной автоматизации, такие как Appium, чтобы выполнить JavaScript-код для внедрения токена в DOM-дерево этого WebView, аналогично тому, как это делается в Playwright.
Частые ошибки и решения
| Ошибка / Проблема | Причина | Решение |
|---|---|---|
| Ошибка создания задачи или ZERO_CAPTCHA | Неверные или устаревшие websiteURL и websiteKey. | Убедитесь, что вы перехватили самые свежие параметры непосредственно перед отправкой задачи. Они могут быть привязаны к конкретной сессии приложения. |
| Приложение не отправляет запрос или выдает ошибку сети | Включена защита SSL Pinning в приложении Edge. | Используйте Frida, Objection или патчите APK/IPA файл для отключения проверки сертификатов, чтобы ваш прокси мог расшифровывать трафик. |
| Токен не принимается сервером приложения | Токен внедрен не в то поле или запрос изменен некорректно. | Внимательно изучите структуру исходящего запроса приложения в прокси. Убедитесь, что вы заменяете именно то поле, которое ожидает сервер, и сохраняете остальные заголовки и параметры запроса неизменными. |
| Капча не появляется | Приложение не инициирует загрузку. | Попробуйте использовать режим инкогнито в эмуляторе, очистить кэш приложения Edge или изменить IP-адрес, чтобы спровоцировать появление проверки. |
Полезные ссылки
- Песочница для тестирования API: https://2captcha.com/setting#sandbox
- Документация API по Prosopo ProCaptcha: https://2captcha.com/api-docs/prosopo-procaptcha
- Python SDK на GitHub: https://github.com/2captcha/2captcha-python
- Другие примеры обхода капч на сайтах: https://2captcha.com/h?category=sites