不知不觉秋天已经过去了,已经立冬进入冬天了,时间过的真快啊,一切都在变化,就像某验的验证码一样,之前看的时候还是3代,现在已经4代了
本篇文章仅供交流学习,侵权删(满满的求生欲)
直入主题!
网址是:aHR0cHM6Ly93d3cuZ2VldGVzdC5jb20vYWRhcHRpdmUtY2FwdGNoYS1kZW1v
一. 第一次请求
初步观察,变量只有两个,一个captcha_id,一个challenge,跟踪请求堆栈看一下这两个参数是咋来的
往前跟一下就看到了,captcha_id是固定的
而challenge就是uuid
返回数据中这些比较重要,在下面验证时需要用到
二. 第二次请求
第二个请求除了w值是js算出来的,其他都是上一个接口返回的,所以我们就看看w值是怎么获取的就好了
跟入堆栈以后发现已经是混淆的tm都不认识了
这里如果使用ast会好看很多,这个想要了解的可以去找蔡老板,我不会,不会只能硬跟了。
三. 第二次请求获取w值
这里有两种方法,第一种扣代码补环境python或者node执行,第二种扣代码rpc执行(第三种如果是大佬可以用别的语言还原)
总之只要不是大佬就脱离不了扣代码,扣代码是每一个js逆向入门必会的东西了属于是,啥报错不存在就补啥。
这里有个小技巧,直接在js中搜索"\u0077",直接下断点第一行生成的r就是我们要找的w值
开始扣代码,分成两部分去扣
就简单说一下扣代码怎么入手吧
比如第一部分,肯定是先从参数_CBHHQ(36)入手,那么就要知道$_CBHHQ是哪里来的,直接搜索var $_CBHHQ
把代码扣下来,这时我们又需要找XZLpK,再去搜或者是像这样点进去
就又找到了,甚至.$_Ca是什么也找到了,是定义了一个方法。
放到浏览器去运行一下,运行成功,并且和他的结果是一样的
这样一个变量就扣完了,这就是扣代码的大致思路。
四. 构造w的主要变量e
防止读者忘记,e是这个捏
它里面的数据是这样的
track: 轨迹,可以自己构造,js代码在这块,u是原轨迹,c是经过计算后的轨迹
pow_msg:下面的h值在这里,它有两个地方都是这种e()+e()+e()+e(),别扣错了,还有就是这个生成出来的值在两个地方有用到,记得固定成一个,不要计算两次,两次不一样,就过不去。
geetest等三个:
yizo:这个变量的名字和值是不固定的,这个是根据js生成的,把js直接执行,就会在window下面有个_gct方法。