js逆向webpack基础

发布时间 2023-11-15 21:05:12作者: 守护式等待

1.webpack是什么?

Webpack是一个用于构建现代 Web 应用程序的静态模块打包工具。它是一个高度可配置的工具,通过将应用程序的所有资源(例如JavaScript、CSS、图片等)视为模块,并使用依赖关系来管理它们之间的引用,将它们打包成一个或多个最终的静态资源文件

2.webpack逆袭步骤

1.找加载器

  1. 加载器require
  2. 模块module
  3. 导出函数module.exports
  4. 缓存
  1. 根据堆栈找到业务代码位置
  2. 往上走找找到各种定义变量的地方
  3. 有一个指一直出现那个值就是加载器
  4. 找到缓存的地方 一定会有 return t[n].exports 后面会有t[n]= 加入到缓存中

2.导出加载器

function e(s) {
    if (i[s])
        return i[s].exports;
    var n = i[s] = {
        exports: {},
        id: s,
        loaded: !1
    };
    if (window.is_log) {   // 打印调用函数  简化函数
        window.webpack_code = window.webpack_code + s + " : " + t [s] + "," + "\r\n"
    }
    return t[s].call(n.exports, n, n.exports, e),   //n.exports:this  n:缓存    n.exports:导出函数    e:加载器
        n.loaded = !0,
        n.exports
}

3.屏蔽初始化 找到初始化位置 注释掉让其不初始化 初始化的一定会调用加载器 找到加载器调用的地方 一般初始化在上面函数的倒数第二行

!function (t) {
    function e(s) {
        if (i[s])
            return i[s].exports;
        var n = i[s] = {
            exports: {},
            id: s,
            loaded: !1
        };
        return t[s].call(n.exports, n, n.exports, e),
            n.loaded = !0,
            n.exports
    }

    window.yoyo = e  // 导出加载器 保存为全局变量
    var i = {};
    return e.m = t,
        e.c = i,
        e.p = ""
        // e(0)   // 注释初始化
}()

4.加载指定模块

function get_pwd(pwd) {
    let yoyo1 = window.yoyo(3);   // 加载指定模块
    let yoyo2 = new yoyo1;
    let r = {
        t:(new Date).getDate()
    }
    r.p = yoyo2.encode(pwd, r.t);
    return r;
}
get_pwd("123")

5.编写自定义函数

function get_pwd(pwd) {   // 自定义函数编写
    let yoyo1 = window.yoyo(3);   // 加载指定模块
    let yoyo2 = new yoyo1;
    let r = {
        t:(new Date).getDate()
    }
    r.p = yoyo2.encode(pwd, r.t);
    return r;
}
get_pwd("123")

6.修改加载器简化模块

window.is_log = false;   //  控制开关
window.webpack_code = "";   // 保存webpack 使用的code

!function (t) {
    function e(s) {
        if (i[s])
            return i[s].exports;
        var n = i[s] = {
            exports: {},
            id: s,
            loaded: !1
        };
        if (window.is_log) {   // 打印调用函数  简化函数
            window.webpack_code = window.webpack_code + s + " : " + t [s] + "," + "\r\n"
        }
        return t[s].call(n.exports, n, n.exports, e),
            n.loaded = !0,
            n.exports
    }

    window.yoyo = e  // 导出加载器 保存为全局变量
    var i = {};
    return e.m = t,
        e.c = i,
        e.p = ""
    // e(0)   // 注释初始化
}()


function get_pwd(pwd) {
    window.isok = true
    let yoyo1 = window.yoyo(3);   // 加载指定模块
    let yoyo2 = new yoyo1;
    let r = {
        t: (new Date).getDate()
    }
    r.p = yoyo2.encode(pwd, r.t);
    window.isok = false;
    return r;
}

get_pwd("123")

7.修复加载器

自己编写个加载器