Логотип «2Captcha»Перейти на главную страницу
Туториалы по обходу капчи

Эта статья была полезной?

Как обойти 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.

Инструкция:

  1. Установите и настройте прокси-инструмент (например, Charles Proxy) на вашем компьютере.
  2. Настройте мобильное устройство на использование IP-адреса и порта вашего компьютера в качестве HTTP-прокси.
  3. Установите корневой сертификат прокси-инструмента на мобильное устройство, чтобы иметь возможность расшифровывать HTTPS-трафик.
  4. Откройте приложение Edge и перейдите к экрану входа, чтобы спровоцировать загрузку капчи.
  5. В логах прокси найдите запросы к домену login.edge.app или непосредственно к серверам Prosopo.
  6. Изучите полезную нагрузку (Payload) или параметры URL этого запроса. Там вы найдете значения websiteKey и полный websiteURL.
  7. Скопируйте эти значения для использования в API-запросе.

Примечание: Если приложение Edge использует защиту SSL Pinning, вам потребуется обойти ее (например, с помощью фреймворка Frida или патча приложения), иначе прокси не сможет расшифровать трафик и вы не увидите параметры.

Примеры кода

Python + requests (API v2)

Классический пример отправки задачи и получения результата через API v2 с использованием JSON.

python Copy
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 Copy
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 не сработают напрямую. Существует три основных подхода:

  1. Перехват и модификация запроса (MITM): Используя тот же прокси (Charles/mitmproxy), настройте правило (Rewrite или Breakpoint) для перехвата исходящего запроса приложения Edge, который отправляет ответ на капчу. Замените пустое или сгенерированное значение поля токена на тот, который вы получили от API, и отправьте запрос на сервер. Это самый надежный способ для нативных приложений.
  2. Инструменты динамического анализа (Frida / Xposed): Если вы автоматизируете Android-версию приложения Edge, вы можете использовать фреймворк Frida, чтобы создать хук на нативную функцию, которая обрабатывает ответ капчи, и принудительно вернуть ей ваш решенный токен до того, как он будет отправлен на сервер.
  3. Автоматизация WebView через Appium: Если капча отображается внутри системного WebView приложения Edge, используйте инструменты мобильной автоматизации, такие как Appium, чтобы выполнить JavaScript-код для внедрения токена в DOM-дерево этого WebView, аналогично тому, как это делается в Playwright.

Частые ошибки и решения

Ошибка / Проблема Причина Решение
Ошибка создания задачи или ZERO_CAPTCHA Неверные или устаревшие websiteURL и websiteKey. Убедитесь, что вы перехватили самые свежие параметры непосредственно перед отправкой задачи. Они могут быть привязаны к конкретной сессии приложения.
Приложение не отправляет запрос или выдает ошибку сети Включена защита SSL Pinning в приложении Edge. Используйте Frida, Objection или патчите APK/IPA файл для отключения проверки сертификатов, чтобы ваш прокси мог расшифровывать трафик.
Токен не принимается сервером приложения Токен внедрен не в то поле или запрос изменен некорректно. Внимательно изучите структуру исходящего запроса приложения в прокси. Убедитесь, что вы заменяете именно то поле, которое ожидает сервер, и сохраняете остальные заголовки и параметры запроса неизменными.
Капча не появляется Приложение не инициирует загрузку. Попробуйте использовать режим инкогнито в эмуляторе, очистить кэш приложения Edge или изменить IP-адрес, чтобы спровоцировать появление проверки.

Полезные ссылки