xianyucoder 发表于 2021-8-24 10:10

某音乐网站查询参数加密逻辑分析(分离式的 webpack 加密代码扣取详解)

本帖最后由 xianyucoder 于 2021-8-24 10:13 编辑

## 今日网站

aHR0cDovL3d3dy5rdXdvLmNuL3NlYXJjaC9saXN0P2tleT0lRTQlQjglOEIlRTUlQjElQjE=

首先声明,本网站的这个参数不是必要的参数,通过 postman 测试不带参数也可以返回数据,那么这篇文章讲什么?

之前分析了一篇 webpack 加密的网站,讲了大概一个使用了 webpack 的网站他的参数应该如何扣取。

本篇是他的续篇,主要讲述当模块分发器不在同一个文件的 webpack应该如何扣取

### 加密参数定位

首先看下我们需要的分析的参数是什么

![](https://tc.xianyucoder.cn/blog20210822104821.png)

这里的 reqId 就是需要分析的参数,这个参数看着是不是特别像 uuid

直接检索参数名可以找到下面这个文件

![](https://tc.xianyucoder.cn/blog20210822105051.png)

在文件里再次检索可以定位到下面几个位置

![](https://tc.xianyucoder.cn/blog20210822105230.png)

![](https://tc.xianyucoder.cn/blog20210822105321.png)

这里的`reqId`的值分别等于`r`和`n`,但是这里的`r`和`n`的逻辑都指向下面这个逻辑`c()()`

所以我们需要断点一下看下`reqId`是否就是在这里生成的,如果是这里再看看`c`的具体逻辑

这里打上断点刷新可以看到,确实断点的位置在上面标记的两个位置中,并且参数也是`c()()`生成的

![](https://tc.xianyucoder.cn/blog20210822105854.png)

![](https://tc.xianyucoder.cn/blog20210822105843.png)

### 加密参数分析

经过上面的定位已经可以知道参数是由`c()()`生成的,那么`c`的逻辑分析出来就完成了。

往上翻下代码可以看到下面的逻辑

```js
l = n(109)
c = n.n(l)
reqId = c()()
```

所以这里的关键参数就是`l`,`l`是`n(109)`生成的,这里的`n`就是我们今天的重点`webpack`整出来的。

按照前一篇的介绍,要看下模块分发器的位置把他扣取出来,然后把加密逻辑用到的模块都塞到分发器里调用就可以了。

但是在开始的位置没有看到分发器

![](https://tc.xianyucoder.cn/blog20210822110552.png)

所以现在要在`l`的位置单步到分发器的位置,原来在另一个文件中

![](https://tc.xianyucoder.cn/blog20210822110811.png)

这里就是分发器的位置了,这里的`e`存的就是全部的模块

![](https://tc.xianyucoder.cn/blog20210822110937.png)

代码运行到函数 d 的时候会把所有方法都塞到这个列表里,然后就可以用`n(xxx)`调用了,我们要做的就是和这里一样把`reqId`的逻辑组成一个这样的函数,我们直接调用`d(xxx)`这样的代码就可以直接生成 `reqId`

现在就是把分发器还有`reqId`用到的模块都扣出来然后组装到一起。

### 代码扣取

先扣模块的分发器,把除了`d`之外的全删了

![](https://tc.xianyucoder.cn/blog20210822113047.png)

因为`d`里面用到了`t`,所以在`d`前面补一个`var t={}`

这个时候剩下的代码应该是下面这样的

![](https://tc.xianyucoder.cn/blog20210822113241.png)

接下来就是找`l`用到的代码了

可以看到`l`用到的是`n(109)`,所以我们需要找到`109`对应的代码

> 注意:这里最好在模块分发器里找 109 对应的代码,如果将断点打在 l 的位置再单步进去可能会出现偏差

![](https://tc.xianyucoder.cn/blog20210822121842.png)

通过点击上面图示中的回显,来找到对应的代码

![](https://tc.xianyucoder.cn/blog20210822121918.png)

将这部分代码放到我们扣好的分发器里面

![](https://tc.xianyucoder.cn/blog20210822122016.png)

可以看到`109`里面还用到了`202` 还有`203`

按照我们上面方法重复把他们两个都扣出来

![](https://tc.xianyucoder.cn/blog20210822122139.png)

这个时候就得到了所有用到的代码,接下来就是需要在外部得到这个模块分发器运行起来的结果

为啥需要这么做?

完成上面的操作后,我们得到的是一个自执行的函数,也就是说我们一运行代码他就会自动执行了。

函数执行结束,我们要的方法的列表就没了,所以就需要把这个函数列表导出到一个全局变量里,然后在这个全局变量里面调用对应的方法完成`reqId`的生成

所以我们在外面声明一个全局变量`var xianyu;`

在自执行的方法里把`d`方法赋值给`xianyu`

![](https://tc.xianyucoder.cn/blog20210822125102.png)

之后再照网站上的调用逻辑调用一下就可以了

!![](https://tc.xianyucoder.cn/blog20210822125225.png)

运行就可以生成`reqId`了

![](https://tc.xianyucoder.cn/blog20210822125252.png)

就这样就完事了~

以上就是今天的全部内容了,咱们下次再会~

xianyucoder 发表于 2021-8-25 10:26

b0y 发表于 2021-8-24 11:55
那种加密的js可以解密吗

解密是指算法还原吗?算法还原的话是可以的,如果是指反混淆的话就没有意义,webpack 就是方法和方法之间套娃比较恶心人

lr957 发表于 2021-8-24 10:34

技术贴,值得学习,太感谢了!

三滑稽甲苯 发表于 2021-8-24 10:38

分析透彻,值得借鉴{:1_921:}

20202020 发表于 2021-8-24 10:39

好家伙,完全看不懂

lye123456 发表于 2021-8-24 11:01

学习好贴。谢谢分享

yhwdq 发表于 2021-8-24 11:19

厉害了,学习

langwushuang 发表于 2021-8-24 11:20

谢谢分享,爱了爱了

yansenlove 发表于 2021-8-24 11:22

学习到了,很有用的东西

b0y 发表于 2021-8-24 11:55

那种加密的js可以解密吗

萌牛工厂 发表于 2021-8-24 12:31

感谢分享
页: [1] 2 3
查看完整版本: 某音乐网站查询参数加密逻辑分析(分离式的 webpack 加密代码扣取详解)