【WP】猿人学_16_js逆向_window蜜罐

news2024/11/18 7:31:01

https://match.yuanrenxue.cn/match/16

在这里插入图片描述

抓包分析

荷载一个加密参数,一个时间戳
在这里插入图片描述

时间: 2024-06-07 15:52:31

时间戳: 1717746751   1717746751000

时间戳和现在对得上,直接生成就行。

追栈

追栈找m的生成位置。
在这里插入图片描述
点进去打断点,重新点击其他页面发包,清晰定位到m的位置。
在这里插入图片描述
看我下图中的分析过程,实际是对p_s 进行base64加密,但每次的结果都不一样,有点儿意思。在这里插入图片描述

在这里插入图片描述

破案了,这个btoa不是浏览器原生,点进去发现是自定义函数。
先尝试扣一下吧

补环境


function encode(e) {
    var t = u
        , r = {};
    r.TGmSp = t(244) + "ARACTER_ERR",
        r[t(238)] = t(224) + t(250) + "/",
        r[t(205)] = "^([^ ]+( +" + t(230) + t(259),
        r.aYkvo = function (e) {
            return e()
        }
        ,
        r[t(254)] = function (e, t) {
            return e % t
        }
        ,
        r.evetF = function (e, t) {
            return e >> t
        }
        ,
        r.GfTek = t(196),
        r[t(260)] = function (e, t) {
            return e << t
        }
        ,
        r[t(229)] = function (e, t) {
            return e | t
        }
        ,
        r[t(242)] = function (e, t) {
            return e << t
        }
        ,
        r[t(228)] = function (e, t) {
            return e & t
        }
        ,
        r[t(207)] = function (e, t) {
            return e << t
        }
        ,
        r[t(202)] = function (e, t) {
            return e & t
        }
        ,
        r.jdwcO = function (e, t) {
            return e === t
        }
        ,
        r.kPdGe = t(231),
        r[t(195)] = t(213),
        r[t(201)] = function (e, t) {
            return e & t
        }
        ,
        r[t(206)] = function (e, t) {
            return e == t
        }
        ,
        r[t(219)] = function (e, t) {
            return e + t
        }
        ,
        r[t(220)] = function (e, t) {
            return e(t)
        }
    ;
    var i = r;
    if (/([^\u0000-\u00ff])/.test(e))
        throw new Error(i.TGmSp);
    for (var o, a, s, l = 0, c = []; l < e[t(261)];) {
        switch (a = e[t(237)](l),
            s = i.kukBH(l, 6)) {
            case 0:
                delete window,
                    delete document,
                    c[t(246)](f[t(245)](i[t(212)](a, 2)));
                break;
            case 1:
                try {
                    "WhHMm" === i[t(198)] || n.g && c[t(246)](f[t(245)](i.pHtmC(2 & o, 3) | i.evetF(a, 4)))
                } catch (e) {
                    c[t(246)](f[t(245)](i[t(229)](i.cVCcp(3 & o, 4), a >> 4)))
                }
                break;
            case 2:
                c[t(246)](f[t(245)](i[t(229)](i[t(242)](15 & o, 2), i.evetF(a, 6)))),
                    c[t(246)](f[t(245)](i[t(228)](a, 63)));
                break;
            case 3:
                c[t(246)](f[t(245)](i[t(212)](a, 3)));
                break;
            case 4:
                c.push(f[t(245)](i[t(229)](i[t(207)](i.OWUOc(o, 4), 6), i[t(212)](a, 6))));
                break;
            case 5:
                c[t(246)](f[t(245)](i[t(229)](i[t(207)](i[t(202)](o, 15), 4), a >> 8))),
                    c.push(f.charAt(i[t(202)](a, 63)))
        }
        o = a,
            l++
    }
    return 0 == s ? i[t(226)](i[t(241)], i[t(195)]) || (c[t(246)](f[t(245)](i[t(201)](o, 3) << 4)),
        c.push("FM")) : i.eMnqD(s, 1) && (c[t(246)](f[t(245)]((15 & o) << 2)),
        c[t(246)]("K")),
        i[t(219)](i.aQCDK(d(15), window.md5(c[t(234)](""))), i[t(220)](d, 10))
}

console.log(encode("1717747011000"));

运行结果

    var t = u
            ^

ReferenceError: u is not defined

断点打在这,控制台输出u,再copy过去
在这里插入图片描述
同时u函数里面用到的_0x34e7是个大数组,也在这个断点输出复制
再次运行

                    c[t(246)](f[t(245)](i[t(212)](a, 2)));
                              ^

ReferenceError: f is not defined

复制关键词浏览器搜索打上断点,再次发送请求
在这里插入图片描述
再次运行

        i[t(219)](i.aQCDK(d(15), window.md5(c[t(234)](""))), i[t(220)](d, 10))
                    ^

ReferenceError: d is not defined

在这里插入图片描述

再次运行

        i[t(219)](i.aQCDK(d(15), window.md5(c[t(234)](""))), i[t(220)](d, 10))
                                 ^

ReferenceError: window is not defined

window确实直接在开头补window = global;,同一个地方还需要补window.md5函数,扣完这俩还是报一样的错,干脆不使用window了,直接是全局变量中的md5函数,不要放在window对象中。


再次运行报错,是在刚刚的md5 函数中,此处同步扣一下_0x4c28
在这里插入图片描述

    var t = n
            ^

ReferenceError: n is not defined

再次运行就能拿到密文了
在这里插入图片描述
我觉得大概率是不行的,应该是进了蜜罐,不然能这么顺利吗在这里插入图片描述
总之先构建Python爬虫试一下。

Python测试

运行结果如下,看来确实进了蜜罐

{"error": "Unexpected token/Validation failed"}
<Response [200]>
{"error": "Unexpected token/Validation failed"}
<Response [200]>
{"error": "Unexpected token/Validation failed"}
<Response [200]>
{"error": "Unexpected token/Validation failed"}
<Response [200]>
{"error": "Unexpected token/Validation failed"}
<Response [200]>

蜜罐分析

要产生蜜罐,无非是环境检测,使用try catch或者三元表达式以及判断等。
要做的就是本地运行和浏览器运行的流程对比,自己添加标记等等,查看本地是跑的什么逻辑,然后浏览器再次运行,打上断点,看走哪段逻辑。

