webpack js 逆向 --- 个人记录

  1. 网站
    aHR0cDovL2FlcmZheWluZy5jb20v
  2. 加密参数
    在这里插入图片描述
  3. 参数加密位置
    在这里插入图片描述

方法:

1. 构造自执行函数

!function(e) {
	// 加载器
}(
   // 模块1;
   // 模块2
)

2. 找到js的加载器
在这里插入图片描述
3. 把上述代码放入第一步构造的自执行函数(完整扣取一整个加载器里的代码),并用一个全局参数接收加载器,比如window.zzz = i;
自执行代码如下:

var window=global;
!function(e) {
    function t(t) {
        for (var r, i, l = t[0], s = t[1], u = t[2], f = 0, p = []; f < l.length; f++)
            i = l[f],
            Object.prototype.hasOwnProperty.call(o, i) && o[i] && p.push(o[i][0]),
            o[i] = 0;
        for (r in s)
            Object.prototype.hasOwnProperty.call(s, r) && (e[r] = s[r]);
        for (c && c(t); p.length; )
            p.shift()();
        return a.push.apply(a, u || []),
        n()
    }
    function n() {
        for (var e, t = 0; t < a.length; t++) {
            for (var n = a[t], r = !0, l = 1; l < n.length; l++) {
                var s = n[l];
                0 !== o[s] && (r = !1)
            }
            r && (a.splice(t--, 1),
            e = i(i.s = n[0]))
        }
        return e
    }
    var r = {}
      , o = {
        0: 0
    }
      , a = [];
    function i(t) {
        if (r[t])
            return r[t].exports;
        var n = r[t] = {
            i: t,
            l: !1,
            exports: {}
        };
        return e[t].call(n.exports, n, n.exports, i),
        n.l = !0,
        n.exports
    }
    window.zzz = i; // 定义一个参数window.zzz接收加载器

    ;
    var l = window.webpackJsonp = window.webpackJsonp || []
      , s = l.push.bind(l);
    l.push = t,
    l = l.slice();
    for (var u = 0; u < l.length; u++)
        t(l[u]);
    var c = s;
}({
	// 模块1;
   // 模块2
})

4. 把加密位置的代码扣取下来,放入自执行函数的模块里,然后定义一个模块名给,比如jsencrypt,自执行函数代码如下:

var window=global;
!function(e) {
    function t(t) {
        for (var r, i, l = t[0], s = t[1], u = t[2], f = 0, p = []; f < l.length; f++)
            i = l[f],
            Object.prototype.hasOwnProperty.call(o, i) && o[i] && p.push(o[i][0]),
            o[i] = 0;
        for (r in s)
            Object.prototype.hasOwnProperty.call(s, r) && (e[r] = s[r]);
        for (c && c(t); p.length; )
            p.shift()();
        return a.push.apply(a, u || []),
        n()
    }
    function n() {
        for (var e, t = 0; t < a.length; t++) {
            for (var n = a[t], r = !0, l = 1; l < n.length; l++) {
                var s = n[l];
                0 !== o[s] && (r = !1)
            }
            r && (a.splice(t--, 1),
            e = i(i.s = n[0]))
        }
        return e
    }
    var r = {}
      , o = {
        0: 0
    }
      , a = [];
    function i(t) {
        if (r[t])
            return r[t].exports;
        var n = r[t] = {
            i: t,
            l: !1,
            exports: {}
        };
        return e[t].call(n.exports, n, n.exports, i),
        n.l = !0,
        n.exports
    }
    window.zzz = i; // 定义一个参数window.zzz接收加载器

    ;
    var l = window.webpackJsonp = window.webpackJsonp || []
      , s = l.push.bind(l);
    l.push = t,
    l = l.slice();
    for (var u = 0; u < l.length; u++)
        t(l[u]);
    var c = s;

}(
    {
    	// 模块名:jsencrypt
        jsencrypt:function(e, t, n) {
    "use strict";
    Object.defineProperty(t, "__esModule", {
        value: !0
    });
    t.default = function(e, t) {
        var n = (new Date).getTime() + 2592e6 + (t || 3e4)
          , r = (e || "") + "&t=" + n;
        return {
            t: n,
            s: Sha1.hash(r)
        }
    }
}},
)

5. 对上述代码new一下,然后执行jsencrypt方法,运行代码,发现报错

result = new window.zzz("jsencrypt").default()
console.log(result)

报错:
在这里插入图片描述
6. 然后去源码里扣取Sha1的代码

最后所有js代码如下:

var window=global;

function Sha1() {}
Sha1.hash = function(n, t) {
    var w = Object.