声明
本文章中所有内容仅供学习交流使用,不用于其他任何目的,不提供完整代码,抓包内容、敏感网址、数据接口等均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关!
本文章未经许可禁止转载,禁止任何修改后二次传播,擅自使用本文讲解的技术而导致的任何意外,作者均不负责,若有侵权,请在公众号【K哥爬虫】联系作者立即删除!
前言
最近有粉丝反馈,在处理业务网站的时候,碰到了某里的验证码,但是又和大伙所熟知的 226、227 不一样:
其实这是某里 v2 验证码,相较于 228、231 这种旗舰产品,之前使用 v2 的网站并不是很多,不过最近有多起来的趋势。
部分小伙伴可能看到了某里系的验证码,就认为解决不了,直接放弃,其实都没有那么复杂,不说全纯算还原,至少补环境是可以尝试一下的。v2 验证码有很多类型,滑动的版本变动最频繁,1.1.0 一直到现在的 1.1.10,再过两天可能又是新的,解决流程其实都大差不差,本文就逆向分析一下某里 v2 滑动验证码,仅供参考:
逆向目标
- 目标:某里 v2 滑动验证码
- 网址:想要研究的小伙伴,私聊
抓包分析
本案例的网站,不停地点下一页就会触发验证码,也可以直接访问我前文给到的网址(如果响应 HTTP Status 405 – Method Not Allowed
就是指纹黑了)。queryPage 接口正常会返回公告相关数据,触发了验证码,响应内容就会提示需要验证:
主要需要关注四个接口,前后请求了两次 4e778xxx.captcha-pro-open.aliyuncs.com
(提交的参数不同)接口,第一次获取 DeviceConfig、RequestId 参数,用于后续验证,StaticPath 即版本号。请求参数中有个 SignatureMethod,值为 HMAC-SHA1
,这着就像是有啥参数是经过这个算法加密的:
- AccessKeyId:固定值,不同接口不一样;
- UserUserId、UserId、UserCertifyId:queryPage 接口触发验证码时,响应返回;
- DeviceData:设备信息;
- SignatureNonce:类 UUID,后文分析;
- Signature:对相关请求参数进行加密、编码,后文分析。
第二次请求,即最终的验证码校验,获取校验结果及相关参数:
- CertifyId:queryPage 接口触发验证码时,响应返回,即 traceid;
- CaptchaVerifyParam:一些校验参数,包括各种环境、指纹、轨迹等等,后文分析。
验证失败,VerifyCode 为 F001、F002:
验证成功,VerifyCode 为 T001:
中间请求了两次 device.captcha-open.aliyuncs.com
(Log2、Log3)接口,进行设备、轨迹验证(该站校验了 Log2),Data 参数经过加密处理,后文分析:
v2 接入文档:https://help.aliyun.com/zh/captcha/captcha2-0/user-guide/server-integration?spm=a2c4g.11186623.help-menu-28308.d_1_2_1.28cf202bFKiHQi
逆向分析
SignatureNonce
触发验证码,抓包后会看到,第一个接口 4e778fxxx.aliyuncs.com
是 xhr 类型的,直接去源代码(Sources)中下个 xhr 断点,刷新网页重新触发验证码即会断住。此时请求参数都已经生成了:
接着向上跟栈,跟到 AliyunCaptcha.js
文件中(有几套,可以固定一下),下图即 SignatureNonce 的加密位置,跟进到 t[M(i)]
中,将算法扣下来即可: