Обход защиты Distil

Недавно мы запустили новый метод API для обхода защиты Distil

Когда вы попадаете на страницу, где используется javascript от Distil вы можете использовать наш API для обхода защиты.

Процесс взаимодействия с API можно разбить на три шага:

  • Получение необходимых данных с целевого сайта
  • Отправка данных нашему API и получение ответа
  • Выполнение запросов, в соотвествии с полученными данными

Получение необходимых данных

  • Перейдите на сайт и найдите на нем URL javascript библиотеки distil.

    <script type="text/javascript" src="/pvvhnzyazwpzgkhv.js" defer>

    URL не статически, он генерируется для каждой сессии, соответственно, нужно каждый раз получать актуальное значение.

  • Скачайте javascript библиотеку и закодируйте ее в base64

    curl http://www.targetwebsite.com/pvvhnzyazwpzgkhv.js -o lib.js

    base64 lib.js

  • Вычислите контрольную сумму для библиотеки используя алгоритм SHA1

    shasum -a 1 lib.js

  • Объедините все собранные данные в JSON-объект следующего формата:

    {
        "JsSha1": "af2d0557c23ff2d8f40ccf4bec57e480704634e9",
        "JsUri": "http://www.targetwebsite.com/pvvhnzyazwpzgkhv.js",
        "JsData": "IWZ1bmN0...b3cpCg=="
    }

    Где:
    JsSha1 контрольная сумма SHA1 для javascript библиотеки
    JsUri URL javascript библиотеки
    JsData данные библиотеки, закодированные в base64

Отправка запроса к API

Сделайте HTTP POST запрос к http://api.2captcha.com/in.php передав слеюущие параметры, вместе с данными, собранными на предыдущем шаге:

{
    "key":"1abc234de56fab7c89012d34e56fa7b8",
    "method":"distil",
    "data":{
        "JsSha1":"af2d0557c23ff2d8f40ccf4bec57e480704634e9",
        "JsUri":"http://www.targetwebsite.com/pvvhnzyazwpzgkhv.js",
        "JsData":"IWZ1bmN0...b3cpCg=="
    },
    "json":"1",
    "pingback":"https://mydomain.com/pingback",
    "soft_id":"123",
}

Параметры запроса

Параметр Обязателен Тип Описание
key Да Строка Ваш ключ API
method Да Строка Используйте значение distil чтобы показать, что вы хотите обойти Distil
data Да JSON объект Данные в формате JSON, полученные на предыдущем шаге
json Нет Число Используйте значение 1 если хотите получить ответ в формате JSON. В противном случае сервер вернет ответ в виде простого текста
pingback Нет Строка Вы можете передать свой URL, куда наш сервер отправит ответ. (подробнее)
soft_id Нет Число ID разработчика

Сервер вернет в ответе ID вашего запроса или код ошибки, если запрос был составлен неверно.

Если status равен 1 значит ваш запрос был корректным и ID запроса находится в параметре request.

Если запрос был некорректным то status будет равен 0 а в параметре request будет код ошибки. Описание кодов ошибки вы можете найти ниже.

Примеры ответов:

нормальный ответ:
{
    "status":"1",
    "request":"30017569665"
}
ошибка:
{
    "status":"0",
    "request":"ERROR_BAD_DATA"
}

Если вы не передаете в запросе параметр json: 1, то сервер отвечает в виде простого текста

Примеры ответов:

нормальный ответ:

OK|30017569665

ошибка:

ERROR_BAD_DATA

Получение данных для вашего запроса

Чтобы получить данные, необходимые для обхода Distil сделайте HTTP GET запрос к http://api.2captcha.com/res.php используя ID запроса, полученный на предыдущем шаге

Параметры запроса

Параметр Обязателен Тип Описание
key Да Строка Ваш ключ API
action Да Строка Используйте get чтобы указать на то, что вы хотите получить ответ на ваш запрос
id Да Строка ID вашего запроса, полученный на предыдущем шаге
json Нет Число Используйте значение 1 если хотите получить ответ в формате JSON. В противном случае сервер вернет ответ в виде простого текста

Пример URL запроса:

http://api.2captcha.com/res.php?key=1abc234de56fab7c89012d34e56fa7b8&action=get&id=30017569665&json=1

Пример ответа:

{
    "status":"1",
    "request":{
        "tasks":[
        { 
            "uri":"/aydnadwxvqqycduwv.js?PID=6D4E4D1D-7094-375D-A439-0568A6A70836",
            "method":"POST",
            "headers":["X-Distil-Ajax:etztqdbevexyyqddfcwqxxxywwztzdsuyd"],
            "data":"p=%7B%22appName...US%22%7D",
            "interval":"0"
        },{
            "uri":"/aydnadwxvqqycduwv.js",
            "method":"HEAD",
            "headers":[],
            "data":"",
            "interval":270000
        }],
        "headers":[
        "X-Distil-Ajax:etztqdbevexyyqddfcwqxxxywwztzdsuyd"]
    }
}

Если вы не указали json=1 то сервер вернет ответ в виде простого текста. В этом случае нормальный ответ будет разделен на две части символом вертикальной черты |. Первая часть OK указывает на то, что запрос был обработан успешно. Вторая часть содержит строку с данными для обхода Distil, которую нужно распарсить как JSON.

Если запрос не был обработан успешно, что в ответе будет только код ошибки.

Примеры ответов:

нормальный ответ:

OK|{"tasks":[...]}

ошибка:

ERROR_BAD_DATA

Выполнение запросов на целевом сайте

Ответ, полученный от нашего API содержит два поля: tasks (задания) и headers (заголовки).

Вам нужно выполнить задания из массива. Каждое из них - это HTTP-запрос, который должен быть отправлен на указанный URL с соотвествующими параметрами и заголовками.

Задания бывают двух типов:

  • Одноразовый POST запрос (interval = 0): этот запрос создает сессию и должен быть выполнен немедленно после получения ответа от API.

  • Повторяющийся HEAD запрос (interval > 0): используется для поддержания активной сессии. Запрос должен повторяться каждые N миллисекунд после POST запроса, где N - значение interval из ответа.

Используйте все заголовки, которые прислал вам сайт в ответе на POST-запрос, а также cookies для всех запросов, которые будете делать к сайту.

Заголовки, которые были получены в ответе от API (поле headers) должны также быть использованы для всех запросов, которые вы делаете к сайте, за иключением повторяющегося запроса HEAD.

Пока сессия поддерживается активной вы можете выполнять любые действия на сайте без риска блокировки от Distil. Но через какое-то время или после какого-то числа запросов Distil сбросит вашу сессию и вы будете перенаправлены на страницу "BOT CHECK". В этом случае вам нужно будет снова сделать запрос к нашему API для получения новой сессии.

Параметры задач

Параметр Описание
uri URI для HTTP запроса
method метод HTTP запроса
headers Заголовки которые нужно отправить в запросе
data Данные которые нужно отправить в запросе
interval Интервал повторения запроса

Обработка ошибок

При взаимодействии с API вы можете получить те же коды ошибок что возвращаются для других методов.

Но, также есть отдельный код ошибки для Distil: ERROR_BAD_DATA

Если вы получили этот код ошибки, значит вы передали некорректные данные в параметре data вашего запроса, например:

  • Невалидный JSON в data
  • Пустое или некорректно закодированное в base64 значение JsData
  • Некорректная контрольная сумму SHA1 в JsSha1

Если вы получили ERROR_BAD_DATA проверьте и исправьте содержимое своего запроса и попробуйте снова.

Стоимость

Цена для этого метода такая же как для капч с токенами - 160 рублей за 1000 запросов.