webpack


如果一个页面中大部分是script标签构成,大概率是webpack打包

基本机构
数组(列表形式)

点击查看代码
!function (e) {
    // 存放加载器
    var c = {}

    // t是加载器对应的名字
    function n(t) {
        // 创建一个a对象,i是加载器名字,l是是否加载过,exports是导出对象
        var a = c[t] = {
            i:t, //表示模块的标志符,它被设置为参数t
            l:!1,// 表示是否加载过,默认为false
            exports:{}// 表示模块的导出对象,默认为空对象
        };
        console.log(t)
        // 执行函数里的方法
        return e[t].call(a.exports, a, a.exports, n), a.l = !0, a.exports
    }
    // 调用n方法,传入参数,返回a对象,n.m存放的是所有的模块信息即参数e
    n.m = e
    //入口
    n(2)
}([
    function (e, t, a) {
    console.log(1111)},
    function (e, t, a) {
        console.log(22222)},
    function (e, t, a) {
        console.log(3333)}
])
参数是对象形式,这种更为常见。
点击查看代码
!function (e) {
    // 存放加载器
    var c = {}

    // t是加载器对应的名字
    function n(t) {
        // 创建一个a对象,i是加载器名字,l是是否加载过,exports是导出对象
        var a = c[t] = {
            i:t, //表示模块的标志符,它被设置为参数t
            l:!1,// 表示是否加载过,默认为false
            exports:{}// 表示模块的导出对象,默认为空对象
        };
        console.log(t)// 打印调用了对象中哪个函数
        // 执行函数里的方法
        return e[t].call(a.exports, a, a.exports, n), a.l = !0, a.exports
    }
    // 调用n方法,传入参数,返回a对象,n.m存放的是所有的模块信息即参数e
    n.m = e
    //入口
    n('bb')
}({
    'aa': function (e, t, a) {
        console.log(1111)
    },
    'bb':function(e, t, a) {
        console.log(22222)
    },
    'cc':function(e, t, a) {
        console.log(3333)
    }
})
环境检测:很多时候在函数体中会有一些初始化函数,进行环境检测。如window location等(也有可能在参数对象中)

如果环境检测在函数体中。可以通过注释掉检测函数来轻松绕过检测。

关于如何确定函数体中是否初始化了其他函数,console.log(t)会打印调用的参数对象中的函数。可以查看参数对象的第一个函数,如果第一个函数调用之前存在其他调用。
例题1 36氪登录
https://36kr.com/
一般启动器是同步的 通过追栈找入口是个不错的选择

定位到登录信息加密为止

可以看到r=n(16),o=n(4),var t = n(774) 其中n就是webpack的加载器,参数是数字,也就是说模块式数组类型的

进入加载文件 可以看到它是一个加载器

解决webpack 4步走

(1)找到加载器。直接在加载器函数处断点。然后刷新页面,因为加载器是在页面加载时加载进来的。断住之后找到加载文件,把整个文件复制下来。

(2)注释掉初始化动作,可以少补环境

(3)全局调用加载器函数

(4)打上执行模块日志
这个例子只调用了n(774),在控制台找到第774个函数将它怼过去就完成了 --!

找到函数


例题2
地址:aHR0cHM6Ly9mdXd1Lm5oc2EuZ292LmNuL25hdGlvbmFsSGFsbFN0LyMvc2VhcmNoL01lZGljYWxUcmVhdG1lbnRPcmdhblNlYXJjaA==

接收的数据是加密的,一般这种情况会搜索JSON.parse 或者decrypt
这里每次翻页 都会进行一次解密,可以尝试搜索interceptor或interceptor.response.use
定位加密入口很麻烦:后面会出一个总结
定位到入口

向上寻找:

找打加载器:

注释掉初始化动作:

全巨调用加载函数:

打印执行模块日志

请求参数生成位置:

有时间,半夜了 有时间再搞吧

posted @   dacaiji  阅读(7)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示