今日网站
aHR0cDovL3d3dy5rdXdvLmNuL3NlYXJjaC9saXN0P2tleT0lRTQlQjglOEIlRTUlQjElQjE=
首先声明,本网站的这个参数不是必要的参数,通过 postman 测试不带参数也可以返回数据,那么这篇文章讲什么?
之前分析了一篇 webpack 加密的网站,讲了大概一个使用了 webpack 的网站他的参数应该如何扣取。
本篇是他的续篇,主要讲述当模块分发器不在同一个文件的 webpack 应该如何扣取
加密参数定位
首先看下我们需要的分析的参数是什么
这里的 reqId 就是需要分析的参数,这个参数看着是不是特别像 uuid
直接检索参数名可以找到下面这个文件
在文件里再次检索可以定位到下面几个位置
这里的reqId
的值分别等于r
和n
,但是这里的r
和n
的逻辑都指向下面这个逻辑c()()
所以我们需要断点一下看下reqId
是否就是在这里生成的,如果是这里再看看c
的具体逻辑
这里打上断点刷新可以看到,确实断点的位置在上面标记的两个位置中,并且参数也是c()()
生成的
加密参数分析
经过上面的定位已经可以知道参数是由c()()
生成的,那么c
的逻辑分析出来就完成了。
往上翻下代码可以看到下面的逻辑
l = n(109)
c = n.n(l)
reqId = c()()
所以这里的关键参数就是l
,l
是n(109)
生成的,这里的n
就是我们今天的重点webpack
整出来的。
按照前一篇的介绍,要看下模块分发器的位置把他扣取出来,然后把加密逻辑用到的模块都塞到分发器里调用就可以了。
但是在开始的位置没有看到分发器
所以现在要在l
的位置单步到分发器的位置,原来在另一个文件中
这里就是分发器的位置了,这里的e
存的就是全部的模块
代码运行到函数 d 的时候会把所有方法都塞到这个列表里,然后就可以用n(xxx)
调用了,我们要做的就是和这里一样把reqId
的逻辑组成一个这样的函数,我们直接调用d(xxx)
这样的代码就可以直接生成 reqId
现在就是把分发器还有reqId
用到的模块都扣出来然后组装到一起。
代码扣取
先扣模块的分发器,把除了d
之外的全删了
因为d
里面用到了t
,所以在d
前面补一个var t={}
这个时候剩下的代码应该是下面这样的
接下来就是找l
用到的代码了
可以看到l
用到的是n(109)
,所以我们需要找到109
对应的代码
注意:这里最好在模块分发器里找 109 对应的代码,如果将断点打在 l 的位置再单步进去可能会出现偏差
通过点击上面图示中的回显,来找到对应的代码
将这部分代码放到我们扣好的分发器里面
可以看到109
里面还用到了202
还有203
按照我们上面方法重复把他们两个都扣出来
这个时候就得到了所有用到的代码,接下来就是需要在外部得到这个模块分发器运行起来的结果
为啥需要这么做?
完成上面的操作后,我们得到的是一个自执行的函数,也就是说我们一运行代码他就会自动执行了。
函数执行结束,我们要的方法的列表就没了,所以就需要把这个函数列表导出到一个全局变量里,然后在这个全局变量里面调用对应的方法完成reqId
的生成
所以我们在外面声明一个全局变量var xianyu;
在自执行的方法里把d
方法赋值给xianyu
之后再照网站上的调用逻辑调用一下就可以了
!
运行就可以生成reqId
了
就这样就完事了~
以上就是今天的全部内容了,咱们下次再会~