验证码实战

文章目录

小试牛刀

先尝试模拟,使用 puppteer 稍加计算就能成功绕过极验

请求依次为

工程化探索

将验证码填充作为通用服务运行,让爬虫客户端无感绕过验证码,考虑在客户端和服务端(比如 puppeteer)之间使用 RPC,客户端先调起服务端,服务端进入验证码流程,但将所有请求拦截并通过 RPC 传递给客户端,客户端代为请求,响应结果作为 RPC 的返回值,服务端再强行将其作为响应,继续之后的动作,从而在验证方看来客户端正常完成了验证。

真正开发过程中,很多时间浪费在了数据类型造成的错误中,在 proto 中我把除状态码外的所有字段定为 string,但用 axios 等库发起请求时,header 为 object,且若不在请求时指定 responseType,所获响应默认用 json 解析成 object,否则才是 text。更坑的是图片等二进制数据,获得为文本时已经铸成大错,需要先指定 responseType 为 arraybuffer(在 Node 中 blob 实际还是以文本返回,因为 blob 是 browser only),然后 res.data.toString('base64') 转成 base64 字符串通过 RPC 传递,接收方再 Buffer.from(str, 'base64') 来转成 buffer。

JS逆向:AST还原极验混淆JS实战

反符号混淆和控制流平坦化

评论正在加载中...如果评论较长时间无法加载,你可以 搜索对应的 issue 或者 新建一个 issue