0


阿里系滑块

目标网站:aHR0cHM6Ly9wYXNzcG9ydC5kYW1haS5jbi9sb2dpbj9ydT1odHRwcyUzQSUyRiUyRnd3dy5kYW1haS5jbiUyRg==

第一步我们打开网站输入账号就会弹出验证码,这就是我们要研究的对象

f12打开开发者工具抓包

图中框选出来的数据包是我们要研究的

因此我们添加xhr断点

断下来之后向上找堆栈,定位到加密函数

点进去之后我们找到了目标js文件fireyejs.js

这个js文件经过非常严重的控制流混淆所以我们硬刚是很困难的

这里我选择用ast进行一下简单的还原,来帮助我们分析

通过观察我们可以发现他代码的主要逻辑全都在这个循环之内,并且最后执行的语句由 31 & Ct ,bt ,St 这三个值控制,并且这三个值都能由Ct 计算得出,所以我们保存下Ct就相当于保存了代码的执行流程

这里我是选择用ast解析出每一个Ct对应的语句保存下来然后再根据浏览器中保存的Ct来还原出代码的执行流程

对于第一层和第二层switch解析起来比较容易,都是标准的switch语句,第三层是由大量的判断来达到控制流混淆的效果

通过观察我们可以发现

我们可以通过St的运算符和比较数来确定唯一的执行语句

遍历所有的语句这样我们就能解析出来第三层

这是最后解析出来的语句

按照执行流程还原出来的代码

拿到了初步还原的代码我们继续分析

一般情况下网站的加密有好几层,我们先分析最后一层,如何把数组转化成字符串

Qo是我们需要的字符串,然后观察我们还原出来的代码

我们发现这里是个循环,看见循环,我们就大概率认为这里是加密算法

为了验证猜想,我们在此处下断点

根据输出判断这里就是他最外层的加密函数

循环体代码为

Ct = (q = N < _) ? 2661 : 7873;
6233 (3) [5, 19, 2]
q = N++, xe = $[q], Z = 255 & xe, q = N++, xe = $[q], Ee = 255 & xe, q = N++, xe = $[q], x = 255 & xe, ee = Z >> 2, Ct = 12385;
6234 (3) [1, 3, 12]
le = (xe = (q = 3 & Z) << 4) | (q = Ee >> 4), Te = (xe = (q = 15 & Ee) << 2) | (q = x >> 6), de = 63 & x, xe = N === (q = _ + 2), Ct = 2150;
6235 (3) [6, 3, 2]
Ct = xe ? 9828 : 9281;
6236 (3) [1, 2, 9]
Ct = (ke = N === (q = _ + 1)) ? 14340 : 5312;
6237 (3) [0, 6, 5]
q = Y[m](ee), xe = re + q, q = Y[m](le), ke = xe + q, q = Y[m](Te), xe = ke + q, q = Y[m](de), re = xe + q, Ct = 25025;
6238 (3) [1, 14, 24]
Ct = 2789;

对于一个循环要有四个部分

这段代码对应第二部分,来控制循环什么时候结束
Ct = (q = N < _) ? 2661 : 7873;
这段代码对应第三部分,变量N自增
q = N++, xe = $[q], Z = 255 & xe, q = N++, xe = $[q], Ee = 255 & xe, q = N++, xe = $[q], x = 255 & xe, ee = Z >> 2, Ct = 12385;

剩下的代码就是循环体了,每一次循环结束就又会跳转到判断语句进行下一次循环

现在对于一个循环三部分都有了,我们就要开始寻找第一部分变量的初始化

一直向上找找到第一次循环的开始,继续向上就能找到变量初始化的部分,这样我们就能完整的复现出这个循环

这个循环是对$这个列表进行遍历

下一个目标就是看这个$是哪里来的,方法大同小异,花点时间都能搞出来

最后滑块验证通过之后会返回一个cookie x5sec 携带着这个cookie就可以登录了


本文转载自: https://blog.csdn.net/m0_66450544/article/details/128636680
版权归原作者 带带弟弟学爬虫 所有, 如有侵权,请联系我们删除。

“阿里系滑块”的评论:

还没有评论