在这里插入图片描述
比如这里,报错进了catch,而浏览器没进这里面,猫腻就在这里了。
慢慢测试发现n.gwindow对象,取不到值导致报错,这里直接改成true即可正确拿到密文。

完整代码

python

import time

import execjs
import requests


def generate_timestamp():
    current_time = time.time()
    milliseconds = int(current_time * 1000)
    timestamp = (milliseconds // 1000) * 1000
    return str(timestamp)


headers = {
    "authority": "match.yuanrenxue.cn",
    "accept": "application/json, text/javascript, */*; q=0.01",
    "accept-language": "zh-CN,zh;q=0.9",
    "referer": "https://match.yuanrenxue.cn/match/16",
    "sec-ch-ua": "\"Chromium\";v=\"122\", \"Not(A:Brand\";v=\"24\", \"Google Chrome\";v=\"122\"",
    "sec-ch-ua-mobile": "?0",
    "sec-ch-ua-platform": "\"Windows\"",
    "sec-fetch-dest": "empty",
    "sec-fetch-mode": "cors",
    "sec-fetch-site": "same-origin",
    "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.6261.95 Safari/537.36",
    "x-requested-with": "XMLHttpRequest"
}
cookies = {
    "sessionid": "zwy0uz1vd0ge1e42310i34b37584m1lj",
    "Hm_lvt_9bcbda9cbf86757998a2339a0437208e": "1717639423,1717658081,1717660212,1717678393",
    "m": "423b55d4c936a44fc57d152aff74d23a|1717746993000",
    "Hm_lvt_c99546cf032aaa5a679230de9a95c7db": "1717658072,1717660207,1717678388,1717746994",
    "Hm_lpvt_c99546cf032aaa5a679230de9a95c7db": "1717746998",
    "qpfccr": "true",
    "no-alert3": "true"
}

js_code = open("sdk.js", mode='r', encoding='utf-8').read()
js_compile = execjs.compile(js_code)

ret = 0
url = "https://match.yuanrenxue.cn/api/match/16"
for pageIndex in range(1, 6):
    timestamp = generate_timestamp()
    m = js_compile.call('generateM', timestamp)

    params = {
        "page": pageIndex,
        "m": m,
        "t": generate_timestamp()
    }
    response = requests.get(url, headers=headers, cookies=cookies, params=params)

    data = response.json()["data"]
    for item in data:
        ret += item['value']
print(ret)

JavaScript

function md5(e) {
    let n = function (e, t) {
        let _0x4c28 = [
            "Rtsed",
            "SUrST",
            "nsaps",
            "vyNVU",
            "2|29|23|64",
            "0|43|57|4|",
            "NNXUu",
            "nCrbn",
            "wQPIq",
            "XBcOb",
            "39|40|47|6",
            "ljkOt",
            "yMPhx",
            "TXzzv",
            "0123456789",
            "fmdcS",
            "iXQwu",
            "grCxb",
            "3|6|1|4|7|",
            "wKeAM",
            "Iekey",
            "opqrstuvwx",
            "|7|17",
            "BQgZQ",
            "BtzmV",
            "jZUAt",
            "HYhpy",
            "Yvoqt",
            "VyzBI",
            "NNVLf",
            "dbmfK",
            "0|58|16|32",
            "UAFHv",
            "WNIsZ",
            "2|1|4|3|5|",
            "JFqRJ",
            "zObVA",
            "d24fb0d696",
            "XfWkD",
            "MFmWH",
            "lZISZ",
            "WzbFA",
            "kaQlD",
            "3f7d28e17f",
            "eSwEi",
            "YpeFX",
            "kZhzK",
            "KxKIe",
            "LAIPf",
            "LjyKQ",
            "YLwOK",
            "iqfMz",
            "51|8|0|65|",
            "JRihE",
            "nqEyg",
            "|37|22|27|",
            "ZXsFi",
            "goEwl",
            "|31|63|48|",
            "wvVCN",
            "wnDlW",
            "Myvqp",
            "UlhBp",
            "fwCDC",
            "charAt",
            "Lmhlz",
            "WQCAS",
            "UXeVn",
            "KIXRL",
            "HiEZt",
            "WNzfT",
            "lNWda",
            "tsNzQ",
            "18|38|15|2",
            "ucisR",
            "wWwRM",
            "LzcOo",
            "yWGcu",
            "PlAEw",
            "ihcci",
            "hBKtU",
            "rvloG",
            "xcQTI",
            "uhJgH",
            "vRqUp",
            "EQEzR",
            "abc",
            "QgSUn",
            "0|45|44|19",
            "WMqBp",
            "koePJ",
            "jGSEC",
            "IKbhW",
            "wEOgn",
            "|49|71|11|",
            "xgzfr",
            "ABCDEF",
            "DdHPB",
            "aFxRD",
            "sFtiw",
            "concat",
            "YhaCC",
            "YVBwM",
            "abYok",
            "2|28|6|36|",
            "NLOsy",
            "bRLIN",
            "xGAWc",
            "length",
            "zYRlD",
            "14|67|61|3",
            "bolvy",
            "pagBT",
            "mdsJQ",
            "4|69|41|26",
            "kaXPV",
            "IWxBE",
            "pviAr",
            "5|0|2",
            "lvwPz",
            "YcDFe",
            "yGmJD",
            "FcYqi",
            "AAZoR",
            "|46|5|3|50",
            "PnITs",
            "ABCDEFGHIJ",
            "charCodeAt",
            "KLMNOPQRST",
            "prrXX",
            "FDiNG",
            "split",
            "oBesn",
            "9|24|10|56",
            "VaXsK",
            "fromCharCo",
            "FDfcp",
            "rrdPR",
            "HHkBN",
            "89+/",
            "mfuQZ",
            "PbrnX",
            "FcXlo",
            "rNapo",
            "fEXNi",
            "qtIDJ",
            "60|53|21|5"
        ];
        return _0x4c28[e -= 0]
    };
    var t = n
        , r = {
        fEXNi: function (e, t) {
            return e(t)
        },
        LzcOo: function (e, t, n) {
            return e(t, n)
        }
    };
    r[t(3)] = function (e, t) {
        return e(t)
    }
        ,
        r.wEOgn = function (e, t, n) {
            return e(t, n)
        }
        ,
        r[t(120)] = function (e, t, n) {
            return e(t, n)
        }
        ,
        r[t(69)] = function (e, t) {
            return e == t
        }
        ,
        r[t(109)] = function (e, t) {
            return e(t)
        }
        ,
        r[t(112)] = t(86),
        r.oBesn = "900150983c" + t(37) + t(43) + "72",
        r[t(70)] = t(18) + t(118),
        r[t(16)] = function (e, t) {
            return e < t
        }
        ,
        r[t(2)] = t(110) + t(5) + t(133) + "|55|13|12|" + t(146) + t(114) + t(94) + "35|68|33|4" + t(104) + t(52) + t(73) + t(88) + t(55) + "25|34|1|2|" + t(10) + t(4) + t(124) + t(58) + "52|59|66|7" + t(31) + t(22),
        r[t(53)] = function (e, t, n, r, i, o, a, s) {
            return e(t, n, r, i, o, a, s)
        }
        ,
        r[t(35)] = function (e, t) {
            return e + t
        }
        ,
        r[t(141)] = function (e, t, n, r, i, o, a, s) {
            return e(t, n, r, i, o, a, s)
        }
        ,
        r[t(91)] = function (e, t, n, r, i, o, a, s) {
            return e(t, n, r, i, o, a, s)
        }
        ,
        r[t(65)] = function (e, t) {
            return e + t
        }
        ,
        r[t(38)] = function (e, t, n, r, i, o, a, s) {
            return e(t, n, r, i, o, a, s)
        }
        ,
        r[t(19)] = function (e, t) {
            return e + t
        }
        ,
        r[t(117)] = function (e, t, n) {
            return e(t, n)
        }
        ,
        r[t(92)] = function (e, t) {
            return e + t
        }
        ,
        r[t(82)] = function (e, t) {
            return e + t
        }
        ,
        r[t(111)] = function (e, t, n) {
            return e(t, n)
        }
        ,
        r[t(78)] = function (e, t) {
            return e + t
        }
        ,
        r.lZISZ = function (e, t, n, r, i, o, a, s) {
            return e(t, n, r, i, o, a, s)
        }
        ,
        r.Iekey = function (e, t, n, r, i, o, a, s) {
            return e(t, n, r, i, o, a, s)
        }
        ,
        r.AAZoR = function (e, t) {
            return e + t
        }
        ,
        r[t(67)] = function (e, t, n, r, i, o, a, s) {
            return e(t, n, r, i, o, a, s)
        }
        ,
        r.UlhBp = function (e, t) {
            return e + t
        }
        ,
        r.yMPhx = function (e, t, n, r, i, o, a, s) {
            return e(t, n, r, i, o, a, s)
        }
        ,
        r[t(138)] = function (e, t) {
            return e + t
        }
        ,
        r[t(121)] = function (e, t) {
            return e + t
        }
        ,
        r[t(98)] = function (e, t, n) {
            return e(t, n)
        }
        ,
        r.kHuTw = function (e, t, n, r, i, o, a, s) {
            return e(t, n, r, i, o, a, s)
        }
        ,
        r[t(50)] = function (e, t, n, r, i, o, a, s) {
            return e(t, n, r, i, o, a, s)
        }
        ,
        r[t(142)] = function (e, t, n, r, i, o, a, s) {
            return e(t, n, r, i, o, a, s)
        }
        ,
        r[t(87)] = function (e, t) {
            return e + t
        }
        ,
        r[t(90)] = function (e, t) {
            return e + t
        }
        ,
        r[t(59)] = function (e, t, n, r, i, o, a, s) {
            return e(t, n, r, i, o, a, s)
        }
        ,
        r[t(28)] = function (e, t) {
            return e + t
        }
        ,
        r[t(119)] = function (e, t) {
            return e + t
        }
        ,
        r.YpeFX = function (e, t) {
            return e + t
        }
        ,
        r[t(7)] = function (e, t, n, r, i, o, a, s) {
            return e(t, n, r, i, o, a, s)
        }
        ,
        r.prrXX = function (e, t) {
            return e + t
        }
        ,
        r.kaQlD = function (e, t) {
            return e + t
        }
        ,
        r.qtIDJ = function (e, t, n, r, i, o, a, s) {
            return e(t, n, r, i, o, a, s)
        }
        ,
        r.xGAWc = function (e, t) {
            return e + t
        }
        ,
        r[t(134)] = function (e, t, n, r, i, o, a, s) {
            return e(t, n, r, i, o, a, s)
        }
        ,
        r[t(89)] = function (e, t) {
            return e + t
        }
        ,
        r[t(15)] = function (e, t, n, r, i, o, a, s) {
            return e(t, n, r, i, o, a, s)
        }
        ,
        r[t(9)] = function (e, t) {
            return e + t
        }
        ,
        r[t(56)] = function (e, t) {
            return e + t
        }
        ,
        r[t(6)] = function (e, t, n, r, i, o, a, s) {
            return e(t, n, r, i, o, a, s)
        }
        ,
        r[t(32)] = function (e, t) {
            return e + t
        }
        ,
        r[t(99)] = function (e, t, n, r, i, o, a, s) {
            return e(t, n, r, i, o, a, s)
        }
        ,
        r[t(39)] = function (e, t) {
            return e + t
        }
        ,
        r[t(113)] = function (e, t, n, r, i, o, a, s) {
            return e(t, n, r, i, o, a, s)
        }
        ,
        r[t(106)] = function (e, t, n, r, i, o, a, s) {
            return e(t, n, r, i, o, a, s)
        }
        ,
        r[t(66)] = function (e, t, n, r, i, o, a, s) {
            return e(t, n, r, i, o, a, s)
        }
        ,
        r.TXzzv = function (e, t) {
            return e + t
        }
        ,
        r.NNVLf = function (e, t, n, r, i, o, a, s) {
            return e(t, n, r, i, o, a, s)
        }
        ,
        r[t(79)] = function (e, t) {
            return e + t
        }
        ,
        r[t(1)] = function (e, t, n, r, i, o, a, s) {
            return e(t, n, r, i, o, a, s)
        }
        ,
        r[t(81)] = function (e, t) {
            return e + t
        }
        ,
        r.MXnIN = function (e, t) {
            return e >> t
        }
        ,
        r[t(23)] = function (e, t) {
            return e << t
        }
        ,
        r.nqEyg = function (e, t) {
            return e % t
        }
        ,
        r.kaXPV = function (e, t) {
            return e >>> t
        }
        ,
        r[t(24)] = function (e, t, n) {
            return e(t, n)
        }
        ,
        r[t(44)] = function (e, t, n) {
            return e(t, n)
        }
        ,
        r[t(30)] = function (e, t, n) {
            return e(t, n)
        }
        ,
        r[t(143)] = function (e, t) {
            return e | t
        }
        ,
        r[t(101)] = function (e, t) {
            return e & t
        }
        ,
        r[t(122)] = function (e, t, n, r, i, o, a) {
            return e(t, n, r, i, o, a)
        }
        ,
        r.ZpUiH = function (e, t) {
            return e & t
        }
        ,
        r[t(72)] = function (e, t) {
            return e ^ t
        }
        ,
        r[t(130)] = function (e, t) {
            return e ^ t
        }
        ,
        r[t(41)] = function (e, t) {
            return e | t
        }
        ,
        r[t(116)] = function (e, t) {
            return e > t
        }
        ,
        r[t(80)] = function (e, t) {
            return e(t)
        }
        ,
        r[t(33)] = function (e, t, n) {
            return e(t, n)
        }
        ,
        r[t(83)] = function (e, t) {
            return e(t)
        }
        ,
        r[t(60)] = function (e, t) {
            return e + t
        }
        ,
        r.FDfcp = function (e, t) {
            return e * t
        }
        ,
        r[t(95)] = function (e, t) {
            return e + t
        }
        ,
        r[t(51)] = function (e, t) {
            return e & t
        }
        ,
        r.DdHPB = function (e, t) {
            return e >> t
        }
        ,
        r.abYok = function (e, t) {
            return e | t
        }
        ,
        r[t(84)] = function (e, t) {
            return e << t
        }
        ,
        r[t(105)] = function (e, t) {
            return e & t
        }
        ,
        r[t(8)] = function (e, t) {
            return e - t
        }
        ,
        r[t(137)] = function (e) {
            return e()
        }
        ,
        r.YVBwM = function (e, t) {
            return e << t
        }
        ,
        r[t(27)] = function (e, t) {
            return e & t
        }
        ,
        r[t(26)] = function (e, t) {
            return e / t
        }
        ,
        r[t(74)] = function (e, t) {
            return e * t
        }
        ,
        r[t(49)] = t(14) + "abcdef",
        r[t(36)] = function (e, t) {
            return e >> t
        }
        ,
        r[t(46)] = function (e, t) {
            return e + t
        }
        ,
        r[t(75)] = function (e, t) {
            return e >> t
        }
        ,
        r[t(47)] = function (e, t) {
            return e * t
        }
        ,
        r[t(11)] = t(126) + t(128) + "UVWXYZabcdefghijklmn" + t(21) + "yz01234567" + t(139),
        r[t(63)] = function (e, t) {
            return e * t
        }
    ,
    r.KIXRL = function (e, t) {
        return e << t
    }
    ,
    r[t(57)] = function (e, t) {
        return e % t
    }
    ,
    r[t(77)] = function (e, t) {
        return e << t
    }
    ,
    r[t(71)] = function (e, t) {
        return e >> t
    }
    ,
    r.jZUAt = function (e, t) {
        return e >> t
    }
    ,
    r[t(48)] = function (e, t) {
        return e + t
    }
    ,
    r[t(17)] = function (e, t) {
        return e % t
    }
    ,
    r[t(85)] = function (e, t) {
        return e * t
    }
    ,
    r[t(61)] = function (e, t) {
        return e < t
    }
    ,
    r.mfuQZ = function (e, t) {
        return e + t
    }
    ,
    r[t(125)] = function (e, t) {
        return e * t
    }
    ,
    r[t(0)] = function (e, t) {
        return e(t)
    }
    ;
    var i = r;
    
    function o(e, n) {
        for (var r = t, o = i.WNzfT[r(131)]("|"), a = 0; ;) {
            switch (o[a++]) {
                case "0":
                    for (var d = 0; i.iXQwu(d, e.length); d += 16)
                        for (var p = i[r(2)][r(131)]("|"), h = 0; ;) {
                            switch (p[h++]) {
                                case "0":
                                    w = i[r(53)](l, w, b, x, T, e[d + 2], 9, -51403784);
                                    continue;
                                case "1":
                                    x = u(x, T, w, b, e[d + 6], 23, 76029189);
                                    continue;
                                case "2":
                                    b = i[r(53)](u, b, x, T, w, e[i.JFqRJ(d, 9)], 4, -640364487);
                                    continue;
                                case "3":
                                    T = i[r(141)](c, T, w, b, x, e[d + 10], 15, -1051523);
                                    continue;
                                case "4":
                                    T = s(T, w, b, x, e[i.JFqRJ(d, 2)], 17, 606105819);
                                    continue;
                                case "5":
                                    w = i[r(91)](c, w, b, x, T, e[i[r(65)](d, 3)], 10, -1894446606);
                                    continue;
                                case "6":
                                    w = i.XfWkD(l, w, b, x, T, e[i.wKeAM(d, 14)], 9, -1019803690);
                                    continue;
                                case "7":
                                    T = i.pviAr(f, T, v);
                                    continue;
                                case "8":
                                    b = i.XfWkD(l, b, x, T, w, e[i[r(92)](d, 13)], 5, -1444681467);
                                    continue;
                                case "9":
                                    x = i[r(38)](s, x, T, w, b, e[i[r(82)](d, 3)], 22, -1044525330);
                                    continue;
                                case "10":
                                    w = s(w, b, x, T, e[i[r(82)](d, 5)], 12, 1200080426);
                                    continue;
                                case "11":
                                    x = i[r(38)](l, x, T, w, b, e[i[r(82)](d, 0)], 20, -373897302);
                                    continue;
                                case "12":
                                    w = i[r(38)](s, w, b, x, T, e[i[r(82)](d, 9)], 12, -1958435417);
                                    continue;
                                case "13":
                                    b = i.XfWkD(s, b, x, T, w, e[i.xcQTI(d, 8)], 7, 1770035416);
                                    continue;
                                case "14":
                                    var m = b;
                                    continue;
                                case "15":
                                    w = i[r(38)](u, w, b, x, T, e[i.xcQTI(d, 8)], 11, -2022574463);
                                    continue;
                                case "16":
                                    b = f(b, m);
                                    continue;
                                case "17":
                                    w = i[r(111)](f, w, g);
                                    continue;
                                case "18":
                                    x = l(x, T, w, b, e[i[r(78)](d, 12)], 20, -1921207734);
                                    continue;
                                case "19":
                                    w = i[r(40)](u, w, b, x, T, e[d + 4], 11, 1272893353);
                                    continue;
                                case "20":
                                    T = i[r(20)](u, T, w, b, x, e[i.PlAEw(d, 11)], 16, 1839030562);
                                    continue;
                                case "21":
                                    b = s(b, x, T, w, e[i[r(123)](d, 12)], 7, 1804550682);
                                    continue;
                                case "22":
                                    x = u(x, T, w, b, e[i[r(123)](d, 10)], 23, -1094730640);
                                    continue;
                                case "23":
                                    T = i[r(67)](c, T, w, b, x, e[d + 14], 15, -1416354905);
                                    continue;
                                case "24":
                                    b = s(b, x, T, w, e[i[r(123)](d, 4)], 7, -176418897);
                                    continue;
                                case "25":
                                    w = i.UXeVn(u, w, b, x, T, e[d + 0], 11, -358537222);
                                    continue;
                                case "26":
                                    b = i.UXeVn(l, b, x, T, w, e[i[r(62)](d, 1)], 5, -165796510);
                                    continue;
                                case "27":
                                    b = i.UXeVn(u, b, x, T, w, e[i[r(62)](d, 13)], 4, 681279174);
                                    continue;
                                case "28":
                                    b = i[r(12)](l, b, x, T, w, e[i[r(138)](d, 9)], 5, 568446438);
                                    continue;
                                case "29":
                                    w = i.yMPhx(c, w, b, x, T, e[d + 7], 10, 11261161415);
                                    continue;
                                case "30":
                                    var g = w;
                                    continue;
                                case "31":
                                    b = c(b, x, T, w, e[i.yGmJD(d, 8)], 6, 1873313359);
                                    continue;
                                case "32":
                                    x = i.aFxRD(f, x, y);
                                    continue;
                                case "33":
                                    T = i[r(12)](l, T, w, b, x, e[i[r(121)](d, 15)], 14, -660478335);
                                    continue;
                                case "34":
                                    T = i.kHuTw(u, T, w, b, x, e[d + 3], 16, -722881979);
                                    continue;
                                case "35":
                                    b = i[r(50)](l, b, x, T, w, e[i[r(121)](d, 5)], 5, -701520691);
                                    continue;
                                case "36":
                                    T = l(T, w, b, x, e[i[r(121)](d, 3)], 14, -187363961);
                                    continue;
                                case "37":
                                    T = i[r(142)](u, T, w, b, x, e[i.QgSUn(d, 7)], 16, -155497632);
                                    continue;
                                case "38":
                                    b = i.FcXlo(u, b, x, T, w, e[i.koePJ(d, 5)], 4, -378558);
                                    continue;
                                case "39":
                                    w = i[r(142)](u, w, b, x, T, e[i[r(90)](d, 12)], 11, -421815835);
                                    continue;
                                case "40":
                                    T = i[r(59)](u, T, w, b, x, e[i[r(28)](d, 15)], 16, 530742520);
                                    continue;
                                case "41":
                                    x = i.wvVCN(s, x, T, w, b, e[d + 15], 22, 1236531029);
                                    continue;
                                case "42":
                                    x = i[r(59)](l, x, T, w, b, e[i[r(119)](d, 4)], 20, -405537848);
                                    continue;
                                case "43":
                                    b = i[r(59)](s, b, x, T, w, e[i.lvwPz(d, 0)], 7, -680976936);
                                    continue;
                                case "44":
                                    b = i[r(59)](u, b, x, T, w, e[i[r(45)](d, 1)], 4, -1530992060);
                                    continue;
                                case "45":
                                    x = i.nCrbn(u, x, T, w, b, e[i[r(129)](d, 14)], 23, -35311556);
                                    continue;
                                case "46":
                                    b = c(b, x, T, w, e[i[r(42)](d, 12)], 6, 1700485571);
                                    continue;
                                case "47":
                                    x = i[r(7)](u, x, T, w, b, e[i.kaQlD(d, 2)], 23, -995338651);
                                    continue;
                                case "48":
                                    T = c(T, w, b, x, e[d + 6], 15, -1560198380);
                                    continue;
                                case "49":
                                    w = i[r(145)](l, w, b, x, T, e[i[r(107)](d, 6)], 9, -1069501632);
                                    continue;
                                case "50":
                                    x = i[r(134)](c, x, T, w, b, e[i[r(89)](d, 1)], 21, -2054922799);
                                    continue;
                                case "51":
                                    x = i.fmdcS(l, x, T, w, b, e[d + 8], 20, 1163531501);
                                    continue;
                                case "52":
                                    x = i[r(15)](c, x, T, w, b, e[i[r(9)](d, 13)], 21, 1309151649);
                                    continue;
                                case "53":
                                    x = i[r(15)](s, x, T, w, b, e[i[r(56)](d, 11)], 22, -1990404162);
                                    continue;
                                case "54":
                                    w = i[r(6)](s, w, b, x, T, e[i[r(32)](d, 13)], 12, -40341101);
                                    continue;
                                case "55":
                                    x = i.sFtiw(s, x, T, w, b, e[i.UAFHv(d, 7)], 22, -45705983);
                                    continue;
                                case "56":
                                    T = i.sFtiw(s, T, w, b, x, e[i.MFmWH(d, 6)], 17, -1473231341);
                                    continue;
                                case "57":
                                    w = i[r(99)](s, w, b, x, T, e[i.MFmWH(d, 1)], 12, -389564586);
                                    continue;
                                case "58":
                                    x = c(x, T, w, b, e[i[r(39)](d, 9)], 21, -343485551);
                                    continue;
                                case "59":
                                    b = i[r(113)](c, b, x, T, w, e[i[r(39)](d, 4)], 6, -145523070);
                                    continue;
                                case "60":
                                    T = i.bRLIN(s, T, w, b, x, e[i[r(39)](d, 10)], 17, -42063);
                                    continue;
                                case "61":
                                    var v = T;
                                    continue;
                                case "62":
                                    b = i[r(66)](c, b, x, T, w, e[d + 0], 6, -198630844);
                                    continue;
                                case "63":
                                    w = i[r(66)](c, w, b, x, T, e[i[r(13)](d, 15)], 10, -30611744);
                                    continue;
                                case "64":
                                    x = c(x, T, w, b, e[d + 5], 21, -57434055);
                                    continue;
                                case "65":
                                    T = i[r(29)](l, T, w, b, x, e[i[r(13)](d, 7)], 14, 1735328473);
                                    continue;
                                case "66":
                                    w = i[r(29)](c, w, b, x, T, e[i[r(79)](d, 11)], 10, -1120210379);
                                    continue;
                                case "67":
                                    var y = x;
                                    continue;
                                case "68":
                                    w = i[r(1)](l, w, b, x, T, e[d + 10], 9, 38016083);
                                    continue;
                                case "69":
                                    T = i[r(1)](s, T, w, b, x, e[i[r(79)](d, 14)], 17, -1502002290);
                                    continue;
                                case "70":
                                    T = i.SUrST(c, T, w, b, x, e[i[r(79)](d, 2)], 15, 718787259);
                                    continue;
                                case "71":
                                    T = l(T, w, b, x, e[i[r(81)](d, 11)], 14, 643717713);
                                    continue
                            }
                            break
                        }
                    continue;
                case "1":
                    var b = 1732584193;
                    continue;
                case "2":
                    return Array(b, x, T, w);
                case "3":
                    e[i.MXnIN(n, 5)] |= i[r(23)](128, i[r(54)](n, 32));
                    continue;
                case "4":
                    var x = -271733879;
                    continue;
                case "5":
                    var w = 271733878;
                    continue;
                case "6":
                    e[i.BQgZQ(i[r(115)](n + 64, 9), 4) + 14] = n;
                    continue;
                case "7":
                    var T = -1732584194;
                    continue
            }
            break
        }
    }
    
    function a(e, n, r, o, a, s) {
        var l = t;
        return f(i.BtzmV(d, i[l(44)](f, i.dbmfK(f, n, e), i[l(30)](f, o, s)), a), r)
    }
    
    function s(e, n, r, o, s, l, u) {
        var c = t;
        return a(i[c(143)](i[c(101)](n, r), i[c(101)](~n, o)), e, n, s, l, u)
    }
    
    function l(e, n, r, o, s, l, u) {
        var c = t;
        return i[c(122)](a, i[c(143)](i.ZpUiH(n, o), i.ZpUiH(r, ~o)), e, n, s, l, u)
    }
    
    function u(e, n, r, o, s, l, u) {
        return i[t(122)](a, i.tsNzQ(n ^ r, o), e, n, s, l, u)
    }
    
    function c(e, n, r, o, s, l, u) {
        var c = t;
        return i[c(122)](a, i[c(130)](r, i[c(41)](n, ~o)), e, n, s, l, u)
    }
    
    function f(e, n) {
        var r = t
            , o = i[r(95)](65535 & e, i.iqfMz(n, 65535))
            , a = i[r(95)](e >> 16, i[r(97)](n, 16)) + i[r(97)](o, 16);
        return i[r(103)](i[r(84)](a, 16), i[r(105)](o, 65535))
    }
    
    function d(e, n) {
        var r = t;
        return i.abYok(e << n, e >>> i[r(8)](32, n))
    }
    
    function p(e) {
        for (var n = t, r = i[n(137)](Array), o = i[n(8)](i.vRqUp(1, 16), 1), a = 0; a < i.FDfcp(e[n(108)], 16); a += 16)
            r[i[n(97)](a, 5)] |= i[n(102)](i[n(27)](e[n(127)](i[n(26)](a, 16)), o), i[n(54)](a, 32));
        return r
    }
    
    function h(e) {
        for (var n = t, r = i[n(49)], o = "", a = 0; i.iXQwu(a, i[n(74)](e[n(108)], 4)); a++)
            o += i.xgzfr(r[n(64)](15 & i[n(36)](e[i[n(36)](a, 2)], i[n(46)](i[n(74)](a % 4, 8), 4))), r[n(64)](15 & i.wWwRM(e[a >> 2], i[n(47)](a % 4, 8))));
        return o
    }
    
    return i[t(0)]((function (e) {
            var n = t;
            return i[n(144)](h, i[n(76)](o, i.vyNVU(p, e), 16 * e[n(108)]))
        }
    ), e)
}


function u(e, t) {
    let _0x34e7 = [
        "split",
        "ABHICESQWK",
        "FKByN",
        "U987654321",
        "lmHcG",
        "dICfr",
        "Szksx",
        "Bgrij",
        "iwnNJ",
        "jihgfdecba",
        "GfTek",
        "gfdecbaZXY",
        "constructo",
        "QIoXW",
        "jLRMs",
        "AqLWq",
        "0zyxwvutsr",
        "TKgNw",
        "eMnqD",
        "thjIz",
        "btoa",
        "MNPQRSTWXY",
        "oPsqh",
        "niIlq",
        "evetF",
        "LVZVH",
        "fYWEX",
        "kmnprstwxy",
        "aYkvo",
        "tsrqpomnlk",
        "HfLqY",
        "aQCDK",
        "lGBLj",
        "test",
        "3210zyxwvu",
        "QWK2Fi",
        "return /\" ",
        "hsJtK",
        "jdwcO",
        "SlFsj",
        "OWUOc",
        "LCaAn",
        "[^ ]+)+)+[",
        "FAVYf",
        "2Fi+987654",
        "floor",
        "join",
        "EuwBW",
        "OXYrZ",
        "charCodeAt",
        "SkkHG",
        "iYuJr",
        "GwoYF",
        "kPdGe",
        "cVCcp",
        "INQRH",
        "INVALID_CH",
        "charAt",
        "push",
        "apply",
        "lalCJ",
        "kTcRS",
        "+ this + \"",
        "ykpOn",
        "gLnjm",
        "gmBaq",
        "kukBH",
        "dvEWE",
        "SFKLi",
        "^([^ ]+( +",
        "qpomnlkjih",
        "^ ]}",
        "pHtmC",
        "length"
    ];
    return _0x34e7[e -= 188]
}


function d(e) {
    var t = u
        , n = {};
    n[t(214)] = function (e, t) {
        return e || t
    }
        ,
        n.bWcgB = function (e, t) {
            return e * t
        }
        ,
        n[t(227)] = "ABCDEFGHJK" + t(209) + "Zabcdefhij" + t(215) + "z2345678";
    for (var r = n, o = "1|3|0|4|2|5"[t(188)]("|"), a = 0; ;) {
        switch (o[a++]) {
            case "0":
                var s = l[t(261)];
                continue;
            case "1":
                e = r[t(214)](e, 32);
                continue;
            case "2":
                for (i = 0; i < e; i++)
                    c += l[t(245)](Math[t(233)](r.bWcgB(Math.random(), s)));
                continue;
            case "3":
                var l = r[t(227)];
                continue;
            case "4":
                var c = "";
                continue;
            case "5":
                return c
        }
        break
    }
}

function generateM(e) {
    let f = 'U9876543210zyxwvutsrqpomnlkjihgfdecbaZXYWVUTSRQPONABHICESQWK2Fi+9876543210zyxwvutsrqpomnlkjihgfdecbaZXYWVUTSRQPONABHICESQWK2Fi';
    var t = u
        , r = {};
    r.TGmSp = t(244) + "ARACTER_ERR",
        r[t(238)] = t(224) + t(250) + "/",
        r[t(205)] = "^([^ ]+( +" + t(230) + t(259),
        r.aYkvo = function (e) {
            return e()
        }
        ,
        r[t(254)] = function (e, t) {
            return e % t
        }
        ,
        r.evetF = function (e, t) {
            return e >> t
        }
        ,
        r.GfTek = t(196),
        r[t(260)] = function (e, t) {
            return e << t
        }
        ,
        r[t(229)] = function (e, t) {
            return e | t
        }
        ,
        r[t(242)] = function (e, t) {
            return e << t
        }
        ,
        r[t(228)] = function (e, t) {
            return e & t
        }
        ,
        r[t(207)] = function (e, t) {
            return e << t
        }
        ,
        r[t(202)] = function (e, t) {
            return e & t
        }
        ,
        r.jdwcO = function (e, t) {
            return e === t
        }
        ,
        r.kPdGe = t(231),
        r[t(195)] = t(213),
        r[t(201)] = function (e, t) {
            return e & t
        }
        ,
        r[t(206)] = function (e, t) {
            return e == t
        }
        ,
        r[t(219)] = function (e, t) {
            return e + t
        }
        ,
        r[t(220)] = function (e, t) {
            return e(t)
        }
    ;
    var i = r;
    if (/([^\u0000-\u00ff])/.test(e))
        throw new Error(i.TGmSp);
    for (var o, a, s, l = 0, c = []; l < e[t(261)];) {
        switch (a = e[t(237)](l),
            s = i.kukBH(l, 6)) {
            case 0:
                delete window,
                    delete document,
                    c[t(246)](f[t(245)](i[t(212)](a, 2)));
                break;
            case 1:
                try {
                    "WhHMm" === i[t(198)] || true && c[t(246)](f[t(245)](i.pHtmC(2 & o, 3) | i.evetF(a, 4)))
                } catch (e) {
                    c[t(246)](f[t(245)](i[t(229)](i.cVCcp(3 & o, 4), a >> 4)))
                }
                break;
            case 2:
                c[t(246)](f[t(245)](i[t(229)](i[t(242)](15 & o, 2), i.evetF(a, 6)))),
                    c[t(246)](f[t(245)](i[t(228)](a, 63)));
                break;
            case 3:
                c[t(246)](f[t(245)](i[t(212)](a, 3)));
                break;
            case 4:
                c.push(f[t(245)](i[t(229)](i[t(207)](i.OWUOc(o, 4), 6), i[t(212)](a, 6))));
                break;
            case 5:
                c[t(246)](f[t(245)](i[t(229)](i[t(207)](i[t(202)](o, 15), 4), a >> 8))),
                    c.push(f.charAt(i[t(202)](a, 63)))
        }
        o = a,
            l++
    }
    return 0 == s ? i[t(226)](i[t(241)], i[t(195)]) || (c[t(246)](f[t(245)](i[t(201)](o, 3) << 4)),
        c.push("FM")) : i.eMnqD(s, 1) && (c[t(246)](f[t(245)]((15 & o) << 2)),
        c[t(246)]("K")),
        i[t(219)](i.aQCDK(d(15), md5(c[t(234)](""))), i[t(220)](d, 10))
}

console.log(generateM("1717747011000"));

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1799632.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Java 8 中的 Stream API,用于处理集合数据

Java 8 引入了 Stream API&#xff0c;使得处理集合数据变得更加简洁和高效。Stream API 允许开发者以声明式编程风格操作数据集合&#xff0c;而不是使用传统的迭代和条件语句。 一、基本概念 1.1 什么是 Stream Stream 是 Java 8 中的一个新抽象&#xff0c;它允许对集合数…

Java学习笔记(六):Array List、学生管理系统、学生管理系统升级版

目录 一、ArrayList 1.1集合和数组的优势对比&#xff1a; 1.2 ArrayList类概述 1.3 ArrayList类常用方法 1.3.1 构造方法 1.3.2 成员方法 1.4 ArrayList存储字符串并遍历 1.5 ArrayList存储学生对象并遍历 1.6 查找用户的索引 1.7 添加手机对象并返回要求的数据 二…

用 Notepad++ 写 Java 程序

安装包 百度网盘 提取码&#xff1a;6666 安装步骤 双击安装包开始安装。 安装完成&#xff1a; 配置编码 用 NotePad 写 Java 程序时&#xff0c;需要设置编码。 在 设置&#xff0c;首选项&#xff0c;新建 中进行设置&#xff0c;可以对每一个新建的文件起作用。 Note…

【Flutter】 TextField限制长度时, 第三方手写输入法、ios原始拼音输入法输入被吞问题

问题描述 TextField限制长度时&#xff0c; 当你的输入字符长度已经到了最大值-1时&#xff0c;使用第三方手写输入法或者ios原生拼音输入法输入liang&#xff08;什么拼音都行&#xff0c;这里只是举例&#xff09;&#xff0c;输到i那么li都会消失。 原因分析 这是因为第三…

nginx配置WebSocket参数wss连接

目录 一、原文连接 二、 配置参数 三、实践 四、重启nginx 五、连接websocket 一、原文连接 nginx配置websocket支持wss-腾讯云开发者社区-腾讯云 二、 配置参数 map $http_upgrade $connection_upgrade { default upgrade; close; } upstream websocket { se…

PostgreSQL基础(九):PostgreSQL的事务介绍

文章目录 PostgreSQL的事务介绍 一、什么是ACID&#xff08;常识&#xff09; 二、事务的基本使用 三、保存点&#xff08;了解&#xff09; PostgreSQL的事务介绍 一、什么是ACID&#xff08;常识&#xff09; 在日常操作中&#xff0c;对于一组相关操作&#xff0c;通常…

基于t-SNE的泰坦尼克号数据集降维

目录 1. 作者介绍2. 算法介绍2.1 t-SNE介绍2.2.SNE基本原理2.3.拥挤问题2.4.t-SNE基本原理2.5.t-SNE算法过程 3. 泰坦尼克号数据集降维实验3.1.数据集介绍3.2 任务介绍3.3 代码实现3.4 实验结果 参考连接 1. 作者介绍 刘方星&#xff0c;男&#xff0c;西安工程大学电子信息学…

vue3 监听器,组合式API的watch用法

watch函数 在组合式 API 中&#xff0c;我们可以使用 watch 函数在每次响应式状态发生变化时触发回调函数 watch(ref,callback&#xff08;newValue,oldValue&#xff09;&#xff0c;option:{}) ref:被监听的响应式量&#xff0c;可以是一个 ref (包括计算属性)、一个响应式…

大型零售企业总部到分公司数据发放,有没有更优化的方案?

大型零售企业在市场经济中扮演重要角色&#xff0c;是保证基础商品生产、流通和供给的重要一环。随着企业发展&#xff0c;很多大型零售企业都会在全国、乃至全球各地开设分公司&#xff0c;用以降低生产和运营成本&#xff0c;更好地提供本地化服务。 为了保证总部与分公司间信…

【C++ | 拷贝构造函数】一文了解C++的 拷贝(复制)构造函数

&#x1f601;博客主页&#x1f601;&#xff1a;&#x1f680;https://blog.csdn.net/wkd_007&#x1f680; &#x1f911;博客内容&#x1f911;&#xff1a;&#x1f36d;嵌入式开发、Linux、C语言、C、数据结构、音视频&#x1f36d; ⏰发布时间⏰&#xff1a;2024-06-07 2…

Linux.软件操作

1.yum 命令 要连网 2.systemctl 命令控制软件的启动和关闭 3.ln 创建软连接 使用cat来找本体&#xff0c;看看链接生不生效 4.date 命令查看系统时间 格式化的时候可以用双引号把他们引出来 -d 对时间进行修改 修改时区 自动校准 手动校准 5.ifconfig 查看本机的ip地址 6.h…

SOA主要协议和规范

Web服务作为实现SOA中服务的最主要手段。首先来了解Web Service相关的标准。它们大多以“WS-”作为名字的前缀&#xff0c;所以统称“WS-*”。Web服务最基本的协议包括UDDI、WSDL和SOAP&#xff0c;通过它们&#xff0c;可以提供直接而又简单的Web Service支持&#xff0c;如图…

《机器学习特征提取》

书籍&#xff1a;Building Feature Extraction with Machine Learning: Geospatial Applications 作者&#xff1a;Bharath.H. Aithal&#xff0c;Prakash P.S. 出版&#xff1a;CRC Press 书籍下载-《机器学习特征提取》这是一本面向专业人士和研究生的实用指南&#xff0c…

Docker|了解容器镜像层(1)

引言 容器非常神奇。它们允许简单的进程表现得像虚拟机。在这种优雅的底层是一组模式和实践&#xff0c;最终使一切运作起来。在设计的根本是层。层是存储和分发容器化文件系统内容的基本方式。这种设计既出人意料地简单&#xff0c;同时又非常强大。在今天的帖子[1]中&#xf…

PS初级|写在纸上的字怎么抠成透明背景?

前言 上一次咱们讲了很多很多很多的抠图教程&#xff0c;这次继续。。。最近有小伙伴问我&#xff1a;如果是写在纸上的字&#xff0c;要怎么把它抠成透明背景。 这个其实很简单&#xff0c;直接来说就是选择通道来抠。但有一点要注意的是&#xff0c;写在纸上的字&#xff0…

elementui Menu 二级菜单 min-width修改无效

原因&#xff1a;可能是生成的二级菜单样式里面没有带特定的hash属性 而vue代码里面样式里带了 scoped生成的样式有改样式选择器 从而无法成功选择 解决&#xff1a;让样式可以全局选择 不带属性选择器 单文件组件 CSS 功能 | Vue.js :global(.el-menu--vertical .el-menu--p…

【Web API DOM11】节点操作

一&#xff1a;DOM节点 1 什么是DOM节点 DOM树里每一个内容都称为节点 2 DOM节点分类 元素节点 属性节点&#xff1a;a标签的href、img标签的src等 文本节点&#xff1a;标签中的文字 上图为整个DOM树&#xff0c;每个标签、以及标签属性、文本内容构成了DOM树 二&#…

码蹄集部分题目(2024OJ赛18期;并查集+ST表+贪心)

1&#x1f40b;&#x1f40b;史莱姆融合&#xff08;钻石&#xff1b;并查集&#xff09; 时间限制&#xff1a;1秒 占用内存&#xff1a;128M &#x1f41f;题目描述 &#x1f41f;题目思路 这道题目使用并查集&#xff0c;同一集合的所有元素的最顶上的祖父节点是统一的。…

[NOVATEK] NT96580行车记录仪功能学习笔记

一、u-Boot升级灯 运行u-Boot程序时LED灯闪烁,找到运行过程中一直在运行的函数在里面进行LED引脚电平的翻转 宏定义 Z:\SunFan\AHD580\pip\na51055_PIP\BSP\u-boot\include\configs\nvt-na51055-evb.h Z:\SunFan\AHD580\pip\na51055_PIP\BSP\u-boot\drivers\mtd\nvt_flash_…

【BOM02】本地存储

一&#xff1a;什么是本地存储 数据存储在用户浏览器中&#xff0c;用户设置、读取方便&#xff0c;同时页面刷新时不会丢失数据。存储在浏览器中数据约5M&#xff0c;分为sessionStorage和localStorage两种存储方式 二&#xff1a;localStorage存储 作用 将数据永久存储在…