diff --git a/docs/captchas/hunt-task.mdx b/docs/captchas/hunt-task.mdx new file mode 100644 index 00000000..46766366 --- /dev/null +++ b/docs/captchas/hunt-task.mdx @@ -0,0 +1,408 @@ +--- +sidebar_position: 26 +sidebar_label: Hunt +title: "Автоматическое распознавание и обход Hunt CAPTCHA | API" +description: "Узнайте, как распознать Hunt с помощью API сервиса автоматического рапознавания и решения капч CapMonster Cloud!" +--- + +import Tabs from '@theme/Tabs'; +import TabItem from '@theme/TabItem'; +import ParamItem from '@theme/ParamItem'; +import MethodItem from '@theme/MethodItem'; +import MethodDescription from '@theme/MethodDescription' +import PriceBlock from '@theme/PriceBlock'; +import PriceBlockWrap from '@theme/PriceBlockWrap'; +import { ArticleHead } from '../../src/theme/ArticleHead'; + + + +# Hunt + + + + + +![](./images/hunt-task/hunt-captcha.png) + +Hunt-капча — это антибот-система, используемая на букмекерских платформах для выявления автоматизированной активности. Она отслеживает поведение пользователя и при обнаружении подозрительных действий инициирует интерактивную проверку. + +:::warning **Внимание!** +* Для выполнения данной задачи используйте **ваши собственные прокси**. + +* Наша система решения имеет два режима работы: **генерация X-HD (fingerprint)** и **решение капчи**. Если вы хотите только сгенерировать X-HD, не передавайте параметр `data`. Если вам нужно решить капчу, передайте в `data` токен, который целевой сайт выдаёт при определённых действиях (например, при запросе SMS). +::: + +## Параметры запроса + + + +**CustomTask** + +--- + + +**HUNT** + +--- + + +Адрес страницы, на которой находится капча Hunt. + +--- + + + +Полная ссылка на файл `api.js`. + +Пример: +`https://www.example.com/hd-api/external/apps//api.js` + +Передавайте в формате: +`"apiGetLib":"https://example.com/hd-api/external/apps/a2157wab1045d68672a63557e0n2a77edbfd15ea/api.js"` + +Найти ссылку можно в DevTools (вкладки **Network** или **Elements**) на странице с Hunt-капчей. +Используйте поиск по ключевым словам: `hd-api` или `api.js`. + +--- + + +Указание `data` необходимо при выборе режима решения капчи (см. подробнее ниже) + +--- + + +User-Agent браузера.
+**Передавайте только актуальный UA от ОС Windows. Сейчас таковым является**: `userAgentPlaceholder` + +--- + + +**http** - обычный http/https прокси;
+**https** - попробуйте эту опцию только если "http" не работает (требуется для некоторых кастомных прокси);
+**socks4** - socks4 прокси;
+**socks5** - socks5 прокси. + +--- + + +

+ IP адрес прокси IPv4/IPv6. Не допускается: + - использование прозрачных прокси (там где можно видеть IP клиента); + - использование прокси на локальных машинах. +

