最近这两天有时间就水几篇文章
群友有提到极验的滑块
鸭鸭同志前面很多滑块的分析单单少了经典的极验
简单开个头,分享一个以前记过的流程
极验滑块流程(以demo为例):
https://www.geetest.com/demo/slide-bind.html
1、获取 gt,challenge :
https://www.geetest.com/demo/gt/register-slide?t=时间戳获取
2、获取 validate(解决滑块验证码):
①获取滑块图片地址以及参数:
依次访问(其中 gt,challenge 为第一步获取的)
https://api.geetest.com/gettype.php?gt={}&callback= ,
https://api.geetest.com/get.php?gt={0}&challenge={1}&''lang=zhcn&pt=0&w=&callback=,
https://api.geetest.com/ajax.php?gt={0}&challenge={1}&lang=zhcn&pt=0&w=&callback=,
返回验证类型为 slide
可以发现上面的w直接传了空值,针对滑块可以这样子写,能过不就行了
https://api.geetest.com/get.php?is_next=true&type=slide3>={}&challenge={}&lang=zh-cn&https=true&protocol=https%3A%2F%2F&offline=false&product=embed&api_server=api.geetest.com&isPC=true&width=100%&callback=geetest_1,
返回验证码图片的地址,后续需要的 参数c,s !!!以及返回34位的challenge(后续需要的challenge为34位challenge)
②图片还原及缺口位置loc的获取:
上一步获取了图片的地址,将原图和缺口图片还原,同时图片还原的时间为imgload参数
③初始轨迹列表 track获取:
列表由[x, y, t], x为移动的距离,最后x的值为loc的大小,t为时间,最后t的值为passtime
极验成功率和轨迹关系很大噢!!!
④轨迹aa获取
由track经过第一次加密得到的字符串,再和参数c,s经过第二次加密得到
⑤关键参数w的获取:
所需参数:
字典i:其中
lang,ep为定值(其中tm参数可为空,其余为定值) ,
userresponse由loc和challenge(34位)加密得到
passtime,imgload,aa上面获取的参数,
rp为gt,challenge(32位),passtime加密得到;
RSA加密生成的a和aes_key
AES加密生成的数组c(密钥aes_key,加密内容为i(字符串格式))
数组c加密生成字符串u
参数w = u + a
⑥验证即可
怎么样 看起来是不是很简单~
new new new 下面来看看极验的还原吧
这是关键的加密位置
还原后
这样子就够啦~ 至于套娃数组的处理想处理的可以参考之前苏宁的思路一样的~至于其他的。。都已经这样子了你还搞不定,,那你还追求还原度干嘛呢
只要得到方便自己破解的程度即可,下面附上源码:
首先找出解密函数,文件最上面一顿复制就好 形式都一样
const decrypt = {
CallExpression(path) {
const node = path.node
if (node.arguments.length !== 1 && !t.isNumericLiteral(node.arguments[0])) return
const number = node.arguments[0].value
if(typeof number !== "number") return;
# 修改函数名
var value = sN_mt.$_CU(number)
path.replaceWith(t.valueToNode(value))
},
// 处理编码混淆 \uxxxx \x
StringLiteral(path) {
const node = path.node
delete node.extra;
}
}
traverse(ast, decrypt);
这样子就可以啦~
本文到此结束~看阅读量及反馈看后续是否需要详细的分析吧~
后续预告 周末或者下周时间可能准备一篇5代的流程或者后缀的分析吧gogogo!
本文分享自 python爬虫与js逆向 微信公众号,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文参与 腾讯云自媒体同步曝光计划 ,欢迎热爱写作的你一起参与!