某翻译平台翻译接口逆向之webpack学习,翻译平台翻译接口逆向与Webpack学习探索

马肤

温馨提示:这篇文章已超过401天没有更新,请注意相关的内容是否还可用!

摘要:,,本文介绍了关于某翻译平台翻译接口逆向工程的学习内容,并涉及到webpack的相关知识。通过学习翻译接口的逆向技术,可以深入了解接口的工作原理和实现方式。webpack作为一种前端资源构建和打包工具,能够帮助优化开发流程和提升项目效率。本文旨在分享如何结合两者进行学习,以更好地理解和应用相关技术。

逆向网址

 aHR0cHM6Ly9mYW55aS55b3VkYW8uY29tLw==


 逆向链接

aHR0cHM6Ly9mYW55aS55b3VkYW8uY29tLyMv

逆向接口 

aHR0cHM6Ly9kaWN0LnlvdWRhby5jb20vd2VidHJhbnNsYXRl

逆向过程 

请求方式

        POST

逆向参数

        sign c168e4cb76169e90f82d28118dbd24d2

       接口请求结果解密

过程分析

根据XHR断点方式可快速进入发包内容

某翻译平台翻译接口逆向之webpack学习,翻译平台翻译接口逆向与Webpack学习探索 第1张

跟栈到如下位置处

某翻译平台翻译接口逆向之webpack学习,翻译平台翻译接口逆向与Webpack学习探索 第2张

设置条件断后释放掉xhr断点

e.url.indexOf( '/webtranslate' ) != -1

 断点处开始跟栈,发现如下关键点

C = (e,t)=>(0,
a.H)("https://dict.xxxx.com/webtranslate", (0,
o.A)((0,
o.A)({}, e), k(t)), {
	headers: {
		"Content-Type": "application/x-www-form-urlencoded"
	}
})

某翻译平台翻译接口逆向之webpack学习,翻译平台翻译接口逆向与Webpack学习探索 第3张

【e】 【k(t)】构成请求体

function k(e, t) {
	const n = (new Date).getTime();
	return {
		sign: S(n, e),
		client: u,
		product: d,
		appVersion: p,
		vendor: g,
		pointParam: m,
		mysticTime: n,
		keyfrom: f,
		mid: h,
		screen: A,
		model: v,
		network: b,
		abtest: T,
		yduuid: t || "abcdefg"
	}
}
//关键位置点
S(n, e),
function S(e, t) {
	return _(`client=${u}&mysticTime=${e}&product=${d}&key=${t}`)
}
			
function _(e) {
	return r.createHash("md5").update(e.toString()).digest("hex")
}

由方法【_】分析出来 参数【sign】为md5方式加密

验证加密

方法 _ 打上断点进行调试

某翻译平台翻译接口逆向之webpack学习,翻译平台翻译接口逆向与Webpack学习探索 第4张

由此可知为标准md5方式加密

解密定位

跟栈可追踪到如下位置