+ +--- + + +Порт прокси. + +--- + + +Логин прокси-сервера. + +--- + + +Пароль прокси-сервера. + +
+--- + +**Решение поддерживает два режима работы:** + +1. **Генерация X-HD (fingerprint)** + + * В этом режиме вы не передаёте `data`. + * После создания задачи вы получите **X-HD** — уникальный отпечаток, привязанный к вашему IP, который можно использовать для последующих запросов к сайту. + +2. **Решение капчи** + + * В этом режиме в параметре `data` вы передаёте **токен** (значение `meta.token`), который сайт выдаёт при определённых действиях (например, при запросе SMS). + * После создания задачи вы получите **решение капчи** в виде токена, готового для использования на сайте. + +--- + +**Когда использовать каждый режим:** + +| Ситуация | Нужно ли передавать `data`? | +| ------------------------- | ------------- | +| Первичная инициализация | Нет | +| Нужно получить X-HD | Нет | +| Сайт вернул Captcha error | Да | +| Получен `meta.token` | Да | + +--- + +**Пример полного сценария работы:** + +1. Создать задачу **без `data`** +2. Получить от нашего сервиса X-HD +3. Отправить запрос на сайт с X-HD +4. Получить `meta.token` +5. Создать задачу **с `data = meta.token`** +6. Получить решение +7. Передать решение на сайт + +:::warning Важно +При смене прокси необходимо повторно получать X-HD. +::: + +## Режим 1. Генерация X-HD. + +Используется для получения X-HD токена, привязанного к IP. + +### Метод создания задачи для генерации X-HD + + + + ```http + https://api.capmonster.cloud/createTask + ``` + + + **Запрос** +```json +{ + "type": "CustomTask", + "class": "HUNT", + "websiteURL": "https://example.com", + "metadata": { + "apiGetLib": "https://example.com/hd-api/external/apps/a2157wab1045d68672a63557e0n2a77edbfd15ea/api.js" + }, + "userAgent": "userAgentPlaceholder", + "proxyType": "http", + "proxyAddress": "8.8.8.8", + "proxyPort": 8080, + "proxyLogin": "proxyLoginHere", + "proxyPassword": "proxyPasswordHere" + } +} + ``` + + **Ответ** + ```json + { + "errorId": 0, + "taskId": 407533072 + } + ``` + + + +## Режим 2. Решение капчи. + +Используется после того, как сайт вернул ошибку captcha и выдал `meta.token`. + +### Как получить `meta.token` + +1. Делаете запрос к сайту (например, запрос SMS) +2. Получаете X-HD + +![](./images/hunt-task/x-hd(data).png) +![](./images/hunt-task/x-hd(data)-1.png) + +3. Сайт возвращает: + +```json +{ + "errors":[{"code":"113","title":"Captcha error"}], + "meta":{ + "token":"SITE_META_TOKEN" + } +} +``` + +![](./images/hunt-task/token(data).png) + +### Метод создания задачи для решения капчи + +Значение `meta.token` нужно передать в `data`. + + + + ```http + https://api.capmonster.cloud/createTask + ``` + + + **Запрос** + ```json + { + "type": "CustomTask", + "class": "HUNT", + "websiteUrl": "https://example.com", + "metadata": { + "apiGetLib": "https://example.com/hd-api/external/apps/a2157wab1045d68672a63557e0n2a77edbfd15ea/api.js" + }, + "data": "kufyHK/s/jTNU...AfwIW", // значение META_TOKEN + "userAgent": "userAgentPlaceholder", + "proxyType": "http", + "proxyAddress": "8.8.8.8", + "proxyPort": 8080, + "proxyLogin": "proxyLoginHere", + "proxyPassword": "proxyPasswordHere" +} + ``` + + **Ответ** + ```json + { + "errorId": 0, + "taskId": 407533072 + } + ``` + + + +## Метод получения результата задачи + +Используйте метод [getTaskResult](../api/methods/get-task-result.mdx), чтобы получить fingerprint X-HD или решение Hunt капчи. + +:::warning **Внимание!** +Значение `solution.token`: +* В режиме генерации X-HD — это X-HD токен, который нужно использовать в запросах к целевому сайту. + +* В режиме решения капчи `solution.token` — это токен решения, который необходимо передать обратно на сайт для подтверждения действия. +::: + + + + ```http + https://api.capmonster.cloud/getTaskResult + ``` + + + **Запрос** + ```json + { + "clientKey":"API_KEY", + "taskId": 407533072 + } + ``` + **Ответ** +```json +{ + "errorId": 0, + "status": "ready", + "solution": { + "data": { + "token": "6IyDCCpDdSK...YGs1Wug/z/kLNSpjewI=" + } + } +} +``` + + + + +## Пример решения Hunt CAPTCHA + +Ниже приведён пример на **Node.js**, который демонстрирует, как создать задачу Hunt CAPTCHA в CapMonster Cloud, дождаться её решения и получить X-HD токен. В коде показано: + +* Как создать HUNT‑задачу с указанием сайта и прокси +* Как ждать готовности решения через API CapMonster +* Как получить результат и извлечь токен для дальнейшего использования на сайте + +>**Важно:** Не забудьте заменить `API_KEY`, `proxyLogin`, `proxyPassword` и другие параметры на свои реальные значения перед запуском. Рекомендуем хранить все чувствительные данные в файле `.env`. + +--- + +
+ Показать код (Node.js) +```js +const API_KEY = "YOUR_API_KEY"; // Замените на ваш API-ключ CapMonster Cloud +const CREATE_TASK_URL = "https://api.capmonster.cloud/createTask"; +const GET_RESULT_URL = "https://api.capmonster.cloud/getTaskResult"; + +const sleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms)); + +async function createHuntTask({ data = null } = {}) { + const payload = { + clientKey: API_KEY, + task: { + type: "CustomTask", + class: "HUNT", + websiteURL: "https://example.com/", + userAgent: + "userAgentPlaceholder", + metadata: { + apiGetLib: + "https://example.com/hd-api/external/apps/a2157wab1045d68672a63557e0n2a77edbfd15ea/api.js", + }, + proxyType: "http", + proxyAddress: "123.45.67.89", + proxyPort: 8080, + proxyLogin: "proxyLogin", + proxyPassword: "proxyPassword", + }, + }; + + if (data) { + payload.task.data = data; + } + + const response = await fetch(CREATE_TASK_URL, { + method: "POST", + headers: { "Content-Type": "application/json" }, + body: JSON.stringify(payload), + }); + + const result = await response.json(); + return result.taskId; +} + +async function waitForResult(taskId) { + while (true) { + await sleep(3000); + + const response = await fetch(GET_RESULT_URL, { + method: "POST", + headers: { "Content-Type": "application/json" }, + body: JSON.stringify({ + clientKey: API_KEY, + taskId: taskId, + }), + }); + + const result = await response.json(); + + if (result.errorId !== 0) { + throw new Error(result.errorDescription); + } + + if (result.status === "processing") { + console.log("Task processing..."); + continue; + } + + if (result.status === "ready") { + console.log("RESPONSE:\n", JSON.stringify(result, null, 2)); + return result.solution; + } + } +} + +async function main() { + try { + console.log("Creating HUNT task (X-HD mode)..."); + + const taskId = await createHuntTask(); + console.log("Task ID:", taskId); + + const xhdToken = await waitForResult(taskId); + console.log("X-HD received:\n", xhdToken); + + // ===== 2. Решение капчи, если нужно ===== + // const siteMetaToken = "SITE_META_TOKEN"; + // const solveTaskId = await createHuntTask({ data: siteMetaToken }); + // const finalSolution = await waitForResult(solveTaskId); + // console.log("Final captcha solution:\n", finalSolution); + } catch (error) { + console.error("Error:", error.message); + } +} + +main(); +``` +
diff --git a/docs/captchas/images/hunt-task/hunt-captcha.png b/docs/captchas/images/hunt-task/hunt-captcha.png new file mode 100644 index 00000000..7507b791 Binary files /dev/null and b/docs/captchas/images/hunt-task/hunt-captcha.png differ diff --git a/docs/captchas/images/hunt-task/token(data).png b/docs/captchas/images/hunt-task/token(data).png new file mode 100644 index 00000000..bfd17c8d Binary files /dev/null and b/docs/captchas/images/hunt-task/token(data).png differ diff --git a/docs/captchas/images/hunt-task/x-hd (data).png b/docs/captchas/images/hunt-task/x-hd (data).png new file mode 100644 index 00000000..e22b4486 Binary files /dev/null and b/docs/captchas/images/hunt-task/x-hd (data).png differ diff --git a/docs/captchas/images/hunt-task/x-hd(data)-1.png b/docs/captchas/images/hunt-task/x-hd(data)-1.png new file mode 100644 index 00000000..607e624b Binary files /dev/null and b/docs/captchas/images/hunt-task/x-hd(data)-1.png differ diff --git a/docs/captchas/images/hunt-task/x-hd(data).png b/docs/captchas/images/hunt-task/x-hd(data).png new file mode 100644 index 00000000..e22b4486 Binary files /dev/null and b/docs/captchas/images/hunt-task/x-hd(data).png differ diff --git a/i18n/en/docusaurus-plugin-content-docs/current/captchas/hunt-task.mdx b/i18n/en/docusaurus-plugin-content-docs/current/captchas/hunt-task.mdx new file mode 100644 index 00000000..f2f5944a --- /dev/null +++ b/i18n/en/docusaurus-plugin-content-docs/current/captchas/hunt-task.mdx @@ -0,0 +1,413 @@ +--- +sidebar_position: 26 +sidebar_label: Hunt +title: "Automatic Detection and Bypass of Hunt CAPTCHA | API" +description: "Learn how to detect Hunt using the automatic CAPTCHA solving API service CapMonster Cloud!" +--- + +import Tabs from '@theme/Tabs'; +import TabItem from '@theme/TabItem'; +import ParamItem from '@theme/ParamItem'; +import MethodItem from '@theme/MethodItem'; +import MethodDescription from '@theme/MethodDescription' +import PriceBlock from '@theme/PriceBlock'; +import PriceBlockWrap from '@theme/PriceBlockWrap'; +import { ArticleHead } from '../../../../../src/theme/ArticleHead'; + + + +# Hunt + + + + + +![](./images/hunt-task/hunt-captcha.png) + + +Hunt CAPTCHA is an anti-bot system used on betting platforms to detect automated activity. It monitors user behavior and, if suspicious actions are detected, triggers an interactive verification. + +:::warning **Attention!** + +* For this task, use **your own proxies**. + +* Our solving system has two operating modes: **X-HD generation (fingerprint)** and **CAPTCHA solving**. If you only want to generate X-HD, do not pass the `data` parameter. If you need to solve the CAPTCHA, pass the token that the target site provides during certain actions (for example, when requesting an SMS). + ::: + +## Request parameters + + + +**CustomTask** + +--- + + +**HUNT** + +--- + + +The URL of the page where the Hunt CAPTCHA is located. + +--- + + + +The full link to the `api.js` file. + +Example: +`https://www.example.com/hd-api/external/apps//api.js` + +Pass it in the following format: +`"apiGetLib":"https://example.com/hd-api/external/apps/a2157wab1045d68672a63557e0n2a77edbfd15ea/api.js"` + +You can find this link in DevTools (the **Network** or **Elements** tabs) on the page with the Hunt CAPTCHA. +Use keyword search such as: `hd-api` or `api.js`. + +--- + + +The `data` parameter must be specified when using CAPTCHA solving mode (see details below). + +--- + + +Browser User-Agent.
+**Provide only the current Windows UA:** userAgentPlaceholder + +--- + + + **http** - regular HTTP/HTTPS proxy;
+ **https** - use if http doesn’t work (required for some custom proxies);
+ **socks4** - SOCKS4 proxy;
+ **socks5** - SOCKS5 proxy. + +--- + + +

