webpack js 逆向 --- 个人记录

海哥  论坛元老 | 2025-4-11 06:48:39 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 1577|帖子 1577|积分 4731


  • 网站
    aHR0cDovL2FlcmZheWluZy5jb20v
  • 加密参数

  • 参数加密位置

方法:

1. 构造自执行函数
  1. !function(e) {
  2.         // 加载器
  3. }(
  4.    // 模块1;
  5.    // 模块2
  6. )
复制代码
2. 找到js的加载器

3. 把上述代码放入第一步构造的自执行函数(完整扣取一整个加载器里的代码),并用一个全局参数接收加载器,比如window.zzz = i;
自执行代码如下:
  1. var window=global;
  2. !function(e) {
  3.     function t(t) {
  4.         for (var r, i, l = t[0], s = t[1], u = t[2], f = 0, p = []; f < l.length; f++)
  5.             i = l[f],
  6.             Object.prototype.hasOwnProperty.call(o, i) && o[i] && p.push(o[i][0]),
  7.             o[i] = 0;
  8.         for (r in s)
  9.             Object.prototype.hasOwnProperty.call(s, r) && (e[r] = s[r]);
  10.         for (c && c(t); p.length; )
  11.             p.shift()();
  12.         return a.push.apply(a, u || []),
  13.         n()
  14.     }
  15.     function n() {
  16.         for (var e, t = 0; t < a.length; t++) {
  17.             for (var n = a[t], r = !0, l = 1; l < n.length; l++) {
  18.                 var s = n[l];
  19.                 0 !== o[s] && (r = !1)
  20.             }
  21.             r && (a.splice(t--, 1),
  22.             e = i(i.s = n[0]))
  23.         }
  24.         return e
  25.     }
  26.     var r = {}
  27.       , o = {
  28.         0: 0
  29.     }
  30.       , a = [];
  31.     function i(t) {
  32.         if (r[t])
  33.             return r[t].exports;
  34.         var n = r[t] = {
  35.             i: t,
  36.             l: !1,
  37.             exports: {}
  38.         };
  39.         return e[t].call(n.exports, n, n.exports, i),
  40.         n.l = !0,
  41.         n.exports
  42.     }
  43.     window.zzz = i; // 定义一个参数window.zzz接收加载器
  44.     ;
  45.     var l = window.webpackJsonp = window.webpackJsonp || []
  46.       , s = l.push.bind(l);
  47.     l.push = t,
  48.     l = l.slice();
  49.     for (var u = 0; u < l.length; u++)
  50.         t(l[u]);
  51.     var c = s;
  52. }({
  53.         // 模块1;
  54.    // 模块2
  55. })
复制代码
4. 把加密位置的代码扣取下来,放入自执行函数的模块里,然后界说一个模块名给,比如jsencrypt,自执行函数代码如下:
  1. var window=global;
  2. !function(e) {
  3.     function t(t) {
  4.         for (var r, i, l = t[0], s = t[1], u = t[2], f = 0, p = []; f < l.length; f++)
  5.             i = l[f],
  6.             Object.prototype.hasOwnProperty.call(o, i) && o[i] && p.push(o[i][0]),
  7.             o[i] = 0;
  8.         for (r in s)
  9.             Object.prototype.hasOwnProperty.call(s, r) && (e[r] = s[r]);
  10.         for (c && c(t); p.length; )
  11.             p.shift()();
  12.         return a.push.apply(a, u || []),
  13.         n()
  14.     }
  15.     function n() {
  16.         for (var e, t = 0; t < a.length; t++) {
  17.             for (var n = a[t], r = !0, l = 1; l < n.length; l++) {
  18.                 var s = n[l];
  19.                 0 !== o[s] && (r = !1)
  20.             }
  21.             r && (a.splice(t--, 1),
  22.             e = i(i.s = n[0]))
  23.         }
  24.         return e
  25.     }
  26.     var r = {}
  27.       , o = {
  28.         0: 0
  29.     }
  30.       , a = [];
  31.     function i(t) {
  32.         if (r[t])
  33.             return r[t].exports;
  34.         var n = r[t] = {
  35.             i: t,
  36.             l: !1,
  37.             exports: {}
  38.         };
  39.         return e[t].call(n.exports, n, n.exports, i),
  40.         n.l = !0,
  41.         n.exports
  42.     }
  43.     window.zzz = i; // 定义一个参数window.zzz接收加载器
  44.     ;
  45.     var l = window.webpackJsonp = window.webpackJsonp || []
  46.       , s = l.push.bind(l);
  47.     l.push = t,
  48.     l = l.slice();
  49.     for (var u = 0; u < l.length; u++)
  50.         t(l[u]);
  51.     var c = s;
  52. }(
  53.     {
  54.             // 模块名:jsencrypt
  55.         jsencrypt:function(e, t, n) {
  56.     "use strict";
  57.     Object.defineProperty(t, "__esModule", {
  58.         value: !0
  59.     });
  60.     t.default = function(e, t) {
  61.         var n = (new Date).getTime() + 2592e6 + (t || 3e4)
  62.           , r = (e || "") + "&t=" + n;
  63.         return {
  64.             t: n,
  65.             s: Sha1.hash(r)
  66.         }
  67.     }
  68. }},
  69. )
