Skip to content

xhs 旋转验证码剖析和协议算法实现

【作者主页】:小鱼神1024

【擅长领域】:JS逆向、小程序逆向、AST还原、验证码突防、Python开发、浏览器插件开发、React前端开发、NestJS后端开发等等

本文章中所有内容仅供学习交流使用,不用于其他任何目的,不提供完整代码,抓包内容、敏感网址、数据接口等均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关!若有侵权,请联系作者立即删除!

前言

作为小红书的忠实粉,即使没有几个粉丝,也不知不觉用了好几年了。最近发现老是出现旋转二维码验证,令我十分不爽,于是就想着研究一下这个验证码的实现原理。

请求分析

当旋转验证码页面加载完成后,请求分析时,发现 /api/redcaptcha/v2/captcha/register 这个网络请求,从字面意思上看,应该是它了。

打开其响应信息发现,并没有验证码的图片信息。而是有个 captchaInfo 加密字符串。我们猜测,这个字符串应该就是验证码的图片信息。

老套路,全局搜索 captchaInfo 关键字,发现并没有这个字段。此时,心里大概有数了,要么这个字段被加密了,要么这个字段被混淆了。

换个思路,我们可以从这个请求的堆栈中找线索。如图:

点击第一个进去,打上断点后,如图:

此时发现了,请求响应的内容,继续沿着堆栈分析,发现它跳转到了 main.6fb1333.js

读过我之前发布的 x-s、x-t、x-s-common、x-b3-traceid 参数分析 这篇博客的小伙伴应该知道,这个就是 JSVMP 加密。

既然是熟悉的味道,那还用熟悉的配方去分析 -- 插桩法