+ Proxy IP address (IPv4/IPv6). Not allowed: + - Transparent proxies + - Local machine proxies +

+ +--- + + + Proxy port. + +--- + + + Proxy login. + +--- + + + Proxy password. + +
+--- + +**The solution supports two operating modes:** + +1. **X-HD (fingerprint) generation** + + * In this mode, you do not pass the `data` parameter. + * After creating the task, you will receive an **X-HD** — a unique fingerprint tied to your IP address, which can be used for subsequent requests to the website. + +2. **CAPTCHA solving** + + * In this mode, you must pass a **token** (the value of `meta.token`) in the `data` parameter. This token is issued by the website during specific actions (for example, when requesting an SMS). + * After creating the task, you will receive the **CAPTCHA solution** as a token ready to be used on the website. + +--- + +**When to use each mode:** + +| Situation | Is `data` required? | +| ------------------------------ | ------------------- | +| Initial initialization | No | +| Need to obtain X-HD | No | +| Website returned Captcha error | Yes | +| `meta.token` received | Yes | + +--- + +**Example of a complete workflow:** + +1. Create a task **without `data`** +2. Receive X-HD from our service +3. Send a request to the website using X-HD +4. Receive `meta.token` +5. Create a task **with `data = meta.token`** +6. Receive the solution +7. Submit the solution to the website + +:::warning Important +If you change the proxy, you must obtain a new X-HD. +::: + +## Mode 1. X-HD Generation + +Used to obtain an X-HD token bound to the IP address. + +### Create task method for X-HD generation + + + + ```http + https://api.capmonster.cloud/createTask + ``` + + + **Request** +```json +{ + "type": "CustomTask", + "class": "HUNT", + "websiteURL": "https://example.com", + "metadata": { + "apiGetLib": "https://example.com/hd-api/external/apps/a2157wab1045d68672a63557e0n2a77edbfd15ea/api.js" + }, + "userAgent": "userAgentPlaceholder", + "proxyType": "http", + "proxyAddress": "8.8.8.8", + "proxyPort": 8080, + "proxyLogin": "proxyLoginHere", + "proxyPassword": "proxyPasswordHere" +} +``` + **Response** + + +```json +{ + "errorId": 0, + "taskId": 407533072 +} +``` + + + + +## Mode 2. CAPTCHA solving + +Used after the website returns a captcha error and provides `meta.token`. + +### How to obtain `meta.token` + +1. Send a request to the website (for example, an SMS request). +2. Receive X-HD. + +![](./images/hunt-task/x-hd(data).png) +![](./images/hunt-task/x-hd(data)-1.png) + +3. The website responds with: + +```json +{ + "errors": [{"code": "113", "title": "Captcha error"}], + "meta": { + "token": "SITE_META_TOKEN" + } +} +``` +![](./images/hunt-task/token(data).png) + + +### Create task method for CAPTCHA solving + +The value of `meta.token` must be passed in the `data` parameter. + + + + ```http + https://api.capmonster.cloud/createTask + ``` + + + **Request** +```json +{ + "type": "CustomTask", + "class": "HUNT", + "websiteUrl": "https://example.com", + "metadata": { + "apiGetLib": "https://example.com/hd-api/external/apps/a2157wab1045d68672a63557e0n2a77edbfd15ea/api.js" + }, + "data": "kufyHK/s/jTNU...AfwIW", // META_TOKEN value + "userAgent": "userAgentPlaceholder", + "proxyType": "http", + "proxyAddress": "8.8.8.8", + "proxyPort": 8080, + "proxyLogin": "proxyLoginHere", + "proxyPassword": "proxyPasswordHere" +} +``` + + **Response** + +```json +{ + "errorId": 0, + "taskId": 407533072 +} +``` + + + +## Get task result method + +Use the [getTaskResult](../api/methods/get-task-result.mdx) method to obtain the X-HD fingerprint or the Hunt CAPTCHA solution. + +:::warning **Attention!** +The value of `solution.token`: + +* In X-HD generation mode — this is the X-HD token that must be used in requests to the target website. + +* In CAPTCHA solving mode — `solution.token` is the solution token that must be sent back to the website to confirm the action. + ::: + + + + ```http + https://api.capmonster.cloud/getTaskResult + ``` + + + **Request** + ```json + { + "clientKey": "API_KEY", + "taskId": 407533072 + } + ``` + **Response** +```json +{ + "errorId": 0, + "status": "ready", + "solution": { + "data": { + "token": "6IyDCCpDdSK...YGs1Wug/z/kLNSpjewI=" + } + } +} +``` + + + +## Hunt CAPTCHA solving example + +Below is a **Node.js** example demonstrating how to create a Hunt CAPTCHA task in CapMonster Cloud, wait for the solution, and obtain the X-HD token. The code shows: + +* How to create a HUNT task with the target website and proxy +* How to wait for the solution using the CapMonster API +* How to retrieve the result and extract the token for further use on the website + +> **Important:** Make sure to replace `API_KEY`, `proxyLogin`, `proxyPassword`, and other parameters with your real values before running the script. We recommend storing all sensitive data in a `.env` file. + +--- + +
+ Show code (Node.js) + +```js +const API_KEY = "YOUR_API_KEY"; // Replace with your CapMonster Cloud API key +const CREATE_TASK_URL = "https://api.capmonster.cloud/createTask"; +const GET_RESULT_URL = "https://api.capmonster.cloud/getTaskResult"; + +const sleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms)); + +async function createHuntTask({ data = null } = {}) { + const payload = { + clientKey: API_KEY, + task: { + type: "CustomTask", + class: "HUNT", + websiteURL: "https://example.com/", + userAgent: "userAgentPlaceholder", + metadata: { + apiGetLib: + "https://example.com/hd-api/external/apps/a2157wab1045d68672a63557e0n2a77edbfd15ea/api.js", + }, + proxyType: "http", + proxyAddress: "123.45.67.89", + proxyPort: 8080, + proxyLogin: "proxyLogin", + proxyPassword: "proxyPassword", + }, + }; + + if (data) { + payload.task.data = data; + } + + const response = await fetch(CREATE_TASK_URL, { + method: "POST", + headers: { "Content-Type": "application/json" }, + body: JSON.stringify(payload), + }); + + const result = await response.json(); + return result.taskId; +} + +async function waitForResult(taskId) { + while (true) { + await sleep(3000); + + const response = await fetch(GET_RESULT_URL, { + method: "POST", + headers: { "Content-Type": "application/json" }, + body: JSON.stringify({ + clientKey: API_KEY, + taskId: taskId, + }), + }); + + const result = await response.json(); + + if (result.errorId !== 0) { + throw new Error(result.errorDescription); + } + + if (result.status === "processing") { + console.log("Task processing..."); + continue; + } + + if (result.status === "ready") { + console.log("RESPONSE:\n", JSON.stringify(result, null, 2)); + return result.solution; + } + } +} + +async function main() { + try { + console.log("Creating HUNT task (X-HD mode)..."); + + const taskId = await createHuntTask(); + console.log("Task ID:", taskId); + + const xhdToken = await waitForResult(taskId); + console.log("X-HD received:\n", xhdToken); + + // ===== 2. CAPTCHA solving, if needed ===== + // const siteMetaToken = "SITE_META_TOKEN"; + // const solveTaskId = await createHuntTask({ data: siteMetaToken }); + // const finalSolution = await waitForResult(solveTaskId); + // console.log("Final captcha solution:\n", finalSolution); + } catch (error) { + console.error("Error:", error.message); + } +} + +main(); +``` + +
diff --git a/i18n/en/docusaurus-plugin-content-docs/current/captchas/images/hunt-task/hunt-captcha.png b/i18n/en/docusaurus-plugin-content-docs/current/captchas/images/hunt-task/hunt-captcha.png new file mode 100644 index 00000000..7507b791 Binary files /dev/null and b/i18n/en/docusaurus-plugin-content-docs/current/captchas/images/hunt-task/hunt-captcha.png differ diff --git a/i18n/en/docusaurus-plugin-content-docs/current/captchas/images/hunt-task/token(data).png b/i18n/en/docusaurus-plugin-content-docs/current/captchas/images/hunt-task/token(data).png new file mode 100644 index 00000000..bfd17c8d Binary files /dev/null and b/i18n/en/docusaurus-plugin-content-docs/current/captchas/images/hunt-task/token(data).png differ diff --git a/i18n/en/docusaurus-plugin-content-docs/current/captchas/images/hunt-task/x-hd (data).png b/i18n/en/docusaurus-plugin-content-docs/current/captchas/images/hunt-task/x-hd (data).png new file mode 100644 index 00000000..e22b4486 Binary files /dev/null and b/i18n/en/docusaurus-plugin-content-docs/current/captchas/images/hunt-task/x-hd (data).png differ diff --git a/i18n/en/docusaurus-plugin-content-docs/current/captchas/images/hunt-task/x-hd(data)-1.png b/i18n/en/docusaurus-plugin-content-docs/current/captchas/images/hunt-task/x-hd(data)-1.png new file mode 100644 index 00000000..607e624b Binary files /dev/null and b/i18n/en/docusaurus-plugin-content-docs/current/captchas/images/hunt-task/x-hd(data)-1.png differ diff --git a/i18n/en/docusaurus-plugin-content-docs/current/captchas/images/hunt-task/x-hd(data).png b/i18n/en/docusaurus-plugin-content-docs/current/captchas/images/hunt-task/x-hd(data).png new file mode 100644 index 00000000..e22b4486 Binary files /dev/null and b/i18n/en/docusaurus-plugin-content-docs/current/captchas/images/hunt-task/x-hd(data).png differ diff --git a/i18n/pt-br/docusaurus-plugin-content-docs/current/captchas/hunt-task.mdx b/i18n/pt-br/docusaurus-plugin-content-docs/current/captchas/hunt-task.mdx new file mode 100644 index 00000000..2c4eb3d0 --- /dev/null +++ b/i18n/pt-br/docusaurus-plugin-content-docs/current/captchas/hunt-task.mdx @@ -0,0 +1,414 @@ +--- +sidebar_position: 26 +sidebar_label: Hunt +title: "Detecção e Bypass Automático do Hunt CAPTCHA | API" +description: "Descubra como detectar o Hunt usando a API do serviço de reconhecimento e resolução automática de CAPTCHAs da CapMonster Cloud!" +--- + +import Tabs from '@theme/Tabs'; +import TabItem from '@theme/TabItem'; +import ParamItem from '@theme/ParamItem'; +import MethodItem from '@theme/MethodItem'; +import MethodDescription from '@theme/MethodDescription' +import PriceBlock from '@theme/PriceBlock'; +import PriceBlockWrap from '@theme/PriceBlockWrap'; +import { ArticleHead } from '../../../../../src/theme/ArticleHead'; + + + +# Hunt + + + + + +![](./images/hunt-task/hunt-captcha.png) + +Hunt CAPTCHA é um sistema anti-bot utilizado em plataformas de apostas para detectar atividade automatizada. Ele monitora o comportamento do usuário e, ao identificar ações suspeitas, inicia uma verificação interativa. + +:::warning **Atenção!** + +* Para executar esta tarefa, utilize **seus próprios proxies**. + +* Nosso sistema de resolução possui dois modos de operação: **geração de X-HD (fingerprint)** e **resolução de CAPTCHA**. Se você deseja apenas gerar o X-HD, não envie o parâmetro `data`. Se precisar resolver o CAPTCHA, envie em `data` o token que o site de destino fornece durante determinadas ações (por exemplo, ao solicitar um SMS). + ::: + +## Parâmetros da solicitação + + + +**CustomTask** + +--- + + +**HUNT** + +--- + + +Endereço da página onde o Hunt CAPTCHA está localizado. + +--- + + + +Link completo para o arquivo `api.js`. + +Exemplo: +`https://www.example.com/hd-api/external/apps//api.js` + +Envie no seguinte formato: +`"apiGetLib":"https://example.com/hd-api/external/apps/a2157wab1045d68672a63557e0n2a77edbfd15ea/api.js"` + +Você pode encontrar esse link no DevTools (abas **Network** ou **Elements**) na página com o Hunt CAPTCHA. +Use a busca por palavras-chave como: `hd-api` ou `api.js`. + +--- + + +O parâmetro `data` deve ser especificado ao utilizar o modo de resolução de CAPTCHA (veja mais detalhes abaixo). + +--- + + + User-Agent do navegador.
+ **Forneça apenas o UA do Windows atual:** userAgentPlaceholder + +--- + + +**http** - proxy HTTP/HTTPS normal;
+**https** - use se http não funcionar (necessário para alguns proxies personalizados);
+**socks4** - proxy SOCKS4;
+**socks5** - proxy SOCKS5. + +--- + + +

+Endereço IP do proxy (IPv4/IPv6). Não permitido: +- Proxies transparentes +- Proxies da máquina local +

+ +--- + + +Porta do proxy. + +--- + + +Login do proxy. + +--- + + +Senha do proxy. + +
+ + +**A solução suporta dois modos de operação:** + +1. **Geração de X-HD (fingerprint)** + + * Neste modo, você não envia o parâmetro `data`. + * Após criar a tarefa, você receberá o **X-HD** — uma impressão digital única vinculada ao seu IP, que pode ser utilizada em requisições subsequentes ao site. + +2. **Resolução de CAPTCHA** + + * Neste modo, você deve enviar em `data` o **token** (valor de `meta.token`) que o site fornece durante determinadas ações (por exemplo, ao solicitar um SMS). + * Após criar a tarefa, você receberá a **solução do CAPTCHA** na forma de um token pronto para ser utilizado no site. + +--- + +**Quando utilizar cada modo:** + +| Situação | É necessário enviar `data`? | +| ------------------------------- | --------------------------- | +| Inicialização primária | Não | +| Precisa obter X-HD | Não | +| O site retornou erro de CAPTCHA | Sim | +| `meta.token` recebido | Sim | + +--- + +**Exemplo de fluxo completo:** + +1. Criar uma tarefa **sem `data`** +2. Receber o X-HD do nosso serviço +3. Enviar uma requisição ao site utilizando o X-HD +4. Receber `meta.token` +5. Criar uma tarefa **com `data = meta.token`** +6. Receber a solução +7. Enviar a solução ao site + +:::warning Importante +Ao trocar o proxy, é necessário obter um novo X-HD. +::: + +--- + +## Modo 1. Geração de X-HD + +Utilizado para obter o token X-HD vinculado ao IP. + +### Método de criação de tarefa para geração de X-HD + + + + ```http + https://api.capmonster.cloud/createTask + ``` + + + **Requisição** +```json +{ + "type": "CustomTask", + "class": "HUNT", + "websiteURL": "https://example.com", + "metadata": { + "apiGetLib": "https://example.com/hd-api/external/apps/a2157wab1045d68672a63557e0n2a77edbfd15ea/api.js" + }, + "userAgent": "userAgentPlaceholder", + "proxyType": "http", + "proxyAddress": "8.8.8.8", + "proxyPort": 8080, + "proxyLogin": "proxyLoginHere", + "proxyPassword": "proxyPasswordHere" +} +``` + + **Resposta** + +```json +{ + "errorId": 0, + "taskId": 407533072 +} +``` + + + +## Modo 2. Resolução de CAPTCHA + +Utilizado após o site retornar um erro de captcha e fornecer `meta.token`. + +### Como obter `meta.token` + +1. Faça uma requisição ao site (por exemplo, uma solicitação de SMS). +2. Receba o X-HD. + +![](./images/hunt-task/x-hd(data).png) +![](./images/hunt-task/x-hd(data)-1.png) + +3. O site retorna: + +```json +{ + "errors": [{"code": "113", "title": "Captcha error"}], + "meta": { + "token": "SITE_META_TOKEN" + } +} +``` + +![](./images/hunt-task/token(data).png) + +--- + +### Método de criação de tarefa para resolução de CAPTCHA + +O valor de `meta.token` deve ser enviado no parâmetro `data`. + + + + ```http + https://api.capmonster.cloud/createTask + ``` + + + **Requisição** +```json +{ + "type": "CustomTask", + "class": "HUNT", + "websiteUrl": "https://example.com", + "metadata": { + "apiGetLib": "https://example.com/hd-api/external/apps/a2157wab1045d68672a63557e0n2a77edbfd15ea/api.js" + }, + "data": "kufyHK/s/jTNU...AfwIW", // valor de META_TOKEN + "userAgent": "userAgentPlaceholder", + "proxyType": "http", + "proxyAddress": "8.8.8.8", + "proxyPort": 8080, + "proxyLogin": "proxyLoginHere", + "proxyPassword": "proxyPasswordHere" +} +``` + + **Resposta** +```json +{ + "errorId": 0, + "taskId": 407533072 +} +``` + + + +## Método para obter o resultado da tarefa + +Use o método [getTaskResult](../api/methods/get-task-result.mdx) para obter o fingerprint X-HD ou a solução da CAPTCHA Hunt. + +:::warning **Atenção!** +Valor de `solution.token`: + +* No modo de geração de X-HD — este é o token X-HD que deve ser utilizado nas requisições ao site de destino. + +* No modo de resolução da CAPTCHA — `solution.token` é o token de solução que deve ser enviado de volta ao site para confirmar a ação. + ::: + + + + ```http + https://api.capmonster.cloud/getTaskResult + ``` + + + **Requisição** + ```json + { + "clientKey":"API_KEY", + "taskId": 407533072 + } + ``` + **Resposta** +```json +{ + "errorId": 0, + "status": "ready", + "solution": { + "data": { + "token": "6IyDCCpDdSK...YGs1Wug/z/kLNSpjewI=" + } + } +} +``` + + + +## Exemplo de resolução do Hunt CAPTCHA + +A seguir está um exemplo em **Node.js**, que demonstra como criar uma tarefa Hunt CAPTCHA no CapMonster Cloud, aguardar sua resolução e obter o token X-HD. No código é mostrado: + +* Como criar uma tarefa HUNT indicando o site e o proxy +* Como aguardar a conclusão da tarefa via API do CapMonster +* Como obter o resultado e extrair o token para uso posterior no site + +> **Importante:** Não se esqueça de substituir `API_KEY`, `proxyLogin`, `proxyPassword` e outros parâmetros pelos seus valores reais antes de executar. Recomendamos armazenar todos os dados sensíveis em um arquivo `.env`. + + +
+Mostrar código (Node.js) + +```js +const API_KEY = "YOUR_API_KEY"; // Substitua pela sua chave de API do CapMonster Cloud +const CREATE_TASK_URL = "https://api.capmonster.cloud/createTask"; +const GET_RESULT_URL = "https://api.capmonster.cloud/getTaskResult"; + +const sleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms)); + +async function createHuntTask({ data = null } = {}) { + const payload = { + clientKey: API_KEY, + task: { + type: "CustomTask", + class: "HUNT", + websiteURL: "https://example.com/", + userAgent: + "userAgentPlaceholder", + metadata: { + apiGetLib: + "https://example.com/hd-api/external/apps/a2157wab1045d68672a63557e0n2a77edbfd15ea/api.js", + }, + proxyType: "http", + proxyAddress: "123.45.67.89", + proxyPort: 8080, + proxyLogin: "proxyLogin", + proxyPassword: "proxyPassword", + }, + }; + + if (data) { + payload.task.data = data; + } + + const response = await fetch(CREATE_TASK_URL, { + method: "POST", + headers: { "Content-Type": "application/json" }, + body: JSON.stringify(payload), + }); + + const result = await response.json(); + return result.taskId; +} + +async function waitForResult(taskId) { + while (true) { + await sleep(3000); + + const response = await fetch(GET_RESULT_URL, { + method: "POST", + headers: { "Content-Type": "application/json" }, + body: JSON.stringify({ + clientKey: API_KEY, + taskId: taskId, + }), + }); + + const result = await response.json(); + + if (result.errorId !== 0) { + throw new Error(result.errorDescription); + } + + if (result.status === "processing") { + console.log("Tarefa em processamento..."); + continue; + } + + if (result.status === "ready") { + console.log("RESPOSTA:\n", JSON.stringify(result, null, 2)); + return result.solution; + } + } +} + +async function main() { + try { + console.log("Criando tarefa HUNT (modo X-HD)..."); + + const taskId = await createHuntTask(); + console.log("ID da tarefa:", taskId); + + const xhdToken = await waitForResult(taskId); + console.log("X-HD recebido:\n", xhdToken); + + // ===== 2. Resolver a captcha, se necessário ===== + // const siteMetaToken = "SITE_META_TOKEN"; + // const solveTaskId = await createHuntTask({ data: siteMetaToken }); + // const finalSolution = await waitForResult(solveTaskId); + // console.log("Solução final da captcha:\n", finalSolution); + } catch (error) { + console.error("Erro:", error.message); + } +} + +main(); +``` +
+ diff --git a/i18n/pt-br/docusaurus-plugin-content-docs/current/captchas/images/hunt-task/hunt-captcha.png b/i18n/pt-br/docusaurus-plugin-content-docs/current/captchas/images/hunt-task/hunt-captcha.png new file mode 100644 index 00000000..7507b791 Binary files /dev/null and b/i18n/pt-br/docusaurus-plugin-content-docs/current/captchas/images/hunt-task/hunt-captcha.png differ diff --git a/i18n/pt-br/docusaurus-plugin-content-docs/current/captchas/images/hunt-task/token(data).png b/i18n/pt-br/docusaurus-plugin-content-docs/current/captchas/images/hunt-task/token(data).png new file mode 100644 index 00000000..bfd17c8d Binary files /dev/null and b/i18n/pt-br/docusaurus-plugin-content-docs/current/captchas/images/hunt-task/token(data).png differ diff --git a/i18n/pt-br/docusaurus-plugin-content-docs/current/captchas/images/hunt-task/x-hd (data).png b/i18n/pt-br/docusaurus-plugin-content-docs/current/captchas/images/hunt-task/x-hd (data).png new file mode 100644 index 00000000..e22b4486 Binary files /dev/null and b/i18n/pt-br/docusaurus-plugin-content-docs/current/captchas/images/hunt-task/x-hd (data).png differ diff --git a/i18n/pt-br/docusaurus-plugin-content-docs/current/captchas/images/hunt-task/x-hd(data)-1.png b/i18n/pt-br/docusaurus-plugin-content-docs/current/captchas/images/hunt-task/x-hd(data)-1.png new file mode 100644 index 00000000..607e624b Binary files /dev/null and b/i18n/pt-br/docusaurus-plugin-content-docs/current/captchas/images/hunt-task/x-hd(data)-1.png differ diff --git a/i18n/pt-br/docusaurus-plugin-content-docs/current/captchas/images/hunt-task/x-hd(data).png b/i18n/pt-br/docusaurus-plugin-content-docs/current/captchas/images/hunt-task/x-hd(data).png new file mode 100644 index 00000000..e22b4486 Binary files /dev/null and b/i18n/pt-br/docusaurus-plugin-content-docs/current/captchas/images/hunt-task/x-hd(data).png differ diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/captchas/hunt-task.mdx b/i18n/zh/docusaurus-plugin-content-docs/current/captchas/hunt-task.mdx new file mode 100644 index 00000000..dcafa660 --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/captchas/hunt-task.mdx @@ -0,0 +1,420 @@ +--- +sidebar_position: 26 +sidebar_label: Hunt +title: "自动识别与绕过 Hunt CAPTCHA | API" +description: "了解如何使用 CapMonster Cloud 的自动识别与验证码解决服务,通过 API 识别 Hunt!" +--- + +import Tabs from '@theme/Tabs'; +import TabItem from '@theme/TabItem'; +import ParamItem from '@theme/ParamItem'; +import MethodItem from '@theme/MethodItem'; +import MethodDescription from '@theme/MethodDescription' +import PriceBlock from '@theme/PriceBlock'; +import PriceBlockWrap from '@theme/PriceBlockWrap'; +import { ArticleHead } from '../../../../../src/theme/ArticleHead'; + + + +# Hunt + + + + + +![](./images/hunt-task/hunt-captcha.png) + +Hunt 验证码是一种用于博彩平台的反机器人系统,用于检测自动化行为。它会跟踪用户行为,并在检测到可疑活动时启动交互式验证。 + +:::warning **注意!** + +* 要完成此任务,请使用**您自己的代理**。 + +* 我们的解决系统有两种工作模式:**生成 X-HD(指纹)** 和 **验证码求解**。如果您只需要生成 X-HD,请不要传递 `data` 参数。如果您需要解决验证码,请在 `data` 中传递目标网站在特定操作时生成的令牌(例如请求短信时)。 + ::: + +## 请求参数 + + + + +**CustomTask** + +--- + + +**HUNT** + +--- + + +包含 Hunt 验证码的页面地址。 + +--- + + + +`api.js` 文件的完整链接。 + +示例: +`https://www.example.com/hd-api/external/apps//api.js` + +请按以下格式传递: +`"apiGetLib":"https://example.com/hd-api/external/apps/a2157wab1045d68672a63557e0n2a77edbfd15ea/api.js"` + +您可以在包含 Hunt 验证码的页面中,通过 DevTools(**Network** 或 **Elements** 标签)找到该链接。 +使用关键字搜索:`hd-api` 或 `api.js`。 + +--- + + +当选择验证码求解模式时,需要传递 `data`(详见下文说明)。 + +--- + + +浏览器的 User-Agent。
+**请仅传递来自 Windows 操作系统的最新 UA。目前为**:`userAgentPlaceholder` + +--- + + +**http** - 常规 HTTP/HTTPS 代理;
+**https** - 当 http 不可用时使用(某些自定义代理必填);
+**socks4** - SOCKS4 代理;
+**socks5** - SOCKS5 代理。 + +--- + + +

