有赞pwd(js逆向,webpack)

本文深入探讨了如何利用JavaScript中的webpack工具进行代码打包。通过搜索关键字'password',找到并分析了相关js文件,讲解了如何设置断点、获取模块变量并进行代码解密。文章还介绍了webpack的模板应用、BufferedBlockAlgorithm工作原理,并展示了MD5哈希算法的实现。此外,还涵盖了加密和解密过程,包括AES、CBC模式和PKCS7填充的使用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言:(之前有个老哥私信我,让我再发一篇webpack的博客)

目标网址:B201113ADD8855D967888F331732B01B

直接搜password,看到login的js,点进去看看
在这里插入图片描述
有30个左右password,慢慢找就会找到这里 然后下断跟进去
在这里插入图片描述
然后就会看到下图这种东东,再拉回头部看看,大概率就是webpack了(上次发了一篇webpack原理讲得很仔细了,这次就直接看该怎么扣)
在这里插入图片描述

先套模板
在这里插入图片描述
然后在**var t = n(“wGdk”)**这里打上断点刷新页面,在控制台输入n(“wGdk”),然后点进去把wGdk扣出来
在这里插入图片描述
最后稍微改写一下就ok了
在这里插入图片描述
下面是完整代码

var fff;

!function(e) {

    var n = {}
    function d(t) {
        if (n[t])
            return n[t].exports;
        var r = n[t] = {
            i: t,
            l: !1,
            exports: {}
        };
        return e[t].call(r.exports, r, r.exports, d),
        r.l = !0,
        r.exports
    }
	fff =d;
}({
	
	"wGdk":function(e, t, n) {
        var r;
        void 0 === (r = function(e, t, n) {
            var r, o, i = i || function(e, t) {
                var n = {}
                  , r = n.lib = {}
                  , o = function() {}
                  , i = r.Base = {
                    extend: function(e) {
                        o.prototype = this;
                        var t = new o;
                        return e && t.mixIn(e),
                        t.hasOwnProperty("init") || (t.init = function() {
                            t.$super.init.apply(this, arguments)
                        }
                        ),
                        t.init.prototype = t,
                        t.$super = this,
                        t
                    },
                    create: function() {
                        var e = this.extend();
                        return e.init.apply(e, arguments),
                        e
                    },
                    init: function() {},
                    mixIn: function(e) {
                        for (var t in e)
                            e.hasOwnProperty(t) && (this[t] = e[t]);
                        e.hasOwnProperty("toString") && (this.toString = e.toString)
                    },
                    clone: function() {
                        return this.init.prototype.extend(this)
                    }
                }
                  , a = r.WordArray = i.extend({
                    init: function(e, t) {
                        e = this.words = e || [],
                        this.sigBytes = null != t ? t : 4 * e.length
                    },
                    toString: function(e) {
                        return (e || u).stringify(this)
                    },
                    concat: function(e) {
                        var t = this.words
                          , n = e.words
                          , r = this.sigBytes;
                        if (e = e.sigBytes,
                        this.clamp(),
                        r % 4)
                            for (var o = 0; o < e; o++)
                                t[r + o >>> 2] |= (n[o >>> 2] >>> 24 - o % 4 * 8 & 255) << 24 - (r + o) % 4 * 8;
                        else if (65535 < n.length)
                            for (o = 0; o < e; o += 4)
                                t[r + o >>> 2] = n[o >>> 2];
                        else
                            t.push.apply(t, n);
                        return this.sigBytes += e,
                        this
                    },
                    clamp: function() {
                        var t = this.words
                          , n = this.sigBytes;
                        t[n >>> 2] &= 4294967295 << 32 - n % 4 * 8,
                        t.length = e.ceil(n / 4)
                    },
                    clone: function() {
                        var e = i.clone.call(this);
                        return e.words = this.words.slice(0),
                        e
                    },
                    random: function(t) {
                        for (var n = [], r = 0; r < t; r += 4)
                            n.push(4294967296 * e.random() | 0);
                        return new a.init(n,t)
                    }
                })
                  , s = n.enc = {}
                  , u = s.Hex = {
                    stringify: function(e) {
                        var t = e.words;
                        e = e.sigBytes;
                        for (var n = [], r = 0; r < e; r++) {
                            var o = t[r >>> 2] >>> 24 - r % 4 * 8 & 255;
                            n.push((o >>> 4).toString(16)),
                            n.push((15 & o).toString(16))
                        }
                        return n.join("")
                    },
                    parse: function(e) {
                        for (var t = e.length, n = [], r = 0; r < t; r += 2)
                            n[r >>> 3] |= parseInt(e.substr(r, 2), 16) << 24 - r % 8 * 4;
                        return new a.init(n,t / 2)
                    }
                }
                  , c = s.Latin1 = {
                    stringify: function(e) {
                        var t = e.words;
                        e = e.sigBytes;
                        for (var n = [], r = 0; r < e; r++)
                            n.push(String.fromCharCode(t[r >>> 2] >>> 24 - r % 4 * 8 & 255));
                        return n.join("")
                    },
                    parse: function(e) {
                        for (var t = e.length, n = [], r = 0; r < t; r++)
                            n[r >>> 2] |= (255 & e.charCodeAt(r)) << 24 - r % 4 * 8;
                        return new a.init(n,t)
                    }
                }
                  , l = s.Utf8 = {
                    stringify: function(e) {
                        try {
                            return decodeURIComponent(escape(c.stringify(e)))
                        } catch (e) {
                            throw Error("Malformed UTF-8 data")
                        }
                    },
                    parse: function(e) {
                        return c.parse(unescape(encodeURIComponent(e)))
                    }
                }
                  , f = r.BufferedBlockAlgorithm = i.extend({
                    reset: function() {
                        this._data = new a.init,
                        this._nDataBytes = 0
                    },
                    _append: function(e) {
                        "string" == typeof e && (e = l.parse(e)),
                        this._data.concat(e),
                        this._nDataBytes += e.sigBytes
                    },
                    _process: function(t) {
                        var n = this._data
                          , r = n.words
                          , o = n.sigBytes
                          , i = this.blockSize
                          , s = o / (4 * i);
                        if (t = (s = t ? e.ceil(s) : e.max((0 | s) - this._minBufferSize, 0)) * i,
                        o = e.min(4 * t, o),
                        t) {
                            for (var u = 0; u < t; u += i)
                                this._doProcessBlock(r, u);
                            u = r.splice(0, t),
                            n.sigBytes -= o
                        }
                        return new a.init(u,o)
                    },
                    clone: function() {
                        var e = i.clone.call(this);
                        return e._data = this._data.clone(),
                        e
                    },
                    _minBufferSize: 0
                });
                r.Hasher = f.extend({
                    cfg: i.extend(),
                    init: function(e) {
                        this.cfg = this.cfg.extend(e),
                        this.reset()
                    },
                    reset: function() {
                        f.reset.call(this),
                        this._doReset()
                    },
                    update: function(e) {
                        return this._append(e),
                        this._process(),
                        this
                    },
                    finalize: function(e) {
                        return e && this._append(e),
                        this._doFinalize()
                    },
                    blockSize: 16,
                    _createHelper: function(e) {
                        return function(t, n) {
                            return new e.init(n).finalize(t)
                        }
                    },
                    _createHmacHelper: function(e) {
                        return function(t, n) {
                            return new d.HMAC.init(e,n).finalize(t)
                        }
                    }
                });
                var d = n.algo = {};
                return n
            }(Math);
            o = (r = i).lib.WordArray,
            r.enc.Base64 = {
                stringify: function(e) {
                    var t = e.words
                      , n = e.sigBytes
                      , r = this._map;
                    e.clamp(),
                    e = [];
                    for (var o = 0; o < n; o += 3)
                        for (var i = (t[o >>> 2] >>> 24 - o % 4 * 8 & 255) << 16 | (t[o + 1 >>> 2] >>> 24 - (o + 1) % 4 * 8 & 255) << 8 | t[o + 2 >>> 2] >>> 24 - (o + 2) % 4 * 8 & 255, a = 0; 4 > a && o + .75 * a < n; a++)
                            e.push(r.charAt(i >>> 6 * (3 - a) & 63));
                    if (t = r.charAt(64))
                        for (; e.length % 4; )
                            e.push(t);
                    return e.join("")
                },
                parse: function(e) {
                    var t = e.length
                      , n = this._map;
                    (r = n.charAt(64)) && -1 != (r = e.indexOf(r)) && (t = r);
                    for (var r = [], i = 0, a = 0; a < t; a++)
                        if (a % 4) {
                            var s = n.indexOf(e.charAt(a - 1)) << a % 4 * 2
                              , u = n.indexOf(e.charAt(a)) >>> 6 - a % 4 * 2;
                            r[i >>> 2] |= (s | u) << 24 - i % 4 * 8,
                            i++
                        }
                    return o.create(r, i)
                },
                _map: "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="
            },
            function(e) {
                function t(e, t, n, r, o, i, a) {
                    return ((e = e + (t & n | ~t & r) + o + a) << i | e >>> 32 - i) + t
                }
                function n(e, t, n, r, o, i, a) {
                    return ((e = e + (t & r | n & ~r) + o + a) << i | e >>> 32 - i) + t
                }
                function r(e, t, n, r, o, i, a) {
                    return ((e = e + (t ^ n ^ r) + o + a) << i | e >>> 32 - i) + t
                }
                function o(e, t, n, r, o, i, a) {
                    return ((e = e + (n ^ (t | ~r)) + o + a) << i | e >>> 32 - i) + t
                }
                for (var a = i, s = (c = a.lib).WordArray, u = c.Hasher, c = a.algo, l = [], f = 0; 64 > f; f++)
                    l[f] = 4294967296 * e.abs(e.sin(f + 1)) | 0;
                c = c.MD5 = u.extend({
                    _doReset: function() {
                        this._hash = new s.init([1732584193, 4023233417, 2562383102, 271733878])
                    },
                    _doProcessBlock: function(e, i) {
                        for (var a = 0; 16 > a; a++) {
                            var s = e[u = i + a];
                            e[u] = 16711935 & (s << 8 | s >>> 24) | 4278255360 & (s << 24 | s >>> 8)
                        }
                        a = this._hash.words;
                        var u = e[i + 0]
                          , c = (s = e[i + 1],
                        e[i + 2])
                          , f = e[i + 3]
                          , d = e[i + 4]
                          , p = e[i + 5]
                          , h = e[i + 6]
                          , m = e[i + 7]
                          , v = e[i + 8]
                          , g = e[i + 9]
                          , y = e[i + 10]
                          , b = e[i + 11]
                          , w = e[i + 12]
                          , x = e[i + 13]
                          , E = e[i + 14]
                          , _ = e[i + 15]
                          , C = t(C = a[0], O = a[1], k = a[2], S = a[3], u, 7, l[0])
                          , S = t(S, C, O, k, s, 12, l[1])
                          , k = t(k, S, C, O, c, 17, l[2])
                          , O = t(O, k, S, C, f, 22, l[3]);
                        C = t(C, O, k, S, d, 7, l[4]),
                        S = t(S, C, O, k, p, 12, l[5]),
                        k = t(k, S, C, O, h, 17, l[6]),
                        O = t(O, k, S, C, m, 22, l[7]),
                        C = t(C, O, k, S, v, 7, l[8]),
                        S = t(S, C, O, k, g, 12, l[9]),
                        k = t(k, S, C, O, y, 17, l[10]),
                        O = t(O, k, S, C, b, 22, l[11]),
                        C = t(C, O, k, S, w, 7, l[12]),
                        S = t(S, C, O, k, x, 12, l[13]),
                        k = t(k, S, C, O, E, 17, l[14]),
                        C = n(C, O = t(O, k, S, C, _, 22, l[15]), k, S, s, 5, l[16]),
                        S = n(S, C, O, k, h, 9, l[17]),
                        k = n(k, S, C, O, b, 14, l[18]),
                        O = n(O, k, S, C, u, 20, l[19]),
                        C = n(C, O, k, S, p, 5, l[20]),
                        S = n(S, C, O, k, y, 9, l[21]),
                        k = n(k, S, C, O, _, 14, l[22]),
                        O = n(O, k, S, C, d, 20, l[23]),
                        C = n(C, O, k, S, g, 5, l[24]),
                        S = n(S, C, O, k, E, 9, l[25]),
                        k = n(k, S, C, O, f, 14, l[26]),
                        O = n(O, k, S, C, v, 20, l[27]),
                        C = n(C, O, k, S, x, 5, l[28]),
                        S = n(S, C, O, k, c, 9, l[29]),
                        k = n(k, S, C, O, m, 14, l[30]),
                        C = r(C, O = n(O, k, S, C, w, 20, l[31]), k, S, p, 4, l[32]),
                        S = r(S, C, O, k, v, 11, l[33]),
                        k = r(k, S, C, O, b, 16, l[34]),
                        O = r(O, k, S, C, E, 23, l[35]),
                        C = r(C, O, k, S, s, 4, l[36]),
                        S = r(S, C, O, k, d, 11, l[37]),
                        k = r(k, S, C, O, m, 16, l[38]),
                        O = r(O, k, S, C, y, 23, l[39]),
                        C = r(C, O, k, S, x, 4, l[40]),
                        S = r(S, C, O, k, u, 11, l[41]),
                        k = r(k, S, C, O, f, 16, l[42]),
                        O = r(O, k, S, C, h, 23, l[43]),
                        C = r(C, O, k, S, g, 4, l[44]),
                        S = r(S, C, O, k, w, 11, l[45]),
                        k = r(k, S, C, O, _, 16, l[46]),
                        C = o(C, O = r(O, k, S, C, c, 23, l[47]), k, S, u, 6, l[48]),
                        S = o(S, C, O, k, m, 10, l[49]),
                        k = o(k, S, C, O, E, 15, l[50]),
                        O = o(O, k, S, C, p, 21, l[51]),
                        C = o(C, O, k, S, w, 6, l[52]),
                        S = o(S, C, O, k, f, 10, l[53]),
                        k = o(k, S, C, O, y, 15, l[54]),
                        O = o(O, k, S, C, s, 21, l[55]),
                        C = o(C, O, k, S, v, 6, l[56]),
                        S = o(S, C, O, k, _, 10, l[57]),
                        k = o(k, S, C, O, h, 15, l[58]),
                        O = o(O, k, S, C, x, 21, l[59]),
                        C = o(C, O, k, S, d, 6, l[60]),
                        S = o(S, C, O, k, b, 10, l[61]),
                        k = o(k, S, C, O, c, 15, l[62]),
                        O = o(O, k, S, C, g, 21, l[63]);
                        a[0] = a[0] + C | 0,
                        a[1] = a[1] + O | 0,
                        a[2] = a[2] + k | 0,
                        a[3] = a[3] + S | 0
                    },
                    _doFinalize: function() {
                        var t = this._data
                          , n = t.words
                          , r = 8 * this._nDataBytes
                          , o = 8 * t.sigBytes;
                        n[o >>> 5] |= 128 << 24 - o % 32;
                        var i = e.floor(r / 4294967296);
                        for (n[15 + (o + 64 >>> 9 << 4)] = 16711935 & (i << 8 | i >>> 24) | 4278255360 & (i << 24 | i >>> 8),
                        n[14 + (o + 64 >>> 9 << 4)] = 16711935 & (r << 8 | r >>> 24) | 4278255360 & (r << 24 | r >>> 8),
                        t.sigBytes = 4 * (n.length + 1),
                        this._process(),
                        n = (t = this._hash).words,
                        r = 0; 4 > r; r++)
                            o = n[r],
                            n[r] = 16711935 & (o << 8 | o >>> 24) | 4278255360 & (o << 24 | o >>> 8);
                        return t
                    },
                    clone: function() {
                        var e = u.clone.call(this);
                        return e._hash = this._hash.clone(),
                        e
                    }
                }),
                a.MD5 = u._createHelper(c),
                a.HmacMD5 = u._createHmacHelper(c)
            }(Math),
            function() {
                var e, t = i, n = (e = t.lib).Base, r = e.WordArray, o = (e = t.algo).EvpKDF = n.extend({
                    cfg: n.extend({
                        keySize: 4,
                        hasher: e.MD5,
                        iterations: 1
                    }),
                    init: function(e) {
                        this.cfg = this.cfg.extend(e)
                    },
                    compute: function(e, t) {
                        for (var n = (s = this.cfg).hasher.create(), o = r.create(), i = o.words, a = s.keySize, s = s.iterations; i.length < a; ) {
                            u && n.update(u);
                            var u = n.update(e).finalize(t);
                            n.reset();
                            for (var c = 1; c < s; c++)
                                u = n.finalize(u),
                                n.reset();
                            o.concat(u)
                        }
                        return o.sigBytes = 4 * a,
                        o
                    }
                });
                t.EvpKDF = function(e, t, n) {
                    return o.create(n).compute(e, t)
                }
            }(),
            i.lib.Cipher || function(e) {
                var t = (h = i).lib
                  , n = t.Base
                  , r = t.WordArray
                  , o = t.BufferedBlockAlgorithm
                  , a = h.enc.Base64
                  , s = h.algo.EvpKDF
                  , u = t.Cipher = o.extend({
                    cfg: n.extend(),
                    createEncryptor: function(e, t) {
                        return this.create(this._ENC_XFORM_MODE, e, t)
                    },
                    createDecryptor: function(e, t) {
                        return this.create(this._DEC_XFORM_MODE, e, t)
                    },
                    init: function(e, t, n) {
                        this.cfg = this.cfg.extend(n),
                        this._xformMode = e,
                        this._key = t,
                        this.reset()
                    },
                    reset: function() {
                        o.reset.call(this),
                        this._doReset()
                    },
                    process: function(e) {
                        return this._append(e),
                        this._process()
                    },
                    finalize: function(e) {
                        return e && this._append(e),
                        this._doFinalize()
                    },
                    keySize: 4,
                    ivSize: 4,
                    _ENC_XFORM_MODE: 1,
                    _DEC_XFORM_MODE: 2,
                    _createHelper: function(e) {
                        return {
                            encrypt: function(t, n, r) {
                                return ("string" == typeof n ? m : p).encrypt(e, t, n, r)
                            },
                            decrypt: function(t, n, r) {
                                return ("string" == typeof n ? m : p).decrypt(e, t, n, r)
                            }
                        }
                    }
                });
                t.StreamCipher = u.extend({
                    _doFinalize: function() {
                        return this._process(!0)
                    },
                    blockSize: 1
                });
                var c = h.mode = {}
                  , l = function(e, t, n) {
                    var r = this._iv;
                    r ? this._iv = void 0 : r = this._prevBlock;
                    for (var o = 0; o < n; o++)
                        e[t + o] ^= r[o]
                }
                  , f = (t.BlockCipherMode = n.extend({
                    createEncryptor: function(e, t) {
                        return this.Encryptor.create(e, t)
                    },
                    createDecryptor: function(e, t) {
                        return this.Decryptor.create(e, t)
                    },
                    init: function(e, t) {
                        this._cipher = e,
                        this._iv = t
                    }
                })).extend();
                f.Encryptor = f.extend({
                    processBlock: function(e, t) {
                        var n = this._cipher
                          , r = n.blockSize;
                        l.call(this, e, t, r),
                        n.encryptBlock(e, t),
                        this._prevBlock = e.slice(t, t + r)
                    }
                }),
                f.Decryptor = f.extend({
                    processBlock: function(e, t) {
                        var n = this._cipher
                          , r = n.blockSize
                          , o = e.slice(t, t + r);
                        n.decryptBlock(e, t),
                        l.call(this, e, t, r),
                        this._prevBlock = o
                    }
                }),
                c = c.CBC = f,
                f = (h.pad = {}).Pkcs7 = {
                    pad: function(e, t) {
                        for (var n, o = (n = (n = 4 * t) - e.sigBytes % n) << 24 | n << 16 | n << 8 | n, i = [], a = 0; a < n; a += 4)
                            i.push(o);
                        n = r.create(i, n),
                        e.concat(n)
                    },
                    unpad: function(e) {
                        e.sigBytes -= 255 & e.words[e.sigBytes - 1 >>> 2]
                    }
                },
                t.BlockCipher = u.extend({
                    cfg: u.cfg.extend({
                        mode: c,
                        padding: f
                    }),
                    reset: function() {
                        u.reset.call(this);
                        var e = (t = this.cfg).iv
                          , t = t.mode;
                        if (this._xformMode == this._ENC_XFORM_MODE)
                            var n = t.createEncryptor;
                        else
                            n = t.createDecryptor,
                            this._minBufferSize = 1;
                        this._mode = n.call(t, this, e && e.words)
                    },
                    _doProcessBlock: function(e, t) {
                        this._mode.processBlock(e, t)
                    },
                    _doFinalize: function() {
                        var e = this.cfg.padding;
                        if (this._xformMode == this._ENC_XFORM_MODE) {
                            e.pad(this._data, this.blockSize);
                            var t = this._process(!0)
                        } else
                            t = this._process(!0),
                            e.unpad(t);
                        return t
                    },
                    blockSize: 4
                });
                var d = t.CipherParams = n.extend({
                    init: function(e) {
                        this.mixIn(e)
                    },
                    toString: function(e) {
                        return (e || this.formatter).stringify(this)
                    }
                })
                  , p = (c = (h.format = {}).OpenSSL = {
                    stringify: function(e) {
                        var t = e.ciphertext;
                        return ((e = e.salt) ? r.create([1398893684, 1701076831]).concat(e).concat(t) : t).toString(a)
                    },
                    parse: function(e) {
                        var t = (e = a.parse(e)).words;
                        if (1398893684 == t[0] && 1701076831 == t[1]) {
                            var n = r.create(t.slice(2, 4));
                            t.splice(0, 4),
                            e.sigBytes -= 16
                        }
                        return d.create({
                            ciphertext: e,
                            salt: n
                        })
                    }
                },
                t.SerializableCipher = n.extend({
                    cfg: n.extend({
                        format: c
                    }),
                    encrypt: function(e, t, n, r) {
                        r = this.cfg.extend(r);
                        var o = e.createEncryptor(n, r);
                        return t = o.finalize(t),
                        o = o.cfg,
                        d.create({
                            ciphertext: t,
                            key: n,
                            iv: o.iv,
                            algorithm: e,
                            mode: o.mode,
                            padding: o.padding,
                            blockSize: e.blockSize,
                            formatter: r.format
                        })
                    },
                    decrypt: function(e, t, n, r) {
                        return r = this.cfg.extend(r),
                        t = this._parse(t, r.format),
                        e.createDecryptor(n, r).finalize(t.ciphertext)
                    },
                    _parse: function(e, t) {
                        return "string" == typeof e ? t.parse(e, this) : e
                    }
                }))
                  , h = (h.kdf = {}).OpenSSL = {
                    execute: function(e, t, n, o) {
                        return o || (o = r.random(8)),
                        e = s.create({
                            keySize: t + n
                        }).compute(e, o),
                        n = r.create(e.words.slice(t), 4 * n),
                        e.sigBytes = 4 * t,
                        d.create({
                            key: e,
                            iv: n,
                            salt: o
                        })
                    }
                }
                  , m = t.PasswordBasedCipher = p.extend({
                    cfg: p.cfg.extend({
                        kdf: h
                    }),
                    encrypt: function(e, t, n, r) {
                        return n = (r = this.cfg.extend(r)).kdf.execute(n, e.keySize, e.ivSize),
                        r.iv = n.iv,
                        (e = p.encrypt.call(this, e, t, n.key, r)).mixIn(n),
                        e
                    },
                    decrypt: function(e, t, n, r) {
                        return r = this.cfg.extend(r),
                        t = this._parse(t, r.format),
                        n = r.kdf.execute(n, e.keySize, e.ivSize, t.salt),
                        r.iv = n.iv,
                        p.decrypt.call(this, e, t, n.key, r)
                    }
                })
            }(),
            function() {
                for (var e = i, t = e.lib.BlockCipher, n = e.algo, r = [], o = [], a = [], s = [], u = [], c = [], l = [], f = [], d = [], p = [], h = [], m = 0; 256 > m; m++)
                    h[m] = 128 > m ? m << 1 : m << 1 ^ 283;
                var v = 0
                  , g = 0;
                for (m = 0; 256 > m; m++) {
                    var y = (y = g ^ g << 1 ^ g << 2 ^ g << 3 ^ g << 4) >>> 8 ^ 255 & y ^ 99;
                    r[v] = y,
                    o[y] = v;
                    var b = h[v]
                      , w = h[b]
                      , x = h[w]
                      , E = 257 * h[y] ^ 16843008 * y;
                    a[v] = E << 24 | E >>> 8,
                    s[v] = E << 16 | E >>> 16,
                    u[v] = E << 8 | E >>> 24,
                    c[v] = E,
                    E = 16843009 * x ^ 65537 * w ^ 257 * b ^ 16843008 * v,
                    l[y] = E << 24 | E >>> 8,
                    f[y] = E << 16 | E >>> 16,
                    d[y] = E << 8 | E >>> 24,
                    p[y] = E,
                    v ? (v = b ^ h[h[h[x ^ b]]],
                    g ^= h[h[g]]) : v = g = 1
                }
                var _ = [0, 1, 2, 4, 8, 16, 32, 64, 128, 27, 54];
                n = n.AES = t.extend({
                    _doReset: function() {
                        for (var e = (n = this._key).words, t = n.sigBytes / 4, n = 4 * ((this._nRounds = t + 6) + 1), o = this._keySchedule = [], i = 0; i < n; i++)
                            if (i < t)
                                o[i] = e[i];
                            else {
                                var a = o[i - 1];
                                i % t ? 6 < t && 4 == i % t && (a = r[a >>> 24] << 24 | r[a >>> 16 & 255] << 16 | r[a >>> 8 & 255] << 8 | r[255 & a]) : (a = r[(a = a << 8 | a >>> 24) >>> 24] << 24 | r[a >>> 16 & 255] << 16 | r[a >>> 8 & 255] << 8 | r[255 & a],
                                a ^= _[i / t | 0] << 24),
                                o[i] = o[i - t] ^ a
                            }
                        for (e = this._invKeySchedule = [],
                        t = 0; t < n; t++)
                            i = n - t,
                            a = t % 4 ? o[i] : o[i - 4],
                            e[t] = 4 > t || 4 >= i ? a : l[r[a >>> 24]] ^ f[r[a >>> 16 & 255]] ^ d[r[a >>> 8 & 255]] ^ p[r[255 & a]]
                    },
                    encryptBlock: function(e, t) {
                        this._doCryptBlock(e, t, this._keySchedule, a, s, u, c, r)
                    },
                    decryptBlock: function(e, t) {
                        var n = e[t + 1];
                        e[t + 1] = e[t + 3],
                        e[t + 3] = n,
                        this._doCryptBlock(e, t, this._invKeySchedule, l, f, d, p, o),
                        n = e[t + 1],
                        e[t + 1] = e[t + 3],
                        e[t + 3] = n
                    },
                    _doCryptBlock: function(e, t, n, r, o, i, a, s) {
                        for (var u = this._nRounds, c = e[t] ^ n[0], l = e[t + 1] ^ n[1], f = e[t + 2] ^ n[2], d = e[t + 3] ^ n[3], p = 4, h = 1; h < u; h++) {
                            var m = r[c >>> 24] ^ o[l >>> 16 & 255] ^ i[f >>> 8 & 255] ^ a[255 & d] ^ n[p++]
                              , v = r[l >>> 24] ^ o[f >>> 16 & 255] ^ i[d >>> 8 & 255] ^ a[255 & c] ^ n[p++]
                              , g = r[f >>> 24] ^ o[d >>> 16 & 255] ^ i[c >>> 8 & 255] ^ a[255 & l] ^ n[p++];
                            d = r[d >>> 24] ^ o[c >>> 16 & 255] ^ i[l >>> 8 & 255] ^ a[255 & f] ^ n[p++],
                            c = m,
                            l = v,
                            f = g
                        }
                        m = (s[c >>> 24] << 24 | s[l >>> 16 & 255] << 16 | s[f >>> 8 & 255] << 8 | s[255 & d]) ^ n[p++],
                        v = (s[l >>> 24] << 24 | s[f >>> 16 & 255] << 16 | s[d >>> 8 & 255] << 8 | s[255 & c]) ^ n[p++],
                        g = (s[f >>> 24] << 24 | s[d >>> 16 & 255] << 16 | s[c >>> 8 & 255] << 8 | s[255 & l]) ^ n[p++],
                        d = (s[d >>> 24] << 24 | s[c >>> 16 & 255] << 16 | s[l >>> 8 & 255] << 8 | s[255 & f]) ^ n[p++],
                        e[t] = m,
                        e[t + 1] = v,
                        e[t + 2] = g,
                        e[t + 3] = d
                    },
                    keySize: 8
                });
                e.AES = t._createHelper(n)
            }(),
            i.pad.Iso10126 = {
                pad: function(e, t) {
                    var n = (n = 4 * t) - e.sigBytes % n;
                    e.concat(i.lib.WordArray.random(n - 1)).concat(i.lib.WordArray.create([n << 24], 1))
                },
                unpad: function(e) {
                    e.sigBytes -= 255 & e.words[e.sigBytes - 1 >>> 2]
                }
            },
            n.exports = i
        }
        .call(t, n, t, e)) || (e.exports = r)
    }
	
	
})


