声明
本文章中所有内容仅供学习交流,不可用于任何商业用途和非法用途,否则后果自负,如有侵权,请联系作者立即删除!由于本人水平有限,如有理解或者描述不准确的地方,还望各位大佬指教!!
在工作中遇到了百度的滑块,翻了下csdn以及公众号发现没人写,于是才有了这篇文章。
拼图滑块验证码:
aHR0cHM6Ly9zZWNjYXB0Y2hhLmJhaWR1LmNvbS92MS93ZWJhcGkvdmVyaW50L3N2Y3AuaHRtbD9haz1NN2JjZGgyazZ1cXRZVjVtaWFSaUk4bTh4NkxJYU9OcSZiYWNrdXJsPWh0dHBzJTNBJTJGJTJGd2Vua3UuYmFpZHUuY29tJTJGdmlldyUyRmRlNDAzNGZhNTE0ZGU1MTg5NjRiY2Y4NGI5ZDUyOGVhODFjNzJmZTMlM0Zfd2t0c18lM0QxNjkyMjYyOTY0MDU3JTI2c3ZjcF9zdGslM0QxXzJzbjF5ZUlSREtUVWh4UmJWNUhXSGNRb09WLTc3WTVPTzU5V0NkQk1TbERsaHBlOEhHdkw5VHJMQUkzWVJTQlphZ2tvTk8tOVBtY2JUcU8yUGU3R2xTVHloa3V0V3owaTMwMHl2dzJSQlRRQWRtMUVzNUxjdl81cVRNSzFoUWY2JTI2YmZldHlwZSUzRG5ldyZleHQ9WTR3eHdHdFoyUFBaTGlFTlljQ2s3eVVkTDFraFF1MjVYMDRCWWJuV2ZCMVVkdm5mRHRHOW5TR200MEFscWZtJTJGJnRzPTE2OTIyNjUwMjAmc2lnbj0yNDFhYmM3MDNkZGIwMTYzN2JjNTk4NTMyNmNhM2M5Yg==
无感滑块验证码:
aHR0cHM6Ly93ZW5rdS5iYWlkdS5jb20vd2t2Y29kZS5odG1s
这个百度的无感还怪可爱的,好像超级无敌猪。
拼图滑块验证码
抓包流程分析
第一个init包,请求参数中ak是固定值,返回as、ds和tk,后续请求会用到。
第二个包响应返回的参数中path就是底图和滑块的url,backstr是生成fs参数值的关键部分。
滑动滑块后,就会出现log包。其中有cv:submit才是提交的包,请求参数中fuid和fs是未知的,fs参数是由轨迹、滑动距离和back参数等加密生成的,fuid参数k哥的文章上说是浏览器指纹参数,不同浏览器的值不一致,相同浏览器的值短时间内不会改变,所以短时间内我们是可以写死的。fuid在fingerprint.js文件中生成,由 user-agent、canvas、plugins 等浏览器环境构成。
为AES加密,加密模式为ECB,填充方式为 PKCS7,key 为固定值。
最后verify接口验证。
fs参数分析
直接全局搜索fs=,这是就是生成fs的关键位置。
打下断点跟进去,有这个ac_c的值才是正确加密的参数。
我们向上跟栈,可以定位到计算ac_c的位置。
继续往下,可以看到是AES加密,key是由getNewKey(params.as); 生成的,
继续回到AES加密的地方,是ECB模式,填充方式为ZeroPadding。这里进行了两次加密,第一次是对轨迹和backstr组成的字符串进行加密,第二次加密内容{"common_en": 第一次加密的结果, "backstr": backstr}。至此fs分析完成。
无感滑块验证码
抓包流程分析
第一个viewlog包,请求参数中ak是固定值,返回as、ds和tk,后续请求会用到。
第二个viewlog包,还是fs是加密的,其他是返回的,拿到新的ds和tk。
第三个verifycodeproxy包,这是最后验证的包。
fs参数分析
直接全局搜fs=,可以直接定位到加密的位置。
加密的参数,ac_c为1就行,其他不检测。
没啥好讲的,加密方式是AES,key是as+appsapi0,ECB模式,填充方式为Pkcs7。
踩坑问题
拼图还是无感,都没有校验轨迹,只校验了ac_c,轨迹写死或者不写都可以过,一开始我还在想这轨迹该怎么构造。。。
python的AES加密的ZeroPadding加密出来跟js的不一样,这个有大佬知道是为什么吗?
还有就是拼图滑块就算是返回op为1,也提示说是ParamsValueInvalid,看了k哥的文章说是通过的时间太短了,time.sleep(2.5)就好了。
{'data': {'pass': False, 'v': '1', 'stk': ''}, 'code': 62004, 'msg': 'ParamsValueInvalid'}
各位大佬觉得本文写的不错的话,可以一键四连哦。