+代理 IP 地址(IPv4/IPv6)。禁止使用: +- 透明代理 +- 本地机器代理 +

+ +--- + + +代理端口 + +--- + + +代理登录名 + +--- + + +代理密码 + +
+--- + +**该解决方案支持两种工作模式:** + +### 1. 生成 X-HD(指纹) + +* 在此模式下,您无需传递 `data`。 +* 创建任务后,您将获得 **X-HD** —— 一个与您的 IP 绑定的唯一指纹,可用于后续向网站发送请求。 + +### 2. 验证码求解 + +* 在此模式下,您需要在参数 `data` 中传递网站在特定操作时生成的**令牌**(`meta.token`),例如在请求短信时。 +* 创建任务后,您将获得**验证码解决结果**,即一个可直接在网站上使用的令牌。 + +--- + +### 何时使用每种模式 + +| 场景 | 是否需要传递 `data`? | +| ------------------ | -------------- | +| 初始初始化 | 否 | +| 需要获取 X-HD | 否 | +| 网站返回 Captcha error | 是 | +| 已获得 `meta.token` | 是 | + +--- + +### 完整工作流程示例 + +1. 创建任务 **不传递 `data`** +2. 从我们的服务获取 X-HD +3. 使用 X-HD 向网站发送请求 +4. 获取 `meta.token` +5. 创建任务 **并设置 `data = meta.token`** +6. 获取解决结果 +7. 将解决结果提交到网站 + +:::warning 重要 +如果更换代理,需要重新获取 X-HD。 +::: + +## 模式 1:生成 X-HD + +用于获取与 IP 绑定的 X-HD 令牌。 + +### 创建用于生成 X-HD 的任务方法 + + + + ```http + https://api.capmonster.cloud/createTask + ``` + + + **请求** +```json +{ + "type": "CustomTask", + "class": "HUNT", + "websiteURL": "https://example.com", + "metadata": { + "apiGetLib": "https://example.com/hd-api/external/apps/a2157wab1045d68672a63557e0n2a77edbfd15ea/api.js" + }, + "userAgent": "userAgentPlaceholder", + "proxyType": "http", + "proxyAddress": "8.8.8.8", + "proxyPort": 8080, + "proxyLogin": "proxyLoginHere", + "proxyPassword": "proxyPasswordHere" + } +} +``` + +**响应** + +```json +{ + "errorId": 0, + "taskId": 407533072 +} +``` + + + +--- + +## 模式 2:验证码求解 + +当网站返回 captcha 错误并提供 `meta.token` 后使用。 + +### 如何获取 `meta.token` + +1. 向网站发送请求(例如请求短信验证码) +2. 获取 X-HD + +![](./images/hunt-task/x-hd(data).png) +![](./images/hunt-task/x-hd(data)-1.png) + +3. 网站返回: + +```json +{ + "errors":[{"code":"113","title":"Captcha error"}], + "meta":{ + "token":"SITE_META_TOKEN" + } +} +``` + +![](./images/hunt-task/token(data).png) + +### 创建用于验证码求解的任务方法 + +需要将 `meta.token` 的值传递到 `data` 参数中。 + + + + ```http + https://api.capmonster.cloud/createTask + ``` + + + **请求** +```json +{ + "type": "CustomTask", + "class": "HUNT", + "websiteUrl": "https://example.com", + "metadata": { + "apiGetLib": "https://example.com/hd-api/external/apps/a2157wab1045d68672a63557e0n2a77edbfd15ea/api.js" + }, + "data": "kufyHK/s/jTNU...AfwIW", // META_TOKEN 的值 + "userAgent": "userAgentPlaceholder", + "proxyType": "http", + "proxyAddress": "8.8.8.8", + "proxyPort": 8080, + "proxyLogin": "proxyLoginHere", + "proxyPassword": "proxyPasswordHere" +} +``` + +**响应** + +```json +{ + "errorId": 0, + "taskId": 407533072 +} +``` + + + +## 获取任务结果的方法 + +使用 [getTaskResult](../api/methods/get-task-result.mdx) 方法来获取 X-HD 指纹或 Hunt 验证码的解决结果。 + +:::warning **注意!** +`solution.token` 的值: + +* 在生成 X-HD 模式下 —— 这是 X-HD 令牌,需要在向目标网站发送请求时使用。 + +* 在验证码求解模式下 —— `solution.token` 是验证码解决令牌,需要将其提交回网站以确认操作。 + ::: + + + + ```http + https://api.capmonster.cloud/getTaskResult + ``` + + + **请求** + ```json + { + "clientKey":"API_KEY", + "taskId": 407533072 + } + ``` + **响应** +```json +{ + "errorId": 0, + "status": "ready", + "solution": { + "data": { + "token": "6IyDCCpDdSK...YGs1Wug/z/kLNSpjewI=" + } + } +} +``` + + + +--- + +## Hunt CAPTCHA 解决示例 + +下面提供一个 **Node.js** 示例,演示如何在 CapMonster Cloud 中创建 Hunt CAPTCHA 任务、等待其完成,并获取 X-HD 令牌。代码中展示了: + +* 如何创建带有网站和代理信息的 HUNT 任务 +* 如何通过 CapMonster API 等待任务完成 +* 如何获取结果并提取令牌以便在网站上使用 + +> **重要:** 在运行前,请务必将 `API_KEY`、`proxyLogin`、`proxyPassword` 以及其他参数替换为您的真实值。建议将所有敏感数据存储在 `.env` 文件中。 + +--- + +
+显示中文注释版代码 (Node.js) + +```javascript +const API_KEY = "YOUR_API_KEY"; // 替换为你的 CapMonster Cloud API 密钥 +const CREATE_TASK_URL = "https://api.capmonster.cloud/createTask"; +const GET_RESULT_URL = "https://api.capmonster.cloud/getTaskResult"; + +const sleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms)); + +// 创建 HUNT 任务 +async function createHuntTask({ data = null } = {}) { + const payload = { + clientKey: API_KEY, + task: { + type: "CustomTask", + class: "HUNT", + websiteURL: "https://example.com/", // 目标网站 URL + userAgent: + "userAgentPlaceholder", // 用户代理 + metadata: { + apiGetLib: + "https://example.com/hd-api/external/apps/a2157wab1045d68672a63557e0n2a77edbfd15ea/api.js", // HUNT API 脚本 + }, + proxyType: "http", // 代理类型 + proxyAddress: "123.45.67.89", // 代理地址 + proxyPort: 8080, // 代理端口 + proxyLogin: "proxyLogin", // 代理用户名 + proxyPassword: "proxyPassword", // 代理密码 + }, + }; + + if (data) { + payload.task.data = data; + } + + const response = await fetch(CREATE_TASK_URL, { + method: "POST", + headers: { "Content-Type": "application/json" }, + body: JSON.stringify(payload), + }); + + const result = await response.json(); + return result.taskId; // 返回任务 ID +} + +// 等待任务结果 +async function waitForResult(taskId) { + while (true) { + await sleep(3000); // 每 3 秒轮询一次 + + const response = await fetch(GET_RESULT_URL, { + method: "POST", + headers: { "Content-Type": "application/json" }, + body: JSON.stringify({ + clientKey: API_KEY, + taskId: taskId, + }), + }); + + const result = await response.json(); + + if (result.errorId !== 0) { + throw new Error(result.errorDescription); // 出现错误时抛出异常 + } + + if (result.status === "processing") { + console.log("任务处理中..."); + continue; + } + + if (result.status === "ready") { + console.log("响应结果:\n", JSON.stringify(result, null, 2)); + return result.solution; // 返回任务解决方案 + } + } +} + +// 主函数 +async function main() { + try { + console.log("创建 HUNT 任务(X-HD 模式)..."); + + const taskId = await createHuntTask(); + console.log("任务 ID:", taskId); + + const xhdToken = await waitForResult(taskId); + console.log("收到 X-HD:\n", xhdToken); + + // ===== 如果需要,可以继续解决验证码 ===== + // const siteMetaToken = "SITE_META_TOKEN"; + // const solveTaskId = await createHuntTask({ data: siteMetaToken }); + // const finalSolution = await waitForResult(solveTaskId); + // console.log("最终验证码解决方案:\n", finalSolution); + } catch (error) { + console.error("错误:", error.message); + } +} + +main(); +``` +
diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/captchas/images/hunt-task/hunt-captcha.png b/i18n/zh/docusaurus-plugin-content-docs/current/captchas/images/hunt-task/hunt-captcha.png new file mode 100644 index 00000000..7507b791 Binary files /dev/null and b/i18n/zh/docusaurus-plugin-content-docs/current/captchas/images/hunt-task/hunt-captcha.png differ diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/captchas/images/hunt-task/token(data).png b/i18n/zh/docusaurus-plugin-content-docs/current/captchas/images/hunt-task/token(data).png new file mode 100644 index 00000000..bfd17c8d Binary files /dev/null and b/i18n/zh/docusaurus-plugin-content-docs/current/captchas/images/hunt-task/token(data).png differ diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/captchas/images/hunt-task/x-hd (data).png b/i18n/zh/docusaurus-plugin-content-docs/current/captchas/images/hunt-task/x-hd (data).png new file mode 100644 index 00000000..e22b4486 Binary files /dev/null and b/i18n/zh/docusaurus-plugin-content-docs/current/captchas/images/hunt-task/x-hd (data).png differ diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/captchas/images/hunt-task/x-hd(data)-1.png b/i18n/zh/docusaurus-plugin-content-docs/current/captchas/images/hunt-task/x-hd(data)-1.png new file mode 100644 index 00000000..607e624b Binary files /dev/null and b/i18n/zh/docusaurus-plugin-content-docs/current/captchas/images/hunt-task/x-hd(data)-1.png differ diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/captchas/images/hunt-task/x-hd(data).png b/i18n/zh/docusaurus-plugin-content-docs/current/captchas/images/hunt-task/x-hd(data).png new file mode 100644 index 00000000..e22b4486 Binary files /dev/null and b/i18n/zh/docusaurus-plugin-content-docs/current/captchas/images/hunt-task/x-hd(data).png differ