易盾轨迹加密
找到加密位置
之前我们找到cb,与fp加密处那里就有关于data的加密
可以看到这个data的里面的字符串已经被加密好了,我们要追到源头找到加密函数。
深入跟进栈
跟到这个位置的时候,在控制台e.data,看看这个的参数能不能有什么线索找找,因为后面的两个栈都是异步栈了,找不到明确的加密位置,只能通过参数进行进一步分析
直接在这个文件先试着去搜索
m:
一搜只有11个选项,找到这个地方,我们就确定了,这是加密无误了。开始研究一下。d、m、p、ext这四个参数怎么来的
参数分析
滑动一下,断点打过来,d = p(n.join(“:”)),那我们先研究n
var n = a.sample(this.traceData, u)
这个位置是通过this.traceData
这个数组,如果这个数组长度>50则挑选50个值,控制n的长度不会过长搜索一下traceData
进来断点打,这个函数叫 onMouseMove,凭着我多次考四级的经验,这个的意思是当鼠标移动,嗯。。。,我猜测是当点击滑块并移动它就会调用这个函数,我们分析分析
this.traceData.push的时候f已经被加密好了,那我们看看f是怎么加密的
通过图片加密那里的token值与一长串取整操作得来的数,传进y()就得到了f,到这来我们大胆一点!!!!
[Math.round(i.dragX < 0 ? 0 : i.dragX), Math.round(i.clientY - i.startY), a.now() - i.beginTime]
这一串就是我们滑动滑块时候产生的轨迹数组!!!
我们把这一个js拿到本地进行调试。
我们把我们的猜想通过控制台输出出来看看是否成立。
我们通过本地文件替换线上文件的方式,这个可以通过reres或者fiddler来实现,reres的实现可以看看我之前写的博文。
我们把文件的链接取下来去掉后面的参数
https://cstaticdun.126.net/2.13.6/core.v2.13.6.min.js
通过fiddler的这个来实现映射
这样就实现了映射,我们刷新一下,然后再滑动
没有错!!!!我们的猜想是对的。
为了方便我们改写这个轨迹加密,我们需要一个数组来把这个轨迹单独拿出来。
然后再把轨迹push进去
我们现在要做的就是要整理出一个函数,方便我们后续直接加密出data,所以我们知道轨迹加密的地方之后,然后就回过来,看看我们需要什么参数给这个我们要创建的函数
首先我们需要轨迹数组,还需要token,这个刚才我们有提到,还需要图上的滑块距离,这个可以通过QQ或者微信的那个截图功能,从图片的初始位置到滑块的位置,可以得到跟图上圈出来的那个变量的值相仿可以得出,我们也需要这个,因为r这个参数需要。其他的像
this.mouseDownCounts和this.traceData.length,一个是鼠标点击次数,一个是轨迹加密数组的长度,鼠标点击次数你想,你滑动,你需要点击滑块?当然是一次啊!!这个写死就好。还有一个y是啥东西,这个我们在页面打断点调试看看。
y是这个n方法,但是这个n是在一个大函数内部,我们要用个全局变量把它导出来
接下来我们来看看p是啥,打断点之后,我们来到了这个函数
哦豁,这个函数是之前的cb加密处,我们也在后面加上一个全局变量获取这个B吧
然后我们可以整理出一个用来加密data的函数
这些就是大致的分析过程,有什么不懂的可以在评论当中留言,我看到会回复的。