复制代码
5. 对上述代码new一下,然后执行jsencrypt方法,运行代码,发现报错
  1. result = new window.zzz("jsencrypt").default()
  2. console.log(result)
复制代码
报错:

6. 然后去源码里扣取Sha1的代码
最后所有js代码如下:
  1. var window=global;function Sha1() {}Sha1.hash = function(n, t) {    var w = Object.assign({        msgFormat: "string",        outFormat: "hex"    }, t), b, i, f, u, e, r, p, k, h, d;    switch (w.msgFormat) {    default:    case "string":        n = Sha1.utf8Encode(n);        break;    case "hex-bytes":        n = Sha1.hexBytesToString(n)    }    b = [1518500249, 1859775393, 2400959708, 3395469782];    i = [1732584193, 4023233417, 2562383102, 271733878, 3285377520];    n += String.fromCharCode(128);    var g = n.length / 4 + 2      , o = Math.ceil(g / 16)      , s = new Array(o);    for (u = 0; u < o; u++)        for (s[u] = new Array(16),        f = 0; f < 16; f++)            s[u][f] = n.charCodeAt(u * 64 + f * 4) << 24 | n.charCodeAt(u * 64 + f * 4 + 1) << 16 | n.charCodeAt(u * 64 + f * 4 + 2) << 8 | n.charCodeAt(u * 64 + f * 4 + 3);    for (s[o - 1][14] = (n.length - 1) * 8 / Math.pow(2, 32),    s[o - 1][14] = Math.floor(s[o - 1][14]),    s[o - 1][15] = (n.length - 1) * 8 & 4294967295,    u = 0; u < o; u++) {        for (e = new Array(80),        r = 0; r < 16; r++)            e[r] = s[u][r];        for (r = 16; r < 80; r++)            e[r] = Sha1.ROTL(e[r - 3] ^ e[r - 8] ^ e[r - 14] ^ e[r - 16], 1);        var c = i[0]          , l = i[1]          , a = i[2]          , v = i[3]          , y = i[4];        for (r = 0; r < 80; r++)            p = Math.floor(r / 20),            k = Sha1.ROTL(c, 5) + Sha1.f(p, l, a, v) + y + b[p] + e[r] >>> 0,            y = v,            v = a,            a = Sha1.ROTL(l, 30) >>> 0,            l = c,            c = k;        i[0] = i[0] + c >>> 0;        i[1] = i[1] + l >>> 0;        i[2] = i[2] + a >>> 0;        i[3] = i[3] + v >>> 0;        i[4] = i[4] + y >>> 0    }    for (h = 0; h < i.length; h++)        i[h] = ("00000000" + i[h].toString(16)).slice(-8);    return d = w.outFormat == "hex-w" ? " " : "",    i.join(d)};Sha1.f = function(n, t, i, r) {    switch (n) {    case 0:        return t & i ^ ~t & r;    case 1:        return t ^ i ^ r;    case 2:        return t & i ^ t & r ^ i & r;    case 3:        return t ^ i ^ r    }};Sha1.ROTL = function(n, t) {    return n << t | n >>> 32 - t};Sha1.utf8Encode = function(n) {    return unescape(encodeURIComponent(n))};Sha1.hexBytesToString = function(n) {    var i, t;    for (n = n.replace(" ", ""),    i = "",    t = 0; t < n.length; t += 2)        i += String.fromCharCode(parseInt(n.slice(t, t + 2), 16));    return i}!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)        }    }}},)result = new window.zzz("jsencrypt").default()
  2. console.log(result)
复制代码
最后运行结果:


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

海哥

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表