var s = (n(97815),
    , r = n(91565)
N = (e,t,n)=>{
	if (!e)
		return null;
	const o = s.alloc(16, y(t))
	  , a = s.alloc(16, y(n))
	  , i = r.createDecipheriv("aes-128-cbc", o, a);
	let c = i.update(e, "base64", "utf-8");
	return c += i.final("utf-8"),
	c
}
function y(e) {
	return r.createHash("md5").update(e).digest()
}

由此可知为【AES】

// key
const o = s.alloc(16, y(t))
// iv
const a = s.alloc(16, y(n))

代码扣取

向上查找 r 定义位置

var o = n(58788)
	 , a = n(95457)
	 , r = n(91565)
	 , i = n(91250)
	 , s = (n(97815),
	n(25507),
	n(48287)["Buffer"]);

可看出该方式为 webpack

加载器定位

定位加载器关键词

e[o].call(r.exports, r, r.exports, n),

上述位置断点断住后,刷新页面或点击底部输出结果可直接跳转至函数定义处

某翻译平台翻译接口逆向之webpack学习,翻译平台翻译接口逆向与Webpack学习探索 第5张

(function() {
    var e = {
        48559: function(e, t, n) {
            n(44114),
            n(27495),
            n(25440),
            n(13611);
            (function(e, t, n, o, a) {
                if (!e.__rl_event) {
                    var r = navigator.userAgent.toLowerCase()
                      , i = /(mobile|iphone|ipod|blackberry)/.test(r)
                      , s = !1
                      , c = "@VERSION@"
                      , l = ""
                      , u = 0
                      , d = ""
                      , m = ""
                      , p = 0
                      , g = "NULL"
                      , f = "NULL"
                      , h = "NULL"
                      , A = ""
                      , v = ""
                      , b = $()
                      , T = ($(!0),
                    N() + "//rlogs.youdao.com")
                      , y = L()
                      , _ = {
                        _default: y
                    }
                      , S = {}
                      , k = e._rlog
                      , I = e._rlog = {};
                    I.push = function(e) {
                        var t = e[0].split(".")
                          , n = t.pop();
                        t = t.join("_"),
                        t || (t = "_default"),
                        y = _[t] || (_[t] = L());
                        var o = S[n];
                        o && o.apply(this, e.slice(1))
                    }
                    ,
                    S._setAccount = function(e) {
                        e && (y.pid = e)
                    }
                    ,
                    S._setAutoPageview = function(e) {
                        y.autopv = e
                    }
                    ,
                    S._setAutoUserId = function(e) {
                        y.autouid = e
                    }
                    ,
                    S._addPost = function(e, t) {
                        S._removePost(e),
                        y.post.push([e, t])
                    }
                    ,
                    S._onPageViewFinished = function(e) {
                        y.pvcb.push(e)
                    }
                    ,
                    S._trackCustom = function(e, t, n) {
                        var a;
                        y.pid && (y.cat = e,
                        a = O(t) ? K(t) : "_nhrf=" + o(t),
                        C(a, n))
                    }
                    ,
                    S._trackEvent = function(e, t) {
                        S._trackCustom("event", e, t)
                    }
                    ,
                    S._trackPageview = function(e) {
                        if (!y.ispvt || "ido" === e) {
                            var t = y;
                            E((function() {
                                var e;
                                while (e = t.pvcb.shift())
                                    try {
                                        e()
                                    } catch (n) {}
                                t.ispvt = 2
                            }
                            ), O(e) && e.length ? "&" + K(e) : "")
                        }
                    }
                    ,
                    S._removePost = function(e) {
                        if (e) {
                            for (var t = y.post, n = 0, o = t.length; n c.cancel && c.cancel(...e))
                }, (0,
                o.v_)(n.config.cancelButtonText || "取消"), 1), (0,
                o.Lk)("div", {
                    class: "confirm btn",
                    onClick: t[1] || (t[1] = (...e)=>c.confirm && c.confirm(...e))
                }, (0,
                o.v_)(n.config.confirmButtonText || "确认"), 1)])])], 512)), [[o.aG, c.visible && n.config.text]])
            }
            var l = {
                name: "PopUp",
                props: {
                    config: {
                        type: Object
                    }
                },
                setup(e) {
                    const t = (0,
                    o.KR)(!1);
                    (0,
                    o.sV)((()=>{
                        t.value = !0
                    }
                    ));
                    const n = ()=>{
                        e.config.cancel(),
                        t.value = !1
                    }
                      , a = ()=>{
                        e.config.confirm(),
                        t.value = !1
                    }
                    ;
                    return {
                        visible: t,
                        cancel: n,
                        confirm: a
                    }
                }
            }
              , u = n(66262);
            const d = (0,
            u.A)(l, [["render", c], ["__scopeId", "data-v-40db1403"]]);
            var m = d;
            const p = document.createElement("div");
            p.setAttribute("class", "popup"),
            document.body.appendChild(p);
            var g = e=>{
                const t = (0,
                o.bF)(m, {
                    config: e
                });
                (0,
                o.XX)(t, p)
            }
        },
        3745: function(e, t, n) {
            "use strict";
            n.d(t, {
                A: function() {
                    return d
                }
            });
            var o = n(6301);
            function a(e, t, n, a, r, i) {
                return (0,
                o.uX)(),
                (0,
                o.Wv)(o.eB, {
                    name: "fade"
                }, {
                    default: (0,
                    o.k6)((()=>[(0,
                    o.bo)((0,
                    o.Lk)("div", {
                        class: "toasts"
                    }, (0,
                    o.v_)(n.text), 513), [[o.aG, a.visible]])])),
                    _: 1
                })
            }
            var r = {
                name: "toast",
                props: {
                    text: {
                        type: String,
                        default: ""
                    }
                },
                setup() {
                    const e = (0,
                    o.KR)(!1);
                    return (0,
                    o.sV)((()=>{
                        e.value = !0
                    }
                    )),
                    {
                        visible: e
                    }
                }
            }
              , i = n(66262);
            const s = (0,
            i.A)(r, [["render", a], ["__scopeId", "data-v-ebee6bee"]]);
            var c = s;
            const l = document.createElement("div");
            l.setAttribute("class", "toast"),
            document.body.appendChild(l);
            let u = null;
            var d = (e,t=1500)=>{
                const n = (0,
                o.bF)(c, {
                    text: e
                });
                (0,
                o.XX)(n, l),
                clearTimeout(u),
                u = setTimeout((()=>{
                    (0,
                    o.XX)(null, l)
                }
                ), t)
            }
        },
        97504: function(e, t) {
            "use strict";
            t.A = [{
                str: "0",
                msg: "通用场景"
            }, {
                str: "2",
                msg: "医学"
            }, {
                str: "1",
                msg: "计算机"
            }, {
                str: "3",
                msg: "金融经济"
            }]
        },
        27950: function(e, t) {
            "use strict";
            t.A = {
                product: "webfanyi",
                signSecretKey: "LqMQV3ZdE2X6DYYyc6TNsVbHgCGk7XzG",
                keyId: "ai-translate-llm",
                keyIdPre: "ai-translate-llm-pre",
                keyfrom: "fanyi.web",
                needSignUrl: ["/translate_llm/userinfo"],
                errorMap: {
                    500: "服务器错误",
                    602: "输出错误",
                    607: "服务异常",
                    603: "对不起,正在学习中"
                }
            }
        },
        42699: function(e, t, n) {
            "use strict";
            n.d(t, {
                K: function() {
                    return o
                }
            });
            const o = {
                beforeMount(e, t, n) {
                    function o(n) {
                        if (e.contains(n.target))
                            return !1;
                        t.value && t.value(n)
                    }
                    e.__vueClickOutside__ = o,
                    document.addEventListener("mousedown", o)
                },
                unmounted(e, t) {
                    document.removeEventListener("mousedown", e.__vueClickOutside__),
                    delete e.__vueClickOutside__
                }
            }
        },
        34792: function(e, t, n) {
            "use strict";
            n.d(t, {
                A: function() {
                    return i
                }
            });
            n(33110);
            var o = n(75220)
              , a = n(66278)
              , r = n(37282);
            function i() {
                const e = (0,
                o.lq)()
                  , t = (0,
                a.Pj)()
                  , n = ()=>{
                    r.A.$emit("saveTextTranslateContentToLS")
                }
                  , i = ()=>{
                    "/AITranslate" === e.path && localStorage.setItem("afterProcessHistory", JSON.stringify(t.state.text.historyList))
                }
                ;
                return {
                    saveTextTranslateContentToLS: n,
                    saveAITranslateHistoryList: i
                }
            }
        },
        1360: function(e, t, n) {
            "use strict";
            n(23792),
            n(3362),
            n(9391),
            n(39653);
            var o = n(86964)
              , a = n.n(o)
              , r = n(81659)
              , i = n.n(r)
              , s = n(6301)
              , c = n(54727)
              , l = (n(12153),
            n(3745))
              , u = n(48066);
            function d(e, t, n, o, a, r) {
                return (0,
                s.uX)(),
                (0,
                s.Wv)(s.eB, {
                    name: "blankTooltip"
                }, {
                    default: (0,
                    s.k6)((()=>[(0,
                    s.eW)((0,
                    s.v_)(o.text), 1)])),
                    _: 1
                })
            }
            var m = {
                setup() {
                    const e = (0,
                    s.KR)();
                    return {
                        text: e
                    }
                }
            }
              , p = n(66262);
            const g = (0,
            p.A)(m, [["render", d], ["__scopeId", "data-v-13c25996"]]);
            var f = g;
            const h = {
                beforeMount: function(e, t) {
                    var n, o = "yd-tooltip", a = "", r = null, i = "bottom", c = "blank", l = !1;
                    const u = ()=>{
                        if (t.value && "function" === typeof t.value) {
                            var u = t.value();
                            const {component: e, data: o} = u;
                            n = (0,
                            s.Ef)(e, o),
                            l = !0,
                            c = "custom"
                        } else
                            !t.value || "string" !== typeof t.value && "number" !== typeof t.value ? e.dataset.tooltip && (a = e.dataset.tooltip) : a = t.value;
                        if (e.dataset["tooltipStyle"] && (c = e.dataset["tooltipStyle"]),
                        (l || "" != a.trim()) && (!l || n)) {
                            Object.keys(t.modifiers)[0] && (i = Object.keys(t.modifiers)[0]),
                            r = document.createElement("div");
                            var d = [o, c];
                            if (r.setAttribute("class", d.join(" ")),
                            r.style.zIndex = 100,
                            l) {
                                var m = document.body.appendChild(r);
                                n.mount(m)
                            } else {
                                m = document.body.appendChild(r);
                                var p = (0,
                                s.Ef)(f)
                                  , g = p.mount(m);
                                g.text = a
                            }
                            var h = e.getBoundingClientRect();
                            (0,
                            s.dY)((()=>{
                                var e = 0
                                  , t = 0
                                  , n = 8
                                  , o = 8;
                                switch (i) {
                                case "top":
                                    e = h.left - r.offsetWidth / 2 + h.width / 2,
                                    t = h.top - r.offsetHeight - n;
                                    break;
                                case "left":
                                    e = h.left - r.offsetWidth - o,
                                    t = h.top + h.height / 2 - r.offsetHeight / 2;
                                    break;
                                case "right":
                                    e = h.left + h.width + o,
                                    t = h.top + h.height / 2 - r.offsetHeight / 2;
                                    break;
                                case "bottom":
                                    e = h.left - r.offsetWidth / 2 + h.width / 2,
                                    t = h.top + h.height + n;
                                    break;
                                case "left-bottom":
                                    e = h.left - r.offsetWidth - o,
                                    t = h.bottom - r.offsetHeight;
                                    break;
                                case "left-top":
                                    e = h.left - r.offsetWidth - o,
                                    t = h.top;
                                    break;
                                case "right-top":
                                    e = h.left + h.width + o,
                                    t = h.top;
                                    break;
                                case "right-bottom":
                                    e = h.left + h.width + o,
                                    t = h.bottom - r.offsetHeight;
                                    break;
                                case "top-left":
                                    e = h.left,
                                    t = h.top - r.offsetHeight - n;
                                    break;
                                case "top-right":
                                    e = h.left + h.width - r.offsetWidth,
                                    t = h.top - r.offsetHeight - n;
                                    break;
                                case "bottom-left":
                                    e = h.left,
                                    t = h.bottom + n;
                                    break;
                                case "bottom-right":
                                    e = h.left + h.width - r.offsetWidth,
                                    t = h.bottom + n;
                                    break
                                }
                                var a = 20;
                                e  document.body.offsetWidth && (e = document.body.offsetWidth - r.offsetWidth - a),
                                t  document.body.offsetHeight && (t = document.body.offsetHeight - r.offsetHeight - a),
                                r.style.left = e + "px",
                                r.style.top = t + "px",
                                r.style.visibility = "visible"
                            }
                            ))
                        }
                    }
                      , d = ()=>{
                        r && r.parentNode.removeChild(r),
                        n = null,
                        a = "",
                        l = !1,
                        r = null
                    }
                    ;
                    e.addEventListener("mouseenter", u),
                    e.addEventListener("mouseleave", d)
                },
                updated(e, {value: t}) {
                    e.$value = t
                },
                unmounted(e) {
                    e.removeEventListener("mouseenter", e.mouseenterHandler),
                    e.removeEventListener("mouseleave", e.mouseleaveHandler)
                }
            };
            var A = h;
            const v = {
                tooltip: A
            };
            var b = {
                install(e) {
                    Object.keys(v).forEach((t=>{
                        e.directive(t, v[t])
                    }
                    ))
                }
            }
              , T = b
              , y = n(71260)
              , _ = n(68367)
              , S = n(20618)
              , k = n(42699);
            const I = {
                class: "sticky-sidebar"
            };
            function w(e, t, n, o, a, r) {
                const i = (0,
                s.g2)("router-view");
                return (0,
                s.uX)(),
                (0,
                s.CE)(s.FK, null, [o.show ? ((0,
                s.uX)(),
                (0,
                s.Wv)(i, {
                    key: 0,
                    class: (0,
                    s.C4)(["os_" + o.currentOS])
                }, null, 8, ["class"])) : (0,
                s.Q3)("", !0), (0,
                s.Lk)("div", I, [(0,
                s.bF)(o["BackToTop"])])], 64)
            }
            n(27495),
            n(62953);
            function E(e, t, n, o, a, r) {
                return (0,
                s.uX)(),
                (0,
                s.CE)("div", {
                    class: "backToTopButton",
                    style: (0,
                    s.Tr)({
                        display: o.showButton ? "block" : "none"
                    }),
                    onClick: o.scrollToTop
                }, null, 4)
            }
            var C = {
                __name: "BackToTop",
                setup(e, {expose: t}) {
                    t();
                    const n = (0,
                    s.KR)(!1)
                      , o = window.innerHeight || document.body.clientHeight
                      , a = ()=>{
                        const e = document.documentElement.scrollTop || document.body.scrollTop;
                        n.value = e >= o
                    }
                    ;
                    window.addEventListener("scroll", a),
                    (0,
                    s.xo)((()=>{
                        window.removeEventListener("scroll", a)
                    }
                    ));
                    const r = ()=>{
                        document.documentElement.scrollTo({
                            top: 0,
                            behavior: "smooth"
                        })
                    }
                      , i = {
                        showButton: n,
                        winHeight: o,
                        srollListener: a,
                        scrollToTop: r
                    };
                    return Object.defineProperty(i, "__isScriptSetup", {
                        enumerable: !1,
                        value: !0
                    }),
                    i
                }
            };
            const D = (0,
            p.A)(C, [["render", E], ["__scopeId", "data-v-e6a8c40e"]]);
            var P = D
              , x = n(53007)
              , L = n(18908)
              , O = n(96091)
              , R = n(66278)
              , N = n(83503)
              , U = n.n(N)
              , H = n(37282)
              , M = {
                __name: "App",
                setup(e, {expose: t}) {
                    t();
                    const n = (0,
                    R.Pj)()
                      , o = (0,
                    s.KR)(!1);
                    (0,
                    s.sV)((async()=>{
                        H.A.$on("changeStickySidebarPosition", (()=>{
                            console.log("11")
                        }
                        )),
                        await (0,
                        O.A)(),
                        await n.dispatch("fetchAITranslateSecretKey"),
                        o.value = !0,
                        H.A.$on("buyVipSuccessFromVipCenter", (()=>{
                            f()
                        }
                        ))
                    }
                    ));
                    const a = (0,
                    s.nI)()
                      , r = a.appContext.config.globalProperties
                      , i = (0,
                    s.KR)("")
                      , c = (0,
                    s.KR)("")
                      , l = (0,
                    s.KR)("")
                      , u = (0,
                    s.KR)("https://ydlunacommon-cdn.nosdn.127.net/e5d302ac10bb57dbb7bace5281d5eb6a.png")
                      , d = (0,
                    s.KR)("")
                      , m = e=>{
                        const t = {
                            userid: e
                        };
                        x.A.getBatchUrl(t).then((e=>{
                            c.value = e.values.nickname,
                            n.dispatch("login/setNickName", c.value)
                        }
                        ))
                    }
                      , p = ()=>{
                        x.A.getVipStatus().then((e=>{
                            n.dispatch("login/setSvip", e.svip),
                            n.dispatch("login/setVip", e.vip)
                        }
                        ))
                    }
                      , g = ()=>{
                        const e = "education-certification"
                          , t = "cf41bbc6c60a46ff"
                          , o = +new Date
                          , a = "keyid,mysticTime,product"
                          , r = "webfanyi"
                          , i = U()(`keyid=${e}&mysticTime=${o}&product=${r}&key=${t}`).toString();
                        x.A.getStudentStatus({
                            keyid: e,
                            mysticTime: o,
                            pointParam: a,
                            product: r,
                            sign: i
                        }).then((e=>{
                            0 === e.code && n.dispatch("login/setIsStudent", !(!e.data.educationType || e.data.isGraduate))
                        }
                        ))
                    }
                      , f = async()=>{
                        x.A.getAccountInfos().then((e=>{
                            const t = e.data;
                            0 === e.code ? (n.dispatch("login/setLogin", !0),
                            i.value = t.yduserid,
                            l.value = u.value,
                            n.dispatch("login/setOptionAvatar", l.value),
                            m(i.value),
                            p(),
                            g()) : n.dispatch("login/setLogin", !1)
                        }
                        ))
                    }
                    ;
                    f();
                    const h = ()=>{
                        const e = navigator.userAgent.toLowerCase()
                          , t = /macintosh|mac os x/i.test(e);
                        d.value = t ? "Mac" : "Windows"
                    }
                    ;
                    h(),
                    (0,
                    s.sV)((()=>{
                        H.A.$on("buyVipSuccessFromVipCenter", p)
                    }
                    )),
                    (0,
                    s.hi)((()=>{
                        H.A.$off("buyVipSuccessFromVipCenter", p)
                    }
                    ));
                    const A = {
                        store: n,
                        show: o,
                        internalInstance: a,
                        internalData: r,
                        yduserid: i,
                        nickname: c,
                        optionAvatar: l,
                        avatar: u,
                        currentOS: d,
                        getBatchData: m,
                        getVipInfo: p,
                        getStudentInfo: g,
                        getAccountInfo: f,
                        getOS: h,
                        BackToTop: P,
                        get service() {
                            return x.A
                        },
                        get serviceAI() {
                            return L.A
                        },
                        get getVisitorId() {
                            return O.A
                        },
                        get useStore() {
                            return R.Pj
                        },
                        get md5() {
                            return U()
                        },
                        ref: s.KR,
                        getCurrentInstance: s.nI,
                        onMounted: s.sV,
                        onUnmounted: s.hi,
                        get eventBus() {
                            return H.A
                        }
                    };
                    return Object.defineProperty(A, "__isScriptSetup", {
                        enumerable: !1,
                        value: !0
                    }),
                    A
                }
            };
            const B = (0,
            p.A)(M, [["render", w]]);
            var K = B
              , V = n(75220);
            const j = {
                class: "index"
            };
            function $(e, t, n, o, a, r) {
                const i = (0,
                s.g2)("dictWebsiteFooter")
                  , c = (0,
                s.g2)("TranslationWebsiteFrame");
                return (0,
                s.uX)(),
                (0,
                s.CE)("div", j, [(0,
                s.bF)(c, {
                    testMode: o.testMode,
                    canRouterJump: !0,
                    currentRouteName: "AITranslate" === e.$route.name ? "TextTranslate" : e.$route.name,
                    collapsed: "/AITranslate" === e.$route.path,
                    sidebarTransition: o.canTransition,
                    contentBgClassName: "/AITranslate" == e.$route.path ? "ai-bg" : "",
                    topNavFixedDis: "/AITranslate" == e.$route.path ? o.topNavFixedDisVal : 0,
                    onSaveTextTranslateContentToLS: o.saveTextTranslateContentToLS,
                    onSaveAITranslateHistoryList: o.saveAITranslateHistoryList,
                    onCollapseChange: o.collapseChange,
                    isFullContent: "/AITranslate" == e.$route.path,
                    needBaiduCallback: !0
                }, {
                    footer: (0,
                    s.k6)((()=>["/AITranslate" !== e.$route.path ? ((0,
                    s.uX)(),
                    (0,
                    s.Wv)(i, {
                        key: 0
                    })) : (0,
                    s.Q3)("", !0)])),
                    default: (0,
                    s.k6)((()=>[(0,
                    s.bF)(o["TranslateTab"], {
                        class: (0,
                        s.C4)({
                            "ctrl-icon-nav": "/AITranslate" == e.$route.path
                        })
                    }, null, 8, ["class"]), "/AITranslate" !== e.$route.path ? ((0,
                    s.uX)(),
                    (0,
                    s.Wv)(o["Banner"], {
                        key: 0
                    })) : (0,
                    s.Q3)("", !0), "/" !== e.$route.path || o.isPrerender ? (0,
                    s.Q3)("", !0) : ((0,
                    s.uX)(),
                    (0,
                    s.Wv)(o["AdPopUp"], {
                        key: 1
                    }))])),
                    _: 1
                }, 8, ["testMode", "currentRouteName", "collapsed", "sidebarTransition", "contentBgClassName", "topNavFixedDis", "onSaveTextTranslateContentToLS", "onSaveAITranslateHistoryList", "isFullContent"])])
            }
            var F = n(19358)
              , G = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAACXBIWXMAABYlAAAWJQFJUiTwAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAASYSURBVHgB7Zs9a1RBFIbf9Qf40YrC2hrB2ChJ4wqCWikIWhpEaw3ab9Iraq1oLFUE7QIKro1BGxNQscuaiK0hf2A9L3PG3F2ydz73I3ofOJm9y+zuPe/MnDl3ZgJUVFRUVFT8t9QwBDqdTl2KhthRLfcWzNJWWxZbEWvVarU2diri9F6xpthqJ55VsXsq4EDI3gPkZhtSNGFa2rIptij2VWxNy001ywGxg2JHxKbFJvQ9y4LYfO5ekU0AbaV7Yhf0LTr3DMbxJcQxJXZZ7FLhvQVkFCKLAOL8DSnmYMY0HX+otok8sGdQhFt63YYRYQGJJAvAMSrFTb1kS1OMnxgMFIIi2B5xX0SYRQLRAjDISfFObBKmpe/CtPowuCZ2W2w3zKxxSoTYQARRAvQ4vy52FSawDRP2hpcwgTJahFgBPmPL+YsYXJd30SWCCHAMgexCIDrmx8F59NzDpN5bEEE9QH5gRoonMGP+NEbrfBHmDOwJjAmz0hPu+37QuwfoPN/USwa8cXGeMP7c0dfNkMwxZAjQ+TpMcjOsaB/CI7EPMLmI91DwGgKq6KpeHsd4tX4RBsU3MEOBs0LL9QHfHhDa9T+JfUR3Lh/LwcL3uWBQtL2z6VHfLYC2/oxePoM/xSkqlpjvsCl4Q/OVUnx6gE1z6bxv17dTU4oIxc/a6c4H+xBGbroq+whwXsvn8Kc4P8eIsJ3zIXFnUcsrroqlQbAQ/HgTJxBOjCOpzlu+wwTDugTDH/0quXpAQ8vYPD+0J+RynthecKqskkuASS1jFzSIrwg5nSe20SbLKrkEOKrlF6ThEiG382RNy5NllVwC1LVcRzr9RBiE8+SblqVToSsIdvTlfuSj1+Ea8jtPGAAZCDckCO7rV2kUApDeYTCoR+tf/CMC9PUzeD3gX8MlgF1i2o189A6B1IwxiWELsF3Ay5E29/st0i6r5CvAEaTTL9qnps1lv0faZZVcArzv+bKUmymb6gYhwoSWK2WVXAIsa3kY8fjO87lFmNJyuaySS4CWlucQR2iSk1MEO2xbZZVKBdANSBqD4BTCiM3wcogwrZ9puzZRffKAp1qehT+p6W2qCHbv8LWronNRVJeVfsOstByH344v1/BypLe9QvqsSfAzdv3wUHIP0P22FswwuA5/cqS3Md9hW3/B5wyB77J4A2YzdNx2hHoJan3i9Syg6+uvYHqB97bTCLAHKLxan4Q8DPEgAocDI2zIUBgWvCd2/7bYvO+HvAVQRe0XU+kJjA/25AgJOj8U9Disu64PYIbCY4zg6W0b7EzBe3oQem6oOiCBOLjUvIwRPsdj60zA3yMyiCBKAM0NiiK8xXADI38r+XwQyXFMjnHhhl5yT26QhycoNvf+p/WaY965/1dGroOSM9g6QEEoQshmqgubhV7X12zt+ZCjMP3IfVR2Dt0bkhThBczJjRjY0mdgjsvaZTkmZLNjdVS2SB8hOFtwq2pJy3V0b7bQuT0wgY3dnAsw59C9FtmCafUWdgIUgvGhk35cfs7noEMsw/6HCeYO3G+sYytekI2CcR2SkX1n/8NERUVFRUXF+PMHJygcYfKZSDQAAAAASUVORK5CYII=";
            const W = ["src"];
            function X(e, t, n, o, a, r) {
                return (0,
                s.uX)(),
                (0,
                s.Wv)(o["Overlay"], {
                    visible: o.showAd,
                    modalClosable: !0
                }, {
                    content: (0,
                    s.k6)((()=>[(0,
                    s.Lk)("img", {
                        class: "ad",
                        src: o.picture,
                        onClick: o.goAd
                    }, null, 8, W), (0,
                    s.Lk)("img", {
                        class: "close",
                        src: G,
                        onClick: o.closeAd
                    })])),
                    _: 1
                }, 8, ["visible"])
            }
            n(44114);
            var Q = n(52670)
              , J = n(91588)
              , Y = n(45358)
              , q = {
                __name: "AdPopUp",
                setup(e, {expose: t}) {
                    t();
                    const n = (0,
                    s.KR)(!1)
                      , o = (0,
                    s.KR)("")
                      , a = (0,
                    s.KR)("")
                      , r = (0,
                    s.nI)()
                      , i = r.appContext.config.globalProperties
                      , c = ()=>{
                        n.value = !1
                    }
                      , l = ()=>{
                        window.open(o.value, "_self"),
                        window._rlog.push(["_trackCustom", "event", [["action", "pop-up_windows"]]])
                    }
                    ;
                    (0,
                    s.sV)((()=>{
                        J.A.getPopUpInfos().then((e=>{
                            if (0 !== Object.keys(e.data.value).length) {
                                const t = e.data.value;
                                o.value = t.url,
                                a.value = t.picture,
                                Y.A.isDuringDate(t.startTime, t.endTime) && null === i.$cookies.get("adcookie") ? (n.value = !0,
                                window._rlog.push(["_trackCustom", "event", [["show", "pop-up_windows"]]]),
                                i.$cookies.set("adcookie", !0, 86400)) : n.value = !1
                            }
                        }
                        ))
                    }
                    ));
                    const u = {
                        showAd: n,
                        url: o,
                        picture: a,
                        internalInstance: r,
                        internalData: i,
                        closeAd: c,
                        goAd: l,
                        ref: s.KR,
                        onMounted: s.sV,
                        getCurrentInstance: s.nI,
                        Overlay: Q.A,
                        get service() {
                            return J.A
                        },
                        get util() {
                            return Y.A
                        }
                    };
                    return Object.defineProperty(u, "__isScriptSetup", {
                        enumerable: !1,
                        value: !0
                    }),
                    u
                }
            };
            const z = (0,
            p.A)(q, [["render", X], ["__scopeId", "data-v-05c25f5a"]]);
            var Z = z
              , ee = n(34792);
            const te = e=>((0,
            s.Qi)("data-v-456af1b4"),
            e = e(),
            (0,
            s.jt)(),
            e)
              , ne = {
                class: "TextTranslateSetting yd-form-container"
            }
              , oe = {
                class: "checkbox"
            }
              , ae = te((()=>(0,
            s.Lk)("span", {
                class: "color_text_1 label-text"
            }, "日语假名(仅译文)", -1)))
              , re = {
                class: "checkbox"
            }
              , ie = te((()=>(0,
            s.Lk)("span", {
                class: "color_text_1 label-text"
            }, "日语罗马音(仅译文)", -1)))
              , se = {
                class: "checkbox"
            }
              , ce = te((()=>(0,
            s.Lk)("span", {
                class: "color_text_1 label-text"
            }, "显示原文字数", -1)));
            function le(e, t, n, o, a, r) {
                return (0,
                s.uX)(),
                (0,
                s.Wv)(o["InterfaceDialog"], {
                    dialogVisible: !0,
                    width: "auto",
                    height: "auto",
                    top: 28,
                    left: -140,
                    onCloseDialog: o.closeDialog
                }, {
                    default: (0,
                    s.k6)((()=>[(0,
                    s.Lk)("div", ne, [(0,
                    s.bF)(o["StrokeSwitch"]), (0,
                    s.Lk)("label", oe, [(0,
                    s.bo)((0,
                    s.Lk)("input", {
                        class: "g-checkbox",
                        type: "checkbox",
                        "onUpdate:modelValue": t[0] || (t[0] = e=>o.showPjm = e)
                    }, null, 512), [[s.lH, o.showPjm]]), ae]), (0,
                    s.Lk)("label", re, [(0,
                    s.bo)((0,
                    s.Lk)("input", {
                        class: "g-checkbox",
                        type: "checkbox",
                        "onUpdate:modelValue": t[1] || (t[1] = e=>o.showRomanPronunciation = e)
                    }, null, 512), [[s.lH, o.showRomanPronunciation]]), ie]), (0,
                    s.Lk)("label", se, [(0,
                    s.bo)((0,
                    s.Lk)("input", {
                        class: "g-checkbox",
                        type: "checkbox",
                        "onUpdate:modelValue": t[2] || (t[2] = e=>o.showWordsNumber = e)
                    }, null, 512), [[s.lH, o.showWordsNumber]]), ce])])])),
                    _: 1
                })
            }
            var ue = n(50953)
              , de = n(20641)
              , me = n(95124);
            const pe = {
                class: "stroke-switch yd-form-container"
            }
              , ge = {
                class: "checkbox"
            };
            function fe(e, t, n, o, a, r) {
                return (0,
                s.uX)(),
                (0,
                s.CE)("div", pe, [(0,
                s.Lk)("label", ge, [(0,
                s.Lk)("span", {
                    class: "color_text_1 label-text",
                    onClick: t[0] || (t[0] = (...e)=>o.downloadChrome && o.downloadChrome(...e))
                }, "下载划词插件")])])
            }
            var he = {
                name: "StrokeSwitch",
                setup(e, t) {
                    const n = ()=>{
                        window.open("https://chrome.google.com/webstore/detail/%E7%BD%91%E6%98%93%E6%9C%89%E9%81%93%E7%BF%BB%E8%AF%91/eopjamdnofihpioajgfdikhhbobonhbb?hl=en&authuser=1")
                    }
                    ;
                    return {
                        downloadChrome: n
                    }
                }
            };
            const Ae = (0,
            p.A)(he, [["render", fe], ["__scopeId", "data-v-8d65aa18"]]);
            var ve = Ae
              , be = {
                __name: "TextTranslateSetting",
                emits: ["closeDialog"],
                setup(e, {expose: t, emit: n}) {
                    t();
                    const o = (0,
                    R.Pj)()
                      , a = n
                      , r = (0,
                    ue.KR)(!1)
                      , i = (0,
                    ue.KR)(!1)
                      , c = (0,
                    ue.KR)(!0);
                    (0,
                    s.KC)((()=>{
                        o.dispatch("initTextTranslateSettingStore"),
                        r.value = o.state.text.showPjm,
                        i.value = o.state.text.showRomanPronunciation,
                        c.value = o.state.text.showWordsNumber
                    }
                    )),
                    (0,
                    de.wB)(r, ((e,t)=>{
                        e !== t && o.commit("SET_SHOW_PJM", e)
                    }
                    )),
                    (0,
                    de.wB)(i, ((e,t)=>{
                        e !== t && o.commit("SET_SHOW_ROMAN_PRONUNCICATION", e)
                    }
                    )),
                    (0,
                    de.wB)(c, ((e,t)=>{
                        e !== t && o.commit("SET_SHOW_WORDS_NUMBER", e)
                    }
                    ));
                    const l = ()=>{
                        a("closeDialog")
                    }
                      , u = {
                        store: o,
                        emit: a,
                        showPjm: r,
                        showRomanPronunciation: i,
                        showWordsNumber: c,
                        closeDialog: l,
                        get computed() {
                            return de.EW
                        },
                        get ref() {
                            return ue.KR
                        },
                        get watch() {
                            return de.wB
                        },
                        get useStore() {
                            return R.Pj
                        },
                        InterfaceDialog: me.A,
                        StrokeSwitch: ve
                    };
                    return Object.defineProperty(u, "__isScriptSetup", {
                        enumerable: !1,
                        value: !0
                    }),
                    u
                }
            };
            const Te = (0,
            p.A)(be, [["render", le], ["__scopeId", "data-v-456af1b4"]]);
            var ye = Te
              , _e = n.p + "img/AITranslateTabGuide.d2c8a07b.png";
            const Se = e=>((0,
            s.Qi)("data-v-a9443b36"),
            e = e(),
            (0,
            s.jt)(),
            e)
              , ke = {
                class: "tab-left"
            }
              , Ie = ["onClick", "onMouseenter"]
              , we = {
                key: 1,
                class: "tab-title"
            }
              , Ee = {
                class: "tab-right"
            }
              , Ce = Se((()=>(0,
            s.Lk)("i", {
                class: "icon ic_text_translate_setting"
            }, null, -1)))
              , De = Se((()=>(0,
            s.Lk)("span", {
                class: "text_translate_setting"
            }, "设置", -1)))
              , Pe = Se((()=>(0,
            s.Lk)("i", {
                class: "icon ic_leftbar_document_normal"
            }, null, -1)))
              , xe = Se((()=>(0,
            s.Lk)("span", {
                class: "color_text_1"
            }, "文档翻译记录", -1)))
              , Le = [Pe, xe];
            function Oe(e, t, n, o, a, r) {
                const i = ye
                  , c = (0,
                s.gN)("tooltip");
                return (0,
                s.uX)(),
                (0,
                s.CE)("div", {
                    class: (0,
                    s.C4)(["tab-header", {
                        "tab-header-ai": "AITranslate" === r.routeName
                    }])
                }, [(0,
                s.Lk)("div", ke, ["TextTranslate" === r.routeName || "AITranslate" === r.routeName ? ((0,
                s.uX)(),
                (0,
                s.CE)(s.FK, {
                    key: 0
                }, [((0,
                s.uX)(!0),
                (0,
                s.CE)(s.FK, null, (0,
                s.pI)(a.tabList, ((e,n)=>((0,
                s.uX)(),
                (0,
                s.CE)("div", {
                    class: (0,
                    s.C4)(["tab-item", [e.value === a.currentTab ? "active color_text_1" : "color_text_3", e.customStyle]]),
                    key: n,
                    onClick: t=>r.tabItemClickHandler(e),
                    onMouseenter: t=>r.tabItemMouseHoverHandler(e),
                    onMouseleave: t[1] || (t[1] = e=>r.guideMouseHoverHandler(0))
                }, [(0,
                s.Lk)("span", null, (0,
                s.v_)(e.label), 1), a.isPrerender || "AITranslate" !== e.value || !a.showTabAiGuide && !a.isHoverShowAiGuide || "AITranslate" === r.routeName ? (0,
                s.Q3)("", !0) : ((0,
                s.uX)(),
                (0,
                s.CE)("img", {
                    key: 0,
                    class: "ai-guide",
                    src: _e,
                    onClick: t[0] || (t[0] = (0,
                    s.D$)(((...e)=>r.clickTabAIGuide && r.clickTabAIGuide(...e)), ["stop"]))
                }))], 42, Ie)))), 128)), (0,
                s.bo)(((0,
                s.uX)(),
                (0,
                s.CE)("div", {
                    class: "tab-item color_text_3",
                    onClick: t[2] || (t[2] = e=>r.tabItemClickHandler(a.humanTranslateTab))
                }, [(0,
                s.Lk)("span", null, (0,
                s.v_)(a.humanTranslateTab.label), 1)])), [[c, r.HumanTranslateHoverTip, void 0, {
                    "bottom-left": !0
                }]])], 64)) : "DocumentUpload" === r.routeName ? ((0,
                s.uX)(),
                (0,
                s.CE)("div", we, [(0,
                s.Lk)("span", null, (0,
                s.v_)(a.documentUploadTab.label), 1)])) : (0,
                s.Q3)("", !0)]), (0,
                s.Lk)("div", Ee, ["TextTranslate" === r.routeName ? ((0,
                s.uX)(),
                (0,
                s.CE)("div", {
                    key: 0,
                    class: "tool-button",
                    onClick: t[3] || (t[3] = (...e)=>r.textTranslateSettingButtonClickHander && r.textTranslateSettingButtonClickHander(...e))
                }, [Ce, De, (0,
                s.bF)(i, {
                    dialogVisible: a.textTranslateSettingDialogVisible,
                    onCloseDialog: r.textTranslateSettingCloseCallbackHandler
                }, null, 8, ["dialogVisible", "onCloseDialog"])])) : (0,
                s.Q3)("", !0), "DocumentUpload" === r.routeName ? ((0,
                s.uX)(),
                (0,
                s.CE)("div", {
                    key: 1,
                    class: "tool-button",
                    onClick: t[4] || (t[4] = (...e)=>r.docHistoryEntryClickHandler && r.docHistoryEntryClickHandler(...e))
                }, Le)) : (0,
                s.Q3)("", !0)])], 2)
            }
            var Re = n(62512);
            const Ne = {
                class: "hunman-translate-hover-tip"
            }
              , Ue = (0,
            s.Fv)('
母语润色服务全新上线
  • 专业译员随时待命
  • 最快1分钟返回精准译文
', 2) , He = [Ue]; function Me(e, t) { return (0, s.uX)(), (0, s.CE)("div", Ne, He) } const Be = {} , Ke = (0, p.A)(Be, [["render", Me], ["__scopeId", "data-v-1674d62e"]]); var Ve = Ke , je = { name: "TabHeader", data() { var e; return { tabList: [{ label: "翻译", value: "TextTranslate" }, { label: "AI 翻译", value: "AITranslate", params: { keyfrom: "fanyiweb_tab" }, customStyle: "gradient-item" }, { label: "文档翻译", value: "DocumentUpload" }], humanTranslateTab: { label: "人工翻译", url: "https://f.youdao.com/?vendor=fanyibanner", log: "human_translation" }, documentUploadTab: { label: "文档翻译", value: "DocumentUpload" }, currentTab: "", textTranslateSettingDialogVisible: !1, showTabAiGuide: !1, isHoverShowAiGuide: !1, isPrerender: (null === (e = window.__PRERENDER_INJECTED) || void 0 === e ? void 0 : e.isPrerender) || !1 } }, computed: { routeName() { return this.$route.name }, isLogin() { return this.$store.state.login.isLogin } }, components: { TextTranslateSetting: ye }, mounted() { this.checkShowTabAiGuide(), window.addEventListener("click", this.clickHandler) }, methods: { clickTabAIGuide() { this.$router.push({ name: "AITranslate", query: { keyfrom: "fanyiweb_tab_guide" } }) }, clickHandler(e) { const {target: t} = e; "pop-up-comp mask" !== t.className && "close" !== t.className && (this.showTabAiGuide = !1, window.removeEventListener("click", this.clickHandler)) }, checkShowTabAiGuide() { const e = this.getLocalStorage("isShowTabAiGuide"); if (void 0 === e) { const e = new Date , t = `${e.getMonth() + 1}-${e.getDate()}`; this.setLocalStorage("isShowTabAiGuide", t), this.showTabAiGuide = !0 } else { const t = new Date , n = `${t.getMonth() + 1}-${t.getDate()}`; e !== n ? (this.setLocalStorage("isShowTabAiGuide", n), this.showTabAiGuide = !0) : this.showTabAiGuide = !1 } }, getLocalStorage(e) { return Re.A.get(e) }, setLocalStorage(e, t) { Re.A.set(e, t) }, guideMouseHoverHandler(e) { this.isHoverShowAiGuide = Boolean(e) }, tabItemMouseHoverHandler(e) { "AITranslate" === e.value && (this.isHoverShowAiGuide = !0) }, HumanTranslateHoverTip() { return { component: Ve } }, tabItemClickHandler(e) { H.A.$emit("stopTransition"), e.value ? this.$router.push({ name: `${e.value}`, query: e && e.params || {} }) : (e.log && window._rlog.push(["_trackCustom", "event", [["action", e.log]]]), window.open(e.url, "_blank")) }, textTranslateSettingButtonClickHander() { this.textTranslateSettingDialogVisible = !0 }, textTranslateSettingCloseCallbackHandler() { this.textTranslateSettingDialogVisible = !1 }, docHistoryEntryClickHandler() { if (this.isLogin) { const e = this.$router.resolve({ path: "/person/docHistory" }); window.open(e.href, "_blank") } else { const e = `${window.location.origin}${window.location.pathname}#/person/docHistory`; window.location.href = `https://c.youdao.com/common-login-web/index.html?redirect_url=${encodeURIComponent(e)}&t=${(new Date).getTime()}` } } }, watch: { $route: { handler() { this.currentTab = decodeURIComponent(this.$route.name) }, immediate: !0 } } }; const $e = (0, p.A)(je, [["render", Oe], ["__scopeId", "data-v-a9443b36"]]); var Fe = $e; const Ge = { class: "tab-body color_bg_3" }; function We(e, t, n, o, a, r) { const i = Fe , c = (0, s.g2)("router-view"); return (0, s.uX)(), (0, s.CE)("div", { class: (0, s.C4)(["translate-tab-container", { "ai-content": "/AITranslate" === o.route.path, "ai-content ai-content-small-process": "/AITranslateSmallProcess" === o.route.path, changeHeight: "/AITranslate" === o.route.path && o.changeHeight }]), ref: "AIContent", onScroll: o.handleScroll }, [(0, s.bF)(i), (0, s.Lk)("div", null, [(0, s.Lk)("div", Ge, [(0, s.bF)(c, null, { default: (0, s.k6)((({Component: e})=>[((0, s.uX)(), (0, s.Wv)(s.PR, null, [((0, s.uX)(), (0, s.Wv)((0, s.$y)(e)))], 1024))])), _: 1 })])])], 34) } var Xe = n(34917) , Qe = { __name: "index", setup(e, {expose: t}) { t(); const n = (0, V.lq)() , o = (0, s.nI)() , a = o.appContext.config.globalProperties , r = (0, R.Pj)() , i = (0, s.KR)(null) , c = (0, s.KR)(0) , l = (0, s.KR)(0) , u = (0, s.KR)(!1) , d = e=>{ const t = e.target.scrollHeight - e.target.clientHeight , n = e.target.scrollTop 90 && t - n > 90 && (H.A.$emit("AITranslateResultScroll", 1), c.value = 1), n { r.dispatch("fetchLanguageData"), r.dispatch("fetchDomainData"); const e = { keyid: "minor-search-server" } , t = "8XdqRK6tvAQAtRB349Wdmkzxr2A5fqDJ"; Xe.A.getAigcEntrance(e, t).then((n=>{ r.commit("SET_ISALLOWAIGC", n.data.isAllow), !n.data.isAllow && r.state.login.isLogin || Xe.A.getAigcStyle(e, t).then((e=>{ r.commit("SET_AIGCDOMAINMAP", e.data.styleList), null !== a.$cookies.get("participation-aigc-invitation") && r.dispatch("updateDomainMap") } )) } )) } )), (0, s.sV)((()=>{ H.A.$on("AITranslateResultScroll", (e=>{ u.value = !!e } )) } )); const m = { route: n, internalInstance: o, internalData: a, store: r, AIContent: i, toggleTopBarStatus: c, lastScrollTop: l, changeHeight: u, handleScroll: d, getCurrentInstance: s.nI, onMounted: s.sV, get useRoute() { return V.lq }, get useStore() { return R.Pj }, get eventBus() { return H.A }, get service() { return Xe.A } }; return Object.defineProperty(m, "__isScriptSetup", { enumerable: !1, value: !0 }), m } }; const Je = (0, p.A)(Qe, [["render", We], ["__scopeId", "data-v-3b7ce05b"]]); var Ye = Je , qe = { __name: "Home", setup(e, {expose: t}) { var n; t(); const {saveTextTranslateContentToLS: o, saveAITranslateHistoryList: a} = (0, ee.A)() , r = (0, s.KR)(!0) , i = (null === (n = window.__PRERENDER_INJECTED) || void 0 === n ? void 0 : n.isPrerender) || !1 , c = (0, s.KR)(0) , l = ()=>{ const e = window.innerWidth; c.value = e { document.dispatchEvent(new Event("render-event")), l(), window.addEventListener("resize", l) } )), (0, s.hi)((()=>{ window.removeEventListener("resize", l) } )); const u = (0, s.EW)((()=>!1)) , d = e=>{ H.A.$emit("sidebarCollapseChange", e) } ; (0, s.sV)((()=>{ H.A.$on("stopTransition", (()=>{ r.value = !1, setTimeout((()=>{ r.value = !0 } ), 200) } )) } )); const m = { saveTextTranslateContentToLS: o, saveAITranslateHistoryList: a, canTransition: r, isPrerender: i, topNavFixedDisVal: c, getTopNavFixedDisVal: l, testMode: u, collapseChange: d, onMounted: s.sV, onUnmounted: s.hi, get useRoute() { return V.lq }, get eventBus() { return H.A }, Banner: F.A, AdPopUp: Z, get useTranslationWebsiteFrame() { return ee.A }, TranslateTab: Ye }; return Object.defineProperty(m, "__isScriptSetup", { enumerable: !1, value: !0 }), m } }; const ze = (0, p.A)(qe, [["render", $]]); var Ze = ze , et = n(25507); const tt = [{ path: "/", name: "Home", component: Ze, children: [{ path: "", name: "TextTranslate", component: ()=>Promise.all([n.e(667), n.e(762), n.e(665), n.e(348)]).then(n.bind(n, 40719)) }, { path: "documentUpload", name: "DocumentUpload", component: ()=>Promise.all([n.e(665), n.e(316), n.e(551)]).then(n.bind(n, 94099)) }, { path: "AITranslate", name: "AITranslate", component: ()=>Promise.all([n.e(667), n.e(762), n.e(873)]).then(n.bind(n, 57293)) }] }, { path: "/paraphraser", name: "Paraphraser", component: ()=>Promise.all([n.e(667), n.e(108)]).then(n.bind(n, 1258)) }, { path: "/person", name: "person", component: ()=>n.e(688).then(n.bind(n, 99961)), beforeEnter(e, t, n) { console.log(et.A.state.login.isLogin); const {isLogin: o} = et.A.state.login; o ? n() : n({ name: "Home" }) }, children: [{ path: "docHistory", name: "docHistory", component: ()=>Promise.all([n.e(189), n.e(637)]).then(n.bind(n, 12488)) }, { path: "termBank", name: "termBank", component: ()=>Promise.all([n.e(189), n.e(316), n.e(471)]).then(n.bind(n, 63093)) }] }, { path: "/login/:redirectUrl?", name: "NoLogin", component: ()=>n.e(333).then(n.bind(n, 65368)) }, { path: "/AITranslateSmallProcess", name: "/AITranslateSmallProcess", component: ()=>Promise.all([n.e(667), n.e(762), n.e(873)]).then(n.bind(n, 57293)) }] , nt = (0, V.aE)({ history: (0, V.Bt)(), routes: tt }); nt.beforeEach(((e,t,n)=>{ document.body.scrollTop = 0, document.documentElement.scrollTop = 0, n() } )); var ot = nt; n(48559); n(86964).polyfill(), a().polyfill(); const at = (0, s.Ef)(K); at.config.globalProperties.$cookies = i(), at.config.globalProperties.$toast = l.A, window.$CPopup = u.A, at.use(et.A).use(ot).use(i()).use(T).use(c.A).use(y.A).use(_.A).use(S.A).directive("clickoutside", k.K).mount("#app") }, 18908: function(e, t, n) { "use strict"; var o = n(58788) , a = n(25507) , r = n(97815) , i = n(27950) , s = n(14914) , c = n(95457); const l = "https://luna-ai.youdao.com" , {product: u, keyId: d, keyfrom: m, keyIdPre: p} = i.A , g = localStorage.getItem("yduuid") , f = async(e,t,n)=>{ const o = { signSecretKey: a.A.state.text.secretAIKey, keyId: d, product: u, keyfrom: m }; return e.yduuid = localStorage.getItem("yduuid"), (0, s.a)(`${l}/translate_llm/trans`, e, o, t, n) } , h = async(e,t,n)=>{ const o = { signSecretKey: a.A.state.text.secretAIKey, keyId: d, product: u, keyfrom: m }; return e.yduuid = localStorage.getItem("yduuid"), (0, s.a)(`${l}/translate_llm/afterProcess`, e, o, t, n) } , A = e=>(0, c.bE)(`${l}/translate_llm/like`, r.A.genParamV3FormData(e, a.A.state.text.secretAIKey, d, u, m, localStorage.getItem("yduuid"))) , v = ()=>(0, c.Jt)(`${l}/translate_llm/functionList`, r.A.genParamV3({}, a.A.state.text.secretAIKey, d, u, m, localStorage.getItem("yduuid"))) , b = (e,t)=>{ const n = "https://lunafeedback.youdao.com/feedback"; return (0, c.T3)(`${n}/add?${e}`, t) } , T = e=>(0, c.bE)(`${l}/translate_llm/modelfeedback`, r.A.genParamV3FormData((0, o.A)({ token: localStorage.getItem("ydtoken") }, e), a.A.state.text.secretAIKey, d, u, m, localStorage.getItem("yduuid"))) , y = e=>(0, c.bE)(`${l}/translate_llm/modify`, r.A.genParamV3FormData((0, o.A)({ token: localStorage.getItem("ydtoken") }, e), a.A.state.text.secretAIKey, d, u, m, localStorage.getItem("yduuid"))) , _ = e=>(0, c.bE)(`${l}/translate_llm/del`, r.A.genParamV3FormData((0, o.A)({ token: localStorage.getItem("ydtoken") }, e), a.A.state.text.secretAIKey, d, u, m, localStorage.getItem("yduuid"))) , S = e=>(0, c.Jt)(`${l}/translate_llm/IntentionRec`, r.A.genParamV3((0, o.A)({ token: localStorage.getItem("ydtoken") }, e), a.A.state.text.secretAIKey, d, u, m, g)) , k = e=>(0, c.Jt)(`${l}/translate_llm/example`, r.A.genParamV3((0, o.A)({ token: localStorage.getItem("ydtoken") }, e), a.A.state.text.secretAIKey, d, u, m, g)) , I = ()=>(0, c.Jt)(`${l}/translate_llm/guideInfo`, r.A.genParamV3({ token: localStorage.getItem("ydtoken") }, a.A.state.text.secretAIKey, d, u, m, g)) , w = async(e,t,n)=>{ const o = { signSecretKey: a.A.state.text.secretAIKey, keyId: d, product: u, keyfrom: m }; return e.yduuid = localStorage.getItem("yduuid"), (0, s.a)(`${l}/translate_llm/v2/chat`, e, o, t, n) } , E = ()=>(0, c.Jt)(`${l}/translate_llm/v2/history/list`, r.A.genParamV3({ token: localStorage.getItem("ydtoken") }, a.A.state.text.secretAIKey, d, u, m, g)) , C = e=>(0, c.bE)(`${l}/translate_llm/v2/history/del`, r.A.genParamV3FormData({ token: localStorage.getItem("ydtoken"), id: e }, a.A.state.text.secretAIKey, d, u, m, g)) , D = ()=>(0, c.Jt)(`${l}/translate_llm/v2/init`, r.A.genParamV3({ token: localStorage.getItem("ydtoken") }, a.A.state.text.secretAIKey, d, u, m, g)) , P = e=>(0, c.Jt)(`${l}/translate_llm/v2/suggest`, r.A.genParamV3({ token: localStorage.getItem("ydtoken"), functionEnglishName: e }, a.A.state.text.secretAIKey, d, u, m, g)) , x = ()=>(0, c.Jt)(`${l}/translate_llm/userinfo`, r.A.genParamV3({ token: localStorage.getItem("ydtoken") }, a.A.state.text.secretAIKey, d, u, m, localStorage.getItem("yduuid"))) , L = e=>(0, c.Jt)(`${l}/translate_llm/v2/history/details`, r.A.genParamV3({ token: localStorage.getItem("ydtoken"), id: e }, a.A.state.text.secretAIKey, d, u, m, localStorage.getItem("yduuid"))); t.A = { fetchSSEMethod: f, getUserRemainTime: x, translatellmlike: A, getMenu: v, fetchAfterProcessSSE: h, feedback: b, compareModel: T, modifyAfterProcess: y, delAfterProcess: _, getIntentionRec: S, getLargeModelGuideExample: k, getLargeModelGuideInfo: I, getChat: w, getDialogList: E, delDialog: C, getInit: D, getProcess: P, recoverDialogs: L } }, 91588: function(e, t, n) { "use strict"; var o = n(95457); const a = "https://api-overmind.youdao.com/openapi/get/luna/dict/dict-common-config/prod" , r = ()=>(0, o.Jt)(`${a}/translateMainPageBanner`) , i = ()=>(0, o.Jt)(`${a}/translateMainPagePopup`); t.A = { getBannerInfos: r, getPopUpInfos: i } }, 95457: function(e, t, n) { "use strict"; n.d(t, { H: function() { return u }, Jt: function() { return s }, T3: function() { return l }, bE: function() { return c } }); var o = n(58788) , a = n(91250) , r = (n(6301), n(3745)) , i = n(48066); function s(e, t, n={}) { return new Promise(((r,i)=>{ a.A.get(e, (0, o.A)({ params: t }, n)).then((e=>{ r(e.data) } )).catch((e=>{ i(e) } )) } )) } function c(e, t, n) { return new Promise((o=>{ n ? a.A.post(e, t, { timeout: n }).then((e=>{ o(e.data) } )).catch((e=>{ o(e) } )) : a.A.post(e, t).then((e=>{ o(e.data) } )).catch((e=>{ o(e) } )) } )) } function l(e, t, n) { const o = t , r = new FormData; return Object.keys(o).forEach((e=>{ r.append(e, o[e]) } )), new Promise(((t,o)=>{ const i = {}; n && (i.timeout = n), a.A.post(e, r, i).then((e=>{ t(e.data) } )).catch((e=>{ o(e) } )) } )) } function u(e, t, n) { return new Promise(((o,r)=>{ a.A.post(e, t, n).then((e=>{ o(e.data) } )).catch((e=>{ r(e) } )) } )) } a.A.defaults.withCredentials = !0, a.A.defaults.timeout = 6e4, a.A.interceptors.response.use((e=>{ const {headers: t} = e , n = Object.keys(e.headers).find((e=>"exceedmaxdevicecnt" === e.toLowerCase())); return t && "true" === t[n] && (0, i.A)({ confirmButtonText: "重新登录", text: "您同时登录的设备数过多,已被挤下线,登录新账号,可继续使用~", confirm: ()=>{ const e = encodeURIComponent(window.location.href); window.location.href = `https://c.youdao.com/common-login-web/index.html?redirect_url=${e}&t=${(new Date).getTime()}` } , cancel: ()=>{ const e = encodeURIComponent(window.location.href); window.location.href = `https://dict.youdao.com/login/acc/se/reset?product=DICT&samesite=true&ru=${e}` } }), e } ), (e=>(e.code && "ERR_CANCELED" === e.code || (0, r.A)("网络异常,请检查网络"), Promise.reject(e)))) }, 53007: function(e, t, n) { "use strict"; n(33110); var o = n(95457); const a = "https://dict.youdao.com" , r = "https://dict.youdao.com/vip" , i = "https://dict.youdao.com/login/acc" , s = ["option_avatar", "nickname"] , c = "https://backendmarket.youdao.com" , l = "https://education-certification.youdao.com/education/pub/get" , u = e=>(0, o.bE)(`${r}/user/status`, e) , d = ()=>(0, o.Jt)(`${a}/login/acc/query/accountinfo`) , m = e=>(0, o.Jt)(`${a}/profile/batch/get?content=${encodeURIComponent(JSON.stringify(s))}`, e) , p = e=>(0, o.bE)(`${c}/collect/docreport`, e) , g = ({keyid: e, mysticTime: t, product: n, pointParam: a, sign: r})=>(0, o.Jt)(`${l}?keyid=${e}&mysticTime=${t}&product=${n}&pointParam=${a}&sign=${r}`, {}) , f = e=>(0, o.Jt)(`${i}/device/check`, e); t.A = { getAccountInfos: d, getBatchUrl: m, getVipStatus: u, baiduCallback: p, getStudentStatus: g, checkLogin: f } }, 34917: function(e, t, n) { "use strict"; var o = n(58788) , a = n(95457) , r = n(91565) , i = n(91250) , s = (n(97815), n(25507), n(48287)["Buffer"]); const {CancelToken: c} = i.A; let l; const u = "fanyideskweb" , d = "webfanyi" , m = "client,mysticTime,product" , p = "1.0.0" , g = "web" , f = "fanyi.web" , h = 1 , A = 1 , v = 1 , b = "wifi" , T = 0; function y(e) { return r.createHash("md5").update(e).digest() } function _(e) { return r.createHash("md5").update(e.toString()).digest("hex") } function S(e, t) { return _(`client=${u}&mysticTime=${e}&product=${d}&key=${t}`) } function k(e, t) { const n = (new Date).getTime(); return { sign: S(n, e), client: u, product: d, appVersion: p, vendor: g, pointParam: m, mysticTime: n, keyfrom: f, mid: h, screen: A, model: v, network: b, abtest: T, yduuid: t || "abcdefg" } } const I = "https://luna-ai.youdao.com" , w = (e,t)=>(0, a.Jt)("https://dict.youdao.com/webtranslate/key", (0, o.A)((0, o.A)({}, e), k(t))) , E = (e,t,n)=>(0, a.Jt)(`${I}/translate_llm/secret`, (0, o.A)((0, o.A)({}, e), k(t, n))) , C = (e,t)=>(0, a.H)("https://dict.youdao.com/webtranslate", (0, o.A)((0, o.A)({}, e), k(t)), { headers: { "Content-Type": "application/x-www-form-urlencoded" } }) , D = ()=>{ l && l() } , P = e=>(0, a.T3)("https://dict.youdao.com/keyword/key", e) , x = (e,t)=>(0, a.Jt)(" https://dict-subsidiary.youdao.com/aigc/entrance", (0, o.A)((0, o.A)({}, e), k(t))) , L = (e,t)=>(0, a.Jt)(" https://dict-subsidiary.youdao.com/aigc/style", (0, o.A)((0, o.A)({}, e), k(t))) , O = (e,t)=>(0, a.Jt)(" https://dict-subsidiary.youdao.com/aigc/tran", (0, o.A)((0, o.A)({}, e), k(t)), { cancelToken: new c((e=>{ l = e } )) }) , R = e=>(0, a.T3)("https://fanyi.youdao.com/feedback", e) , N = (e,t,n)=>{ if (!e) return null; const o = s.alloc(16, y(t)) , a = s.alloc(16, y(n)) , i = r.createDecipheriv("aes-128-cbc", o, a); let c = i.update(e, "base64", "utf-8"); return c += i.final("utf-8"), c } , U = "https://lunafeedback.youdao.com/feedback" , H = e=>{ const t = { comments: e }; return (0, a.T3)(`${U}/add?product=deskdict_contentCorrection&client=fanyiweb&appVersion=1.0.0`, t) } ; t.A = { getTextTranslateSecretKey: w, getTextTranslateResult: C, getTextTranslateKeyword: P, decodeData: N, feedback: H, getAigcEntrance: x, getAigcStyle: L, getAigcTran: O, fanyiFeedback: R, getAITranslateSecretKey: E, cancelLastGpt: D } }, 25507: function(e, t, n) { "use strict"; n(44114), n(72712), n(27495), n(25440), n(62953); var o = n(66278); const a = [] , r = n(84870) , i = r.keys().reduce(((e,t)=>{ const n = t.replace(/^\.\/(.*)\.\w+$/, "$1"); a.push(n); const o = r(t); return e[n] = o.default, e } ), {}); t.A = (0, o.y$)({ modules: i }) }, 57185: function(e, t, n) { "use strict"; n.r(t); n(44114), n(33110); var o = n(91250) , a = n(97504) , r = n(62512); const i = "DOMAIN" , s = "DOMAIN_MAP" , c = "TEXTDOMAIN_MAP" , l = { domainMap: a.A, allowDomainLanguageCombineList: ["en2zh-CHS", "zh-CHS2en"], isAllowAigc: !1, textTransDomainMap: a.A, aigcDomainMap: [] } , u = { [s](e, t) { e.domainMap = t }, [c](e, t) { e.textTransDomainMap = JSON.parse(JSON.stringify(t)) }, SET_ISALLOWAIGC(e, t) { e.isAllowAigc = t }, SET_AIGCDOMAINMAP(e, t) { e.aigcDomainMap = t } } , d = { initDictDomainFromLS({commit: e, state: t}, n) { var o = r.A.get(`${n}`); e(i, null !== o ? o : "0") }, async fetchDomainData({commit: e, state: t}, n) { var a = await o.A.get("https://doctrans-service.youdao.com/common/enums/list?key=domain&_=" + +new Date); a.data.data && (e(s, a.data.data), e(c, a.data.data)) }, updateDomainMap({commit: e, state: t}) { if (0 !== t.aigcDomainMap.length) { const e = t.textTransDomainMap.length; t.aigcDomainMap.forEach(((n,o)=>{ t.textTransDomainMap.push({ str: String(e + o), msg: n, from: "aigc" }) } )) } } } , m = { getDomainLabelByValue: e=>t=>{ let n = ""; for (var o = 0; o t=>{ let n = ""; for (var o = 0; o e.code === o)) } }; var u = { state: i, mutations: s, actions: c, getters: l } }, 37180: function(e, t, n) { "use strict"; n.r(t); const o = { isLogin: !0, isSvip: !1, isVip: !1, optionAvatar: "", nickname: "", isStudent: !1 } , a = { isLogin: e=>e.isLogin, optionAvatar: e=>e.optionAvatar, nickname: e=>e.nickname, isSvip: e=>e.isSvip, isVip: e=>e.isVip, isStudent: e=>e.isStudent } , r = { setOptionAvatar: ({commit: e},t)=>{ e("SET_OPTIONAVATAR", t) } , setNickName: ({commit: e},t)=>{ e("SET_NICKNAME", t) } , setLogin: ({commit: e},t)=>{ e("SET_LOGIN", t) } , setSvip: ({commit: e},t)=>{ e("SET_SVIP", t) } , setVip: ({commit: e},t)=>{ e("SET_VIP", t) } , setIsStudent: ({commit: e},t)=>{ e("SET_IS_STUDENT", t) } } , i = { SET_OPTIONAVATAR(e, t) { e.optionAvatar = t }, SET_NICKNAME(e, t) { e.nickname = t }, SET_LOGIN(e, t) { e.isLogin = t }, SET_SVIP(e, t) { e.isSvip = t }, SET_VIP(e, t) { e.isVip = t }, SET_IS_STUDENT(e, t) { e.isStudent = t } }; t["default"] = { namespaced: !0, state: o, getters: a, mutations: i, actions: r } }, 87087: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return u } }); n(44114); var o = n(34917) , a = n(62512); function r(e) { window.YoudaoSelector && (window.YoudaoSelector.Config.select = e ? "on" : "off") } const i = { secretKey: "", secretAIKey: "", dictResult: {}, decodeKey: "ydsecret://query/key/B*RGygVywfNBwpmBaZg*WT7SIOUP2T0C9WHMZN39j^DAdaZhAnxvGcCY6VYFwnHl", decodeIv: "ydsecret://query/iv/C@lZe2YzHtZ2CYgaXKSVfsb7Y4QWHjITPPZ0nQp87fBeJ!Iv6v^6fvi2WN@bYpJ4", allowStroke: !1, showPjm: !1, showRomanPronunciation: !1, showWordsNumber: !0, originResultId: "", originResultText: "", sourceText: "", selectedSourceText: "", historyList: [], isAfterProcessLoadng: !1, keyfrom: "", producting: !1, guideFreeTimes: 0, isInsertFromPaste: !1, firstTwoOriginText: "", isENandZH: !1, homeOriginText: "", dialogs: [], dialogInfo: {}, suggPrompts: "", guideFromOther: {}, remainTime: 0 } , s = { secretKey: e=>e.secretKey, secretAIKey: e=>e.secretAIKey, dictResult: e=>e.dictResult, suggPrompts: e=>e.suggPrompts, originResultId: e=>e.originResultId, originResultText: e=>e.originResultText, sourceText: e=>e.sourceText, guideFreeTimes: e=>e.guideFreeTimes, historyList: e=>e.historyList, isAfterProcessLoadng: e=>e.isAfterProcessLoadng, selectedSourceText: e=>e.selectedSourceText, producting: e=>e.producting, isInsertFromPaste: e=>e.isInsertFromPaste, firstTwoOriginText: e=>e.firstTwoOriginText, homeOriginText: e=>e.homeOriginText, isENandZH: e=>e.isENandZH } , c = { fetchAITranslateSecretKey: async({commit: e},t)=>{ const n = "ai-translate-llm-pre" , a = "EZAmCfVOH2CrBGMtPrtIPUzyv3bheLdk" , r = localStorage.getItem("yduuid") , i = localStorage.getItem("ydtoken") || void 0; return new Promise((t=>{ o.A.getAITranslateSecretKey({ keyid: n, token: i }, a, r).then((n=>{ 0 === n.code && (e("UPDATE_SECRET_AI_KEY", n.data.secretKey), n.data.token && localStorage.setItem("ydtoken", n.data.token), t(n.data.secretKey)) } )).catch((e=>{} )) } )) } , fetchTextTranslateSecretKey: async({commit: e},t)=>{ const n = "webfanyi-key-getter" , a = "asdjnjfenknafdfsdfsd"; return new Promise((t=>{ o.A.getTextTranslateSecretKey({ keyid: n }, a).then((n=>{ 0 === n.code && n.data.secretKey && (e("UPDATE_SECRET_KEY", n.data.secretKey), e("UPDATE_DECODE_KEY", n.data.aesKey), e("UPDATE_DECODE_IV", n.data.aesIv), t(n.data.secretKey)) } )).catch((e=>{} )) } )) } , setDictResult: ({commit: e},t)=>{ e("SET_DICTRESULT", t) } , initTextTranslateSettingStore: ({commit: e},t)=>{ const n = a.A.get("allowStroke") , o = a.A.get("showPjm") , r = a.A.get("showRomanPronunciation") , i = a.A.get("showWordsNumber"); e("SET_ALLOW_STROKE", null !== n && n), e("SET_SHOW_PJM", null !== o && o), e("SET_SHOW_ROMAN_PRONUNCICATION", null !== r && r), e("SET_SHOW_WORDS_NUMBER", null === i || i) } , setOriginResultId: ({commit: e},t)=>{ e("UPDATE_ORIGIN_ID", t) } , setSource: ({commit: e},t)=>{ e("UPDATE_SOURCE", t) } , setOriginResultText: ({commit: e},t)=>{ e("UPDATE_ORIGIN_TEXT", t) } , addHistoryItem: ({commit: e},t)=>{ e("ADD_HISTORY_ITEM", t) } , delHistoryItem: ({commit: e},t)=>{ e("DEL_HISTORY_ITEM", t) } , removeHistoryList: ({commit: e})=>{ e("REMOVE_HISTORY_LIST") } , updateHistoryList: ({commit: e},t)=>{ e("UPDATA_HISTORY_LIST", t) } , updateDialogs: ({commit: e},t)=>{ e("UPDATA_DIALOGS", t) } } , l = { ISWNANDZH(e, t) { e.isENandZH = t }, HOMEORIGINTEXT(e, t) { e.homeOriginText = t }, FIRSTTWOORIGINTEXT(e, t) { e.firstTwoOriginText = t }, ISPASTE_ORIGIN_TEXT(e, t) { e.isInsertFromPaste = t }, UPDATE_SECRET_KEY(e, t) { e.secretKey = t }, UPDATE_DECODE_KEY(e, t) { e.decodeKey = t }, UPDATE_DECODE_IV(e, t) { e.decodeIv = t }, UPDATE_SECRET_AI_KEY(e, t) { e.secretAIKey = t }, SET_DICTRESULT(e, t) { e.dictResult = t }, SET_ALLOW_STROKE(e, t) { e.allowStroke = t, a.A.set("allowStroke", t), r(t) }, SET_SHOW_PJM(e, t) { e.showPjm = t, a.A.set("showPjm", t) }, SET_SHOW_ROMAN_PRONUNCICATION(e, t) { e.showRomanPronunciation = t, a.A.set("showRomanPronunciation", t) }, SET_SHOW_WORDS_NUMBER(e, t) { e.showWordsNumber = t, a.A.set("showWordsNumber", t) }, UPDATE_SUGG_PROMPTS(e, t) { e.suggPrompts = t, a.A.set("suggPrompts", t) }, UPDATE_ORIGIN_ID(e, t) { e.originResultId = t }, UPDATE_SOURCE(e, t) { e.sourceText = t }, UPDATE_ORIGIN_TEXT(e, t) { e.originResultText = t }, UPDATE_GUIDEFREETIMES(e, t) { e.guideFreeTimes = t }, ADD_HISTORY_ITEM(e, t) { e.historyList.push(t) }, ADD_HISTORY(e, t) { e.historyList = t }, DEL_HISTORY_ITEM(e, t) { const n = e.historyList.findIndex((e=>e.id == t)); -1 !== n && e.historyList.splice(n, 1) }, REMOVE_HISTORY_LIST(e) { e.historyList = [] }, UPDATA_HISTORY_LIST(e, t) { const n = e.historyList.findIndex((e=>e.id === t.id)); -1 !== n && e.historyList.splice(n, 1, t) }, UPDATE_ISAFTERPROCESS_LOADING(e, t) { e.isAfterProcessLoadng = t }, UPDATA_SELECTED_SOURCE_TEXT(e, t) { e.selectedSourceText = t }, UPDATE_KEYFROM(e, t) { e.keyfrom = t }, UPDATE_PRODUCTING(e, t) { e.producting = t }, UPDATA_DIALOGS(e, t) { const n = e.dialogs.findIndex((e=>e.roundId === t.roundId)); -1 !== n && e.dialogs.splice(n, 1, t) }, ADD_DIALOGS(e, t) { e.dialogs.push(t) }, RESET_DIALOGS(e) { e.dialogs = [] }, RECOVER_DIALOGS(e, t) { e.dialogs = t }, UPDATA_DIALOGINFO(e, t) { 0 !== Object.keys(t).length ? (t.id && (e.dialogInfo.id = t.id), t.functionEnglishName && (e.dialogInfo.functionEnglishName = t.functionEnglishName)) : e.dialogInfo = t }, UPDATA_GUIDEFROMOTHER(e, t) { e.guideFromOther = t }, SET_REMAIN_TIME(e, t) { e.remainTime = t } }; var u = { state: i, getters: s, mutations: l, actions: c } }, 37282: function(e, t, n) { "use strict"; var o = n(27380); const a = {} , r = (0, o.A)(); a.$on = r.on, a.$off = r.off, a.$emit = r.emit, t.A = a }, 45358: function(e, t, n) { "use strict"; n.d(t, { n: function() { return s } }); n(84864), n(57465), n(27495), n(25440); var o = n(53007); const a = ()=>{ o.A.baiduCallback({ loginUrl: window.location.href, type: 49 }) } , r = (e,t)=>{ const n = new Date , o = new Date(e) , a = new Date(t); return n >= o && n { let n; return function(...o) { const a = this; clearTimeout(n), n = setTimeout((()=>{ e.apply(a, o) } ), t) } } , s = (e,t)=>{ let n, o = 0; return function() { const a = this , r = arguments , i = +Date.now(); i - o >= t ? (clearTimeout(n), e.apply(a, r), o = i) : (clearTimeout(n), n = setTimeout((()=>{ e.apply(a, r) } ), t)) } } , c = (e,t)=>{ const n = { "M+": t.getMonth() + 1, "d+": t.getDate(), "H+": t.getHours(), "h+": t.getHours(), "m+": t.getMinutes(), "s+": t.getSeconds(), "q+": Math.floor((t.getMonth() + 3) / 3), S: t.getMilliseconds() }; /(y+)/.test(e) && (e = e.replace(RegExp.$1, `${t.getFullYear()}`.substr(4 - RegExp.$1.length))); for (const o in n) new RegExp(`(${o})`).test(e) && (e = e.replace(RegExp.$1, 1 === RegExp.$1.length ? n[o] : `00${n[o]}`.substr(`${n[o]}`.length))); return e } , l = ()=>/macintosh|mac os x/i.test(navigator.userAgent) , u = (e,t="")=>{ const n = document.createElement("a"); n.download = t, n.style.display = "none", n.href = e, document.body.appendChild(n), n.click(), document.body.removeChild(n) } , d = e=>{ var t = e.split("?")[1] , n = {}; if (!t) return n; t = t.split("&"); for (var o = 0, a = t.length; o { if (navigator.clipboard) navigator.clipboard.writeText(e); else { var t = document.createElement("textarea"); document.body.appendChild(t), t.style.position = "fixed", t.style.clip = "rect(0 0 0 0)", t.style.top = "10px", t.value = e, t.select(), document.execCommand("copy", !0), document.body.removeChild(t) } } , p = function(e, t) { if (!Object.keys(t).length) return e; e += "?"; for (let n in t) e += `${encodeURIComponent(n)}=${encodeURIComponent(t[n])}&`; return e.substring(0, e.length - 1) } , g = e=>{ const t = new RegExp(`(\\?|#|&)${e}=([^]*)(&|#|$)`) , n = window.location.href.match(t); return decodeURIComponent(n ? n[2] : "") } ; t.A = { isDuringDate: r, debounce: i, throttle: s, dateFormat: c, isMac: l, downloadFile: u, getUrlParams: d, getParameter: g, baiduCallback: a, genUrl: p, copy: m } }, 62512: function(e, t, n) { "use strict"; n(33110); let o; const a = "fanyiweb" , r = window.localStorage; function i(e) { return `${a}-${e}` } o = "undefined" !== typeof localStorage && null !== localStorage && { set: function(e, t) { var n = JSON.stringify(t); e = i(e); try { return r.setItem(e, n) } catch (o) { "QuotaExceededError" === o.name && (r.clear(), r.setItem(e, n)) } }, get: function(e) { var t = JSON.parse(r.getItem(i(e))); return t }, remove: function(e) { r.removeItem(i(e)) } }, t.A = o }, 96091: function(e, t, n) { "use strict"; var o = n(8661); function a() { return new Promise((e=>{ o.Ay.load().then((t=>{ t.get().then((t=>{ console.log(t.visitorId, "visitorId"), localStorage.setItem("yduuid", t.visitorId), e(t.visitorId) } )) } )) } )) } t.A = a }, 97815: function(e, t, n) { "use strict"; var o = n(58788) , a = (n(44114), n(26910), n(62953), n(21396)) , r = n.n(a); const i = "key" , s = (e={},t)=>{ const n = (0, o.A)({}, e); Object.keys(n).forEach((e=>{ "" === n[e] && delete n[e] } )); const a = Object.keys(n).sort().filter((e=>!(void 0 === n[e]))); a.push(i), n[i] = t; const s = `${a.map((e=>`${e}=${n[e]}`)).join("&")}`; return [r().MD5(s).toString(r().enc.Hex), a.join(",")] } , c = (e,t,n,a,r,i,c,l)=>{ const u = (0, o.A)({ product: a, appVersion: c || 1, client: l || "web", mid: 1, vendor: "web", screen: 1, model: 1, imei: 1, network: "wifi", keyfrom: r || "fanyi.web", keyid: n, mysticTime: Date.now(), yduuid: i || "abcdefg", abtest: 0 }, e); console.log("requestData", u); const [d,m] = s(u, t); return Object.assign(u, { sign: d, pointParam: m }), u } , l = (e,t,n,a,r,i,c,l)=>{ const u = (0, o.A)({ product: a, appVersion: c || 1, client: l || "web", mid: 1, vendor: "web", screen: 1, model: 1, imei: 1, network: "wifi", keyfrom: r || "fanyi.web", keyid: n, mysticTime: Date.now(), yduuid: i || "abcdefg", abtest: 0 }, e) , [d,m] = s(u, t); Object.assign(u, { sign: d, pointParam: m }); const p = new FormData , g = Object.keys(u); return g.forEach((e=>{ p.append(e, u[e]) } )), p } ; t.A = { genSign: s, genParamV3: c, genParamV3FormData: l } }, 19358: function(e, t, n) { "use strict"; n.d(t, { A: function() { return m } }); var o = n(6301) , a = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABGCAYAAAB8MJLDAAAACXBIWXMAABYlAAAWJQFJUiTwAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAQmSURBVHgB7ZrPSxtBFMdffxwEe1C8BEW7hyKCBT0qHgw00IJgK/ijh2IFqznooR78H4p40GPFg96MCjaC0IKFVAj2GKGCoodFjFg8qKiQQ8HO13VkG8lmZvaHJp0PPLKzmdW87743+2Z2iDQajUaj0Wg0Go3mP+QBBU+ZzeycMMswO6QACUKAEmaNzOqYha7bTnARUsxMsoTxDT8FMJiFrz/dYDL7yWyLfMAPAQzyxvFsEAlz5HGKeCkAQjvMrIn8BdGQICtVXOOVABjQ+uj2wOYXiIYZ8mB8eETuwcD2gdkTCg5EGwZVk9k5ucCtAHC+j/KP7H6A//mc2S65EMGNAAj3dxTsnc/mMVki/CLFMUFVAKiPsA8q552ACEgH1A1/SBJVASLMntH9ATcEQuySJA9JHuS93486FfCbDJJERYC3dH8JkySyAiDX7kPe58IgySiQFUA69Gtqakqi0ejT5uZmYeH4NaRGWKazTCUIBz6SJKlUqqehoaHu+Pj4pK2tbXZ9fd2xeoNQKysr78vLy8t2dnbM2traWZLnEwk+FmUiwCAF2N3EoElwCI45RYLdebRLS0tVC6xG0Y4yAgj/UTv9/f0xfsxFQIhn98M5u/NgeHg4TmrUiXaUESBECiwtLR2Oj4/fOAIHWRr8IwKOcc7uPK7BtaSG8G8VFUBkJScno6OjKbsIlZWVodXV1R7exjHO8fb09PQ3XEPq4LcKDbqig6BB1qTHFfPz8+Gurq5W3k4mk1dOtrS03KTX4uJigvX5Qe6ZIWu26IioAPiBb8gDskWw46Hz4AtZ8wNHVCpBV3R3dycWFhZuOemx88IELgC4vLwUOhcEgQsQi8XCLApupQC7+2GWHq0UMKLTYYzQws/WXExNTTX19va+4O2NjY2ts7Oz84qKiqsRu76+3qiurs4sLy+nyT1YPM27ZhhYBIyNjTUODAy85O2Dg4PD9vb2eCQSieGYn2eF0yv0Jfd4Xgorg4kNe66/5m3MC1jZO7u3t5eB4dguAvoODg4apI7wKzbfBejo6AhNTEzcrCHwSREc5+dw3NnZGcN3/Nzk5GQPriU1hCtI3+uAdDod5VVevhlh9mQIUVFVVfWZ5BGqAYDvEXBxcXF1p0Wmw/gOfXgkHB0dqb74MEU7+v4UiMfj28yR9NDQ0PfNzc286/f7+/uZtbW1bSbC75GRkeTp6ansSq9J1hNAiMBL4QDAC1ThN8l3Ugn6CFJG6jV6sQkwJ9m/qARA3ksvoBSLAAj9BClQDALwvQJKL0cLXQA4jbxX3ihRyALA+RlyuWfoMRUmnm2RKUQBPN0kJSqASXePSZbjJnmI6FwAamOGpjo9dYNJ1uwuQT7sGpVJga/Xn16s1jjBFzNQ0qbIo1DPhco+QUSCQd5zYjONRqPRaDQajUbjL38BFOZkzE3BMTIAAAAASUVORK5CYII="; const r = ["src"]; function i(e, t, n, i, s, c) { return i.showBanner ? ((0, o.uX)(), (0, o.CE)("div", { key: 0, class: "banner", onClick: i.goBanner }, [(0, o.Lk)("img", { class: "banner-img", src: i.picture }, null, 8, r), (0, o.Lk)("img", { class: "close", src: a, onClick: (0, o.D$)(i.closeBanner, ["stop"]) })])) : (0, o.Q3)("", !0) } var s = n(91588) , c = n(45358) , l = { __name: "Banner", setup(e, {expose: t}) { t(); const n = (0, o.KR)("") , a = (0, o.KR)("") , r = (0, o.KR)(!0) , i = (0, o.nI)() , l = i.appContext.config.globalProperties; (0, o.sV)((()=>{ s.A.getBannerInfos().then((e=>{ const t = e.data.value; n.value = t.url, a.value = t.picture, c.A.isDuringDate(t.startTime, t.endTime) && null === l.$cookies.get("bannercookie") ? r.value = !0 : r.value = !1 } )) } )); const u = ()=>{ l.$cookies.set("bannercookie", !0, 86400), r.value = !1 } , d = ()=>{ window.open(n.value) } , m = { url: n, picture: a, showBanner: r, internalInstance: i, internalData: l, closeBanner: u, goBanner: d, get service() { return s.A }, get util() { return c.A } }; return Object.defineProperty(m, "__isScriptSetup", { enumerable: !1, value: !0 }), m } } , u = n(66262); const d = (0, u.A)(l, [["render", i], ["__scopeId", "data-v-77236003"]]); var m = d }, 52670: function(e, t, n) { "use strict"; n.d(t, { A: function() { return l } }); n(62953); var o = n(6301); const a = { class: "inner-content" }; function r(e, t, n, r, i, s) { const c = (0, o.gN)("fixed"); return (0, o.uX)(), (0, o.Wv)(o.Im, { to: "body" }, [n.visible ? (0, o.bo)(((0, o.uX)(), (0, o.CE)("div", { key: 0, class: "pop-up-comp mask", onClick: t[0] || (t[0] = (0, o.D$)(((...e)=>r.close && r.close(...e)), ["self"])) }, [(0, o.Lk)("div", a, [(0, o.RG)(e.$slots, "content", {}, void 0, !0)])])), [[c]]) : (0, o.Q3)("", !0)]) } var i = { name: "PopUp", props: { visible: Boolean, modalClosable: { type: Boolean, default: !0 } }, setup(e, t) { function n() { e.modalClosable && t.emit("update:visible", !1) } return { close: n } }, directives: { fixed: { mounted() { const e = document.body.scrollTop || document.documentElement.scrollTop; document.body.style.cssText += `position:fixed;top:-${e}px;width: 100%;` }, unmounted() { const {body: e} = document; e.style.position = "static"; const {top: t} = e.style; document.body.scrollTop = -parseInt(t, 10), document.documentElement.scrollTop = -parseInt(t, 10), e.style.top = "" } } } } , s = n(66262); const c = (0, s.A)(i, [["render", r], ["__scopeId", "data-v-909b0550"]]); var l = c }, 95124: function(e, t, n) { "use strict"; n.d(t, { A: function() { return u } }); var o = n(6301); const a = { key: 0, class: "interfaceDialogMask" } , r = { class: "interfaceDialog-body" }; function i(e, t, n, i, s, c) { return n.dialogVisible ? ((0, o.uX)(), (0, o.CE)("div", a, [(0, o.Lk)("div", { class: (0, o.C4)(["interfaceDialog", { "interfaceDialog-default-style": n.withDialogStyle }, { isCenter: n.isCenter }]), style: (0, o.Tr)({ width: c.pxStyle(n.width), height: c.pxStyle(n.height), top: c.pxStyle(n.top), left: c.pxStyle(n.left) }), ref: "interfaceDialog" }, [(0, o.Lk)("div", r, [(0, o.RG)(e.$slots, "default", {}, void 0, !0)])], 6)])) : (0, o.Q3)("", !0) } var s = { name: "InterfaceDialog", components: {}, props: { dialogVisible: { type: Boolean, required: !0, default: !1 }, width: { type: [Number, String], required: !0, default: "auto" }, height: { type: [Number, String], required: !0, default: "auto" }, top: { type: [Number, String], required: !0, default: 0 }, left: { type: [Number, String], required: !0, default: 0 }, withDialogStyle: { type: Boolean, default: !0 }, isCenter: { type: Boolean, default: !1 } }, data() { return { promiseStatus: {} } }, methods: { pxStyle(e) { return this.isString(e) ? e : e + "px" }, isString(e) { return "string" === typeof e }, isNumber(e) { return "number" === typeof e }, closeinterfaceDialog() { this.$emit("closeDialog") }, modalClickEventHandler(e) { this.$refs.interfaceDialog && !this.$refs.interfaceDialog.contains(e.target) && this.closeinterfaceDialog() } }, watch: { dialogVisible: { handler: function(e) { e ? this.$nextTick((()=>{ setTimeout((()=>{ document.body.addEventListener("click", this.modalClickEventHandler, !0) } ), 10) } )) : document.body.removeEventListener("click", this.modalClickEventHandler, !0) } } } } , c = n(66262); const l = (0, c.A)(s, [["render", i], ["__scopeId", "data-v-c8935532"]]); var u = l }, 84870: function(e, t, n) { var o = { "./domain.js": 57185, "./language.js": 36032, "./login.js": 37180, "./text.js": 87087 }; function a(e) { var t = r(e); return n(t) } function r(e) { if (!n.o(o, e)) { var t = new Error("Cannot find module '" + e + "'"); throw t.code = "MODULE_NOT_FOUND", t } return o[e] } a.keys = function() { return Object.keys(o) } , a.resolve = r, e.exports = a, a.id = 84870 }, 78982: function() {}, 47790: function() {}, 73776: function() {}, 77965: function() {}, 50477: function() {}, 66089: function() {}, 79368: function() {}, 64688: function() {}, 51069: function() {}, 15340: function() {}, 79838: function() {} } , t = {}; function n(o) { var a = t[o]; if (void 0 !== a) return a.exports; var r = t[o] = { id: o, loaded: !1, exports: {} }; return e[o].call(r.exports, r, r.exports, n), r.loaded = !0, r.exports } n.m = e, function() { var e = []; n.O = function(t, o, a, r) { if (!o) { var i = 1 / 0; for (u = 0; u = r) && Object.keys(n.O).every((function(e) { return n.O[e](o[c]) } )) ? o.splice(c--, 1) : (s = !1, r 0 && e[u - 1][2] > r; u--) e[u] = e[u - 1]; e[u] = [o, a, r] } }(), function() { n.n = function(e) { var t = e && e.__esModule ? function() { return e["default"] } : function() { return e } ; return n.d(t, { a: t }), t } }(), function() { n.d = function(e, t) { for (var o in t) n.o(t, o) && !n.o(e, o) && Object.defineProperty(e, o, { enumerable: !0, get: t[o] }) } }(), function() { n.f = {}, n.e = function(e) { return Promise.all(Object.keys(n.f).reduce((function(t, o) { return n.f[o](e, t), t } ), [])) } }(), function() { n.u = function(e) { return "js/" + ({ 108: "paraphraser", 333: "NoLogin", 348: "textTranslate", 471: "termBank", 551: "documentUpload", 637: "DocHistory", 688: "Person", 873: "aiTranslateV2" }[e] || e) + "." + { 108: "f7f3bb71", 189: "1b097f46", 316: "7dfe60c7", 333: "dd35b6a1", 348: "d336598c", 471: "d7e66b57", 551: "f013ccc6", 637: "99056b8a", 665: "832b6ef2", 667: "975ebdcd", 688: "80dee66f", 762: "dc5f2fd1", 873: "aaa38288" }[e] + ".js" } }(), function() { n.miniCssF = function(e) { return "css/" + ({ 108: "paraphraser", 333: "NoLogin", 348: "textTranslate", 471: "termBank", 551: "documentUpload", 637: "DocHistory", 688: "Person", 873: "aiTranslateV2" }[e] || e) + "." + { 108: "874603c4", 189: "866870da", 333: "5e783a0d", 348: "ab99eb3b", 471: "85b861c6", 551: "e3a3ba62", 637: "70e3b24a", 665: "f75992a6", 667: "100b0dc3", 688: "980320bd", 873: "ecad14a3" }[e] + ".css" } }(), function() { n.g = function() { if ("object" === typeof globalThis) return globalThis; try { return this || new Function("return this")() } catch (e) { if ("object" === typeof window) return window } }() }(), function() { n.o = function(e, t) { return Object.prototype.hasOwnProperty.call(e, t) } }(), function() { var e = {} , t = "translation-website:"; n.l = function(o, a, r, i) { if (e[o]) e[o].push(a); else { var s, c; if (void 0 !== r) for (var l = document.getElementsByTagName("script"), u = 0; u

重构加载器

 重新构建将加载器函数导出即可使用

(function( e ) {
    function n(o) {
        var a = t[o];
        if (void 0 !== a)
            return a.exports;
        var r = t[o] = {
            id: o,
            loaded: !1,
            exports: {}
        };
        return e[o].call(r.exports, r, r.exports, n),
        r.loaded = !0,
        r.exports
    }
    _util = n;
}
)({
});

 坑1:加载器中检测

var t = {};
// 必须
n.g = function() {
	if ("object" === typeof globalThis)
		return globalThis;
	try {
		return this || new Function("return this")()
	} catch (e) {
		if ("object" === typeof window)
			return window
	}
}()
// 必须
n.nmd = function(e) {
	return e.paths = [],
	e.children || (e.children = []),
	e
}

坑2:加载方法返回空对象

79838: function() {},
15340: function() {},    

 *** 这两个方法存在于加载器中, 被我提取到加载方法内部

最终版加载器

var _util;
(function( e ) {
    var t = {};
    function n(o) {
        var a = t[o];
        if (void 0 !== a)
            return a.exports;
        var r = t[o] = {
            id: o,
            loaded: !1,
            exports: {}
        };
        return e[o].call(r.exports, r, r.exports, n),
        r.loaded = !0,
        r.exports
    }
    n.g = function() {
        if ("object" === typeof globalThis)
            return globalThis;
        try {
            return this || new Function("return this")()
        } catch (e) {
            if ("object" === typeof window)
                return window
        }
    }()
    n.nmd = function(e) {
        return e.paths = [],
        e.children || (e.children = []),
        e
    }
    _util = n;
}
)({
    
    79838: function() {},
    15340: function() {},
});

提取代码

r = n(91565)

 那么到这里基本就结束了。

只需将上面webpack适配下 即可实现扣代码模块

本人比较喜欢扣,所以就存在所谓的坑1,坑2。 以及最终构建出来的加载器。

如果你比较喜欢一把梭哈,那么就不存在以上问题

某翻译平台翻译接口逆向之webpack学习,翻译平台翻译接口逆向与Webpack学习探索 第6张

 某翻译平台翻译接口逆向之webpack学习,翻译平台翻译接口逆向与Webpack学习探索 第7张

结果测试

加密

///
// sign
// ------ 
// r.createHash("md5").update(e.toString()).digest("hex")
var md5HashUtil = _util( 47108 )( 'md5' )
console.log( md5HashUtil.update( '1' ).digest("hex") )

某翻译平台翻译接口逆向之webpack学习,翻译平台翻译接口逆向与Webpack学习探索 第8张

 某翻译平台翻译接口逆向之webpack学习,翻译平台翻译接口逆向与Webpack学习探索 第9张

解密 

///
// aes 
function y(e) {
    var md5Util = _util( 47108 )( 'md5' )
    return md5Util.update(e).digest()
}
t = 'xxxxx'
n = 'xxxxx'
var aesUtil = _util( 48287 ).Buffer
o = aesUtil.alloc(16, y(t) )
a = aesUtil.alloc(16, y(n) )
i = _util( 91565 ).createDecipheriv("aes-128-cbc", o, a);
let c = i.update( "Z21kD9ZK1ke6ugku2ccWu4n6eLnvoDT0YgGi0y3g-v0B9sYqg8L9D6UERNozYOHqnYdl2efZNyM6Trc_xS-zKtfTK4hb6JP8XwCzNh0avc8qItQUiIU_4wKKXJlIpvMvfKvJaaZzaX6VEtpkr2FdkfoT_Jgbm2GRSVj3r40autIdlImENG8hC0ZH4ww7utwuTt3Oo_ZpXg0BSq9wePSAB75-ChkiGKF9HTIPeCl2bl84SBD1XDfFCZpkKQhecYSs0JLoXOqP2ltavxRrg58Hp1q5uIgZZ_Oo2-Jmd-t1r4es40drcAq5bjmS62M2VJF8D6ojtOh9JTfNwgzD3CxYn-Pd7-TgHMyNEJEkFXTAyxzpjlFqtrCYDE3SZUYlENkqsL8Wrra1hM-1n TfiB-BLcWAdRBynNpP5_54aq_-GBsq8bB_9yEX5ovzDB4_Ry_spVVuUnb39iplMHCdCnjOD3ngiIDbl9SUz-9n pjBX05ZYRdPmFPAl424qdoaxeVqnVoH8jQFPZVqaHMzu4mJg0SICDWFH7GP1zqGRbXd3ESjT_iBInl3gICt2XVuhh_nubcELkTEC6xbqEDRQkPUNMpzXJHjcvsLHtcmSW0S9F0445ho9kT2qZYdMBC3Fs0OaHpUtFu77gZpQn7sGiqh8VliXIcUtfvvop-1 c-Vu5QjfUbLn2-s5POR9fGYG6rt6ioe_PGmwWj-Cc00zUM7FybfarKTr4D3Rk57R72qpXN4Ja86ZsCAMmDG-m5z31RQh_V7echJ8Kna3Go3yWKCK4vtSwOWrFhiS5RTz6EkrGc3SkFKbb5vp8Wop_84myBtgnBmj4CczhTq2HcOxrJf4def6yDt2uBxyv4bTVGx9Yx3uB4Gx0iK5kYvfma6B_LnkRWk331wjuXKQtBGYIuWkR8J5QtvBmIRVaa7AA19Z4xMIEAqbcuQ5p4I9FCElthBrJd9YOcouHK4U27xxYWJJXcJoTvzG7zWtiV76fHDeQLgAWvJJ7ww4NFgjhqc6AKA_2afxa4c_lAvVZgFuKL3XSCL7PfKxp6GhjcGKeSRr80PT1gfFw2xi8X4ejjNm_prsUZ", "base64", "utf-8");
c += i.final("utf-8"),
    
console.log( c )

某翻译平台翻译接口逆向之webpack学习,翻译平台翻译接口逆向与Webpack学习探索 第10张

 

参数刨析

加密参数:${t}     //
解密参数:t        //实际为aes key
解密参数:n        //实际为aes iv
以上三个参数均由另外一个接口请求的来

以上问题请看下篇文章分解:某翻译平台翻译接口逆向之加解密参数刨析


0
收藏0
文章版权声明:除非注明,否则均为VPS857原创文章,转载或复制请以超链接形式并注明出处。

相关阅读

  • 【研发日记】Matlab/Simulink自动生成代码(二)——五种选择结构实现方法,Matlab/Simulink自动生成代码的五种选择结构实现方法(二),Matlab/Simulink自动生成代码的五种选择结构实现方法详解(二)
  • 超级好用的C++实用库之跨平台实用方法,跨平台实用方法的C++实用库超好用指南,C++跨平台实用库使用指南,超好用实用方法集合,C++跨平台实用库超好用指南,方法与技巧集合
  • 【动态规划】斐波那契数列模型(C++),斐波那契数列模型(C++实现与动态规划解析),斐波那契数列模型解析与C++实现(动态规划)
  • 【C++】,string类底层的模拟实现,C++中string类的模拟底层实现探究
  • uniapp 小程序实现微信授权登录(前端和后端),Uniapp小程序实现微信授权登录全流程(前端后端全攻略),Uniapp小程序微信授权登录全流程攻略,前端后端全指南
  • Vue脚手架的安装(保姆级教程),Vue脚手架保姆级安装教程,Vue脚手架保姆级安装指南,Vue脚手架保姆级安装指南,从零开始教你如何安装Vue脚手架
  • 如何在树莓派 Raspberry Pi中本地部署一个web站点并实现无公网IP远程访问,树莓派上本地部署Web站点及无公网IP远程访问指南,树莓派部署Web站点及无公网IP远程访问指南,本地部署与远程访问实践,树莓派部署Web站点及无公网IP远程访问实践指南,树莓派部署Web站点及无公网IP远程访问实践指南,本地部署与远程访问详解,树莓派部署Web站点及无公网IP远程访问实践详解,本地部署与远程访问指南,树莓派部署Web站点及无公网IP远程访问实践详解,本地部署与远程访问指南。
  • vue2技术栈实现AI问答机器人功能(流式与非流式两种接口方法),Vue2技术栈实现AI问答机器人功能,流式与非流式接口方法探究,Vue2技术栈实现AI问答机器人功能,流式与非流式接口方法详解
  • 发表评论

    快捷回复:表情:
    评论列表 (暂无评论,0人围观)

    还没有评论,来说两句吧...

    目录[+]

    取消
    微信二维码
    微信二维码
    支付宝二维码