EveryInfra

Binance 验证码

Binance 验证码Binance自研滑块拼图为主(`captchaType` 返回 `SLIDE`),连续失败后升级为图片多选 / 网格点选(`BOX`)一个方形挑战框,把左侧的拼图碎片沿水平方向拖到大图缺口处,文案是 "Slide to complete the puzzle"。失败几次后换成「选出所有含 XX 的图片」这类多选题。整块 UI 以 SVG 组件渲染在页面里,不是 iframe。

正在查询可用性…$3.06 / 1K 次按成功计费,失败退款

接口规格

项目
typebinance
必填参数validate_id
可选参数biz_idwebsite_urlwebsite_key
返回一个 token 字符串solution.token
怎么用这个解回填目标站的校验参数
价格$3.06 / 1K 次 —— 按成功计费,没解出来退款
厂商文档Binance 官方文档

参数去页面哪里取

下面全部是可以直接照做的定位方法 —— DOM 属性名、JS 全局变量名、script 上的 query 参数。

我们必填 validate_id,可选 biz_idwebsite_urlwebsite_key(能传就一起传)。这两个值只在网络请求里出现,页面 DOM 上一个都没有 —— validate_id 来自 securityCheckResponseValidateId(precheck 响应里字段名是 validateId,个别页面叫 securityId);biz_id 就是 bizId / bizType,取值如 loginregister

最快的取法是挂一个 fetch 钩子,贴进控制台后再点一次登录/注册:

(()=>{const f=window.fetch;window.fetch=async(...a)=>{
  const u=String(a[0]&&a[0].url||a[0]||'');
  try{ if(/precheck|antibot\/getCaptcha|antibot\/validateCaptcha|check\/result/.test(u))
        console.log('[bnc REQ]',u,a[1]&&a[1].body); }catch(e){}
  const r=await f(...a);
  if(/precheck|antibot\/getCaptcha/.test(u))
    r.clone().json().then(j=>console.log('[bnc RES]',u,j&&j.data)).catch(()=>{});
  return r;};})()
// 控制台会打印出 validateId / sessionId / bizId / sig / salt / path2 / captchaType

不想改页面就用 DevTools 的 Network 面板筛 antibot/getCaptcha,请求体里 bizIdsecurityCheckResponseValidateId 一眼可见;captchaTypebCAPTCHA2 就说明命中的是这一条。

调用示例

一个端点解全部验证码类型 —— 换一种验证码只改 type 这一个字段。

请求
curl -X POST https://api.everyinfra.com/api/v1/captcha \  -H "Authorization: Bearer omg_你的KEY" \  -H "Content-Type: application/json" \  -d '{"type":"binance","validate_id":"<validate_id>"}'
响应
{  "solution": {    "token": "…"  },  "billing": { "charged": true, "credits": 220 }}

怎么确认目标站用的就是它

三步链路,全部在币安自有域下(`accounts.binance.com` + `bin.bnbstatic.com`),没有任何第三方验证码厂商参与。① `POST /bapi/accounts/v1/public/account/security/request/precheck`(body 带 `email`、`bizType`)返回 `captchaType: "bCAPTCHA2"`、`sessionId`、`validateId`、`validationTypes`。② `POST /bapi/composite/v1/public/antibot/getCaptcha`(表单参数 `bizId`、`sv`、`lang`、`securityCheckResponseValidateId`、`clientType`)返回 `sig`、`salt`、`path2`(图片路径,拼在 `https://bin.bnbstatic.com` 之后)、`ek`、`captchaType`、`tag`。③ `POST /bapi/composite/v1/public/antibot/validateCaptcha` 提交加密的 `data`(鼠标轨迹 + 浏览器指纹)与签名 `s`,成功返回 `token`,格式为 `captcha#<id>-<sig>`;再由 `/bapi/accounts/v1/public/account/security/check/result`(`sessionId` + `validateCodeType` + `bCaptchaToken`)收口。客户端逻辑在 `https://bin.bnbstatic.com/static/js/se/captcha/v1/captcha.min.js`,另有全站常驻的指纹脚本 `se_new.min.js`;请求头带 `device-info`(base64 JSON 设备指纹)、`captcha-sdk-version`、`x-captcha-se`、`bnc-uuid`、`fvideo-id`、`clienttype`。

容易搞混的

不是 reCAPTCHA、不是 GeeTest、不是任何外采产品 —— 脚本与图片全在 accounts.binance.com / bin.bnbstatic.com 自有域下。也别和币安的 2FA(验证器 App)、Passkey 通行密钥、人脸识别混为一谈:那些是身份验证,和这里的人机验证不是一层。

去看 GeeTest 那一条 →

常见部署场景

已知的坑

解出验证码 ≠ 能登录。 验证码之后还叠着设备指纹与账号风控(device-info 头、se_new.min.jsbnc-uuidfvideo-id)。我们交付的是过验证码这一关,登录仍可能被后置风控拦下,那不在本能力范围内。

返回的 tokencaptcha# 前缀,那是值的一部分,不要截断

Alpha 抢购这类场景对时延极敏感 —— 社区反馈需要在数秒内完成,链路上任何一跳慢几秒都等于失败。规划超时预算时按「秒级」而不是「十几秒」算。

要复现挑战很容易:挂 VPN、开隐私窗口(无 cookie)、或用一个不存在的邮箱去登录,三者都能稳定把它调出来。

getCaptcha 返回的 path2 是相对路径,图片真实地址要拼 https://bin.bnbstatic.com 前缀。

端点与字段名来自公开安全研究与实测,币安没有公开文档 —— 版本迭代时字段可能变,别把它们当长期契约写死。

解出验证码不等于能登录 —— 目标站在验证码之后还叠了设备指纹与风控。我们交付的是通过验证码这一关,登录仍可能失败,那不在本能力范围内

token 带 captcha# 前缀,那是值的一部分,不要截断

常见问题

Binance 验证码 要传哪些参数?

必填 validate_id;可选 biz_id、website_url、website_key。请求里 type 传 binance。

解出来的东西怎么用?

返回一个 token 字符串,取 solution.token。回填目标站的校验参数

securityCheckResponseValidateId 要去页面的哪里找?

重点找 securityCheckResponseValidateId、validate_id、captchaType。本页「参数去页面哪里取」一节写了全部位置与取法,含可直接粘进控制台的一行命令。

怎么确认目标站用的就是 Binance 验证码?

不是 reCAPTCHA、不是 GeeTest、不是任何外采产品 —— 脚本与图片全在 accounts.binance.com / bin.bnbstatic.com 自有域下。也别和币安的 2FA(验证器 App)、Passkey 通行密钥、人脸识别混为一谈:那些是身份验证,和这里的人机验证不是一层。

有什么容易踩的坑?

解出验证码 ≠ 能登录。 验证码之后还叠着设备指纹与账号风控(device-info 头、se_new.min.jsbnc-uuidfvideo-id)。我们交付的是过验证码这一关,登录仍可能被后置风控拦下,那不在本能力范围内。

多少钱一次,失败扣不扣?

$3.06 / 1K 次。按成功计费 —— 没解出来一律退款,所以失败不花钱。账单按次记,标价按每千次是为了让量级读得出来。

开始接入

一个端点覆盖全部验证码类型,按成功计费,失败与空结果一律退款。