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就行。
至此恭喜你完成解密。🎉