function getpwd(pwd){
	var t = fff("wGdk")
	, r = t.enc.Utf8.parse("youzan.com.aesiv")
	, o = t.enc.Utf8.parse("youzan.com._key_")
    , e = t.enc.Utf8.parse(pwd);
	return t.AES.encrypt(e, o, {mode: t.mode.CBC,padding: t.pad.Iso10126,iv: r}).toString()
	
}
根据提供的引用内容,美团滑块验证的js逆向过程如下所示: 1. 首先,需要获取主页接口的参数,包括csrf、uuid、token_id和continues等。这些参数可以在第一个链接返回的源码中找到。 2. 接下来,使用这些参数进行登入接口的请求,其中包括两个加密参数password和h5Fingerprint。 3. 然后,通过验证码获取的接口来获取验证码相关的参数,如verifyMethodVersion、slider、yodaVersion、timestamp、sign、ses和requestCode等。 4. 在获取到这些参数后,可以进行验证接口的请求。该请求需要使用到加密参数behavior和_token,以及动态参数v_c和3eac9809,同时还需要在请求头中添加Authencation。 总结起来,美团滑块验证的逆向过程可分为以下步骤: 1. 获取主页参数 2. 逆向pwd和h5Fingerprint 3. 请求page_data链接 4. 逆向Authencation、behavior和_token 5. 发起最终的验证请求 需要注意的是,以上仅是根据提供的引用内容进行的分析,具体的逆向过程可能还需要进一步的研究和分析。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [【2023-03-10】JS逆向之美团滑块](https://blog.youkuaiyun.com/qq_26079939/article/details/129442967)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *3* [美团滑块(1-18,js逆向)](https://blog.youkuaiyun.com/weixin_44772112/article/details/128721509)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值