webpack扣代码
参考:https://app.yinxiang.com/fx/970ae39c-9964-4aae-aa96-7e81fee4ef8f
案例
网址:aHR0cHM6Ly93d3cuY29pbmdsYXNzLmNvbS8=
接口:aHR0cHM6Ly9jYXBpLmNvaW5nbGFzcy5jb20vYXBpL2V0Zi9mbG93

- 先定位接口以及返回的数据
接口上面已给出,响应数据一看就有加密。

- 使用XHR断点进行debugger

一步一步调试,找到解密的关键代码

- webpack打包
通过debugger调试,把这个解密的js拉到开头,可以看出典型的webpack打包

跟进到eZ里面去

- 找到webpack加载器
这里需要跟进到加载器,将加载器扣出来。

根据堆栈信息,可以找到加载器的入口

将加载器复制出来,保存为本地js

- 调试webpack,扣对应使用的js文件,补环境。
新建load.js, 将加载器全部复制出来

通过加载器代码可发现h为加载器函数,使用全局变量导出 加载器函数。

调试, 发现报错

打断点到self这里,看下是什么。

这里可发现self就是window。
直接补环境即可。

继续执行,发行正常运行。

接下来定位到解密的js,看到上面的 解密的关键代码 那块的图;找到对应的js文件和执行解密的代码块,看是使用的那个模块。

定位到解密的关键代码块,往上找加载了什么模块。
我这里将这个js全部复制到vscode里面,通过关键字搜索,定位到了解密代码块,vscode也有提示这个代码块是属于那个模块的。

可以看出来是2214模块
再使用加载器,调试下这个模块。
window.my_load(2214)



通过输出结果,发现2214这个模块没有加载进来。
好,刚才我们已经定位到这个js了,直接全扣出来。
新建个文件 wp_model.js, 将那个js全部复制到文件中
再将该js导入到load.js里面,再次执行。


好,发现还缺少另一个模块 67294。
直接通过开发者工具搜索,67294:,找到对应的模块加载js,将其扣入wp_model.js中,再次执行load.js直到把所有使用到的模块补全。


这个案例用到了这两个模块(其实我们扣多了,有更简化的方案,这里不赘述);

直到输出没有报错,表示已经完成🎉。
- 使用全局变量导出解密函数
前面我们已经找到了解密关键代码块对应的function,这里直接用全局变量给他导出。

也就是这个function。
找到我们wp_model.js中对应的位置,使用window全局变量挂到自定义一个变量上去。即可使用。
比如window.my_decrypt = function(t) ….

这里可以看到需要传入t参数,t参数怎么来呢?直接在浏览器上debugger到这里,复制t 这个obj就行。


至此恭喜你完成解密。🎉