本文内容仅限于学术研究和技术讨论,实际应用中应严格遵守相关法律法规和服务条款。本文内容遵守CC BY-NC-ND 4.0协议,禁止任何修改后二次传播。
1.识别 hcaptcha 验证码
hcaptcha 验证码(以下简称 hcp)可以通过两种方式识别,第一种方式是通过验证码图标,例如下面的这张图片就是 hcp 验证码:

当然有些网站的 hcp 无感是不会有点击选框的,这个时候我们就可以通过第二种方式,即接口去识别,主要的几个接口长这样:
- https://......hcaptcha.html
- https://api.hcaptcha.com/checksiteconfig......
- https://......hsw.js
- https://api.hcaptcha.com/getcaptcha......
2.接口闲谈
在上面说的四个接口中最重要的一个接口就是 hsw.js 这个,最主要的加密流程就是在这里面进行的,进行加密的时候会用到 checksiteconfig 接口返回的 req 字段,最后调用 getcaptcha 接口进行校验。
在浏览器上得到 hsw.js 文件后就可以去分析加密流程了,hsw.js 文件每周都会进行一次更新,所以各位分析的时候建议保留一份下来,核心加密算法是用 wasm 实现的,因此这里建议各位直接通过补环境的方式去实现加密。
如果大家要去打断点跟代码的话,这里建议大家去看一下 hsw 这个方法中最后 return 的那个函数,那里也许是一个非常不错的切入点。

关于最后调用 getcaptcha 接口进行校验时,携带的表单参数是乱码这个问题,各位读者可以尝试去 hcaptcha.html 这个接口中寻找变成乱码前的字符串,答案就在这里面。

3.结果展示
当 getcaptcha 接口请求结果返回了 P1_...... 时就代表你的环境/算法是正确的。如果返回结果不是 P1_......,而是点选验证码,那么就代表你的环境没有补正确或者纯算是错误的。

