一、逆向目标
声明
本文仅供参考学习,请勿用于其他途径,违者后果自负!
目标网站:aHR0cHM6Ly93d3cuYmlsaWJpbGkuY29tLw==
目标:请求参数中w参数的逆向分析
注:极验官网的混淆太不当人了,祈祷有ast大佬能解决这个混淆,所以我找到了这个目标网站,采用四代极验点选,混淆方式不是官网的那种
二、抓包断点分析
对于关键参数w我们可以得知是由p+u形成的
三、参数u分析
这里我们得知生成参数u的位置,得到生成函数:
观察发现这里返回的是t,经过对比发现这个t的值和u是相等的,但是这里有两个t生成的地方
发现t是由第一个生成的,所以我们要扣的代码是var t = new H()[$_CBGAe(374)](this[$_CBGAe(750)](e));所以我们先定位到方法H在哪,我们全局区分大小写搜索H = ,最终找到
成功找到H这个类的所有方法,扣下来,然后我们分析 var t = new H()[$_CBGAe(374)](this[$_CBGAe(750)](e));发现调用的方法是这两个,一个是encrypt,另一个是不变的(this[$_CBGAe(750)](e))
所以我们可以把js的改成这个即可获取到参数u值
四、参数p分析
可以得知h作为参数传递给了某个函数然后返回了p的值
4.1对h进行分析
h的值是从X里面进行调用的,我们把X全扣下来然后进行window._x = X;全局调用
回到分析h = X[$_CADBN(374)](ae[$_CADBN(109)](o), n[$_CADAp(750)]())
我们可以控制台打印输出观察调用的是什么
可以发现依然调用的是encrypt,但是第二个参数就有点多了,先暂时写死,我们稍后再分析这里,里面主要的是验证码的信息和鼠标轨迹之类的,到此我们已经把h也搞定了
4.2对p进行分析
获取到h后对p进行分析p = w[$_CADBN(774)](h),通过控制台打印,我们得知p的生成是调用了
w的这个$_EFu函数
点进去我们就能发现p是这里生成的
return的是t的两个部分,经过打印在控制台发现:return的是t中的res和end
经过控制台的打印输出可得知:
那我们要找到this里面的$_EDt方法:
由于对这个w里面的单个函数进行扣出来也不方便后续的操作,所以我们选择直接把w扣出来,
然后我们扣出来之后
至此,我们w的参数就出来了,但是还有最最重要的就是h里面的那个第二个参数还没分析,现在我们来解析o。
4.3 h的第二个参数o分析
先回到这里
然后我们向上找,留意好o的值,都有这几个参数:
然后我们往上找o,然后就能发现:
我们观察它的参数对不对,在控制台打印可观察到:
六个参数,还差两个,一个是pic,验证图片的链接,还有一个是h9s9,这个看着是一个时间戳
4.3.1 lang
分析其它包可以知道这是固定的一个值,反馈的应该是地区
4.3.2 passtime
passtime的值是t,而t是传参传进来的,而且t是第二个参数,所以我们往上跟栈
发现是这里进行传参的,用$_FG()减去了一个数据,明显$_FG()是当前的一个时间戳
而减数是一个固定的值,经过查询可以得知是当验证码出现的时间,所以passtime这个参数记录的是验证的一个时间,所以说我们这个差值完全可以写死的,反正后台又不知道,但是如果后面使用这个差值来进行加密什么的再生成一个校验的参数,那就必须要了。
4.3.3 a
我们看a的值,看着就像点选的那个坐标,通过某些固定的值进行操作得到的,作为一个邪修,我们可以刷新多验证几遍,把正确的数据抓到包然后拿出来丢给gpt,让gpt来帮我们找到这个对正确点选坐标的操作,不需要太精确,那个字是占一个区域的,所以只要偏差不大,在这个区域里面就可以。
a的值是e,也是传参传进来的,刚刚的t是第二个参数,e是第一个参数。
我们找到这里可以发现是这个进行返回的
可以看出这个e就是取了t里面的$_BDk这个方法,然后把,传递给它,我们进去$_BDk方法里面分析
我们可以发现return的是this里面$_JIE join e
那么问题来了,这个this是什么来的呢,是哪个类呢?
这里我们可以看到,这个this是指向ie的,所以我们可以全局搜索:new ie(),会发现有三个符合条件的,我们都下一个断点,对这几个断点分析一下就可以找到里面真的ie:
验证一下,也是对得上的
好了那我们找到了参数a生成得地方了,那我们接着分析一下这个生成参数a的方法:
这里return的是一大串东西,但是最核心的就是里面的var e = this[$_CHABi(366)]这个e的生成了
我们可以知道这个this的指向是Le,那我们全局搜索 new Le,会找到一个f = new Le(),这里是用f给Le赋值,那谁给f赋值呢,所以我们要去全局搜索f[这种形式的赋值,有四十来个,慢慢看能找到明显的两个赋值的,经过点击验证码分析可以找到真正赋值的那个:
当我们点击验证码的字的时候就能在这里断住等过完这个方法f里面就有$_JIE的值了
经过对比f的值和第一个参数的值是对的上的,所以我们已经找到了f赋值的地方,那这个f[$_CCBGb(551)]是干什么的呢,分析f赋值的函数我们可以发现这是调用了一个方法,然后传递给了他4个参数,我们点进去这个方法里面
参数e t n r,我们回到给f赋值的那个地方,
Math[$_CCBGb(490)](100 * l),
Math[$_CCBGb(490)](100 * u),
g[$_CCBGb(39)][$_CCBGb(700)]);
这三个就是参数t n r
细节方面就不展开谈了,这个t是把你点击的那个地方的横坐标做一些四舍五入再运算之类得到的,n同理(这两个参数里面有一个小坑,注意甄别坐标的起始点是屏幕的左上角还是页面的左上角,又或者是验证码那幅图的左上角),
详细的运算在这个方法里面
而r则是固定的值“word”
到此我们的a也已经出来了,其实整个逆向其实已经完成了
4.4.4 pic
这个是验证码图片的路径了,是在另外一个接口里面返回的
4.3.5 tt
tt是一个方法然后传进去了三个参数,我们可以直接把这个方法扣出来,这里面是个自执行的方法
4.3.5 ep
ep里面的ca就是浏览器的点击信息,tm是点击的一些时间戳信息
其实这两个参数都是可以写死的,因为这个点击时的页面是可以移动的,说明这东西服务器是无法校验的,到此o的参数也找完了,但是你会发现少了h9s9和rp这两个东西
4.3.6 h9s9
如果我们想给o赋值,那就要把o里面的某个东西取出来再赋值,所以我们可以全局搜索 o[ 看看能不能找得到h9s9,好像不太能,一共有一百八十多个,我们往下找会发现有一个给_赋值的
在这里发现了h9s9,而且这个值也是一个时间戳
4.3.7 rp
跟着往下一步一步跟栈会发现rp是在这里进行赋值的
这个方法传递这三个玩意相加的值给它
经过测试可以发现这个rp的值是个md5的加密,里面传的参数是gt ch 和那个时间差值passtime
到此我们w参数的参数都已经分析完毕,当然还有一些较为细节的地方没有展示出来,剩下的就是扣代码补环境的事了,代码等我搞定之后再发出来和大家分享