今天偶然看到拼多多的ant-content好奇就搞了下。

解密方法和代码

代码是用ast来解密的。利用babel处理,解密一部分+手动修复代码。

AST相关的教程和文档

https://steakenthusiast.github.io/
https://evilrecluse.top/Babel-traverse-api-doc/
https://astexplorer.net/

以下代码不适用于所有加密

const fs = require("fs");
const { parse } = require("@babel/parser");
const traverse = require("@babel/traverse").default;
const generator = require("@babel/generator").default;
const t = require("@babel/types");
const beautify = require("js-beautify"); const jscode = fs.readFileSync("./pdd_ant2.js").toString("utf-8") let ast = parse(jscode); function node_eq(node, node2) {
if (node2.type == "VariableDeclarator") {
node2 = node2.init;
}
return node.start == node2.start && node.end == node2.end;
} function var_get_referencePaths(nodePath) {
const context = nodePath.parentPath.get("left").context;
const bindings = context.scope.bindings[nodePath.parent.left.name];
return bindings.referencePaths;
}
function get_scope_binding(path) {
if (["callee", "MemberExpression"].includes(path.key) || path.get("object").node) {
return path.scope.getBinding(path.get("object").node.name)
} else if (path.node.name) {
return path.scope.getBinding(path.node.name)
} else if (path.get("id").node) {
return path.scope.getBinding(path.get("id").node.name)
} else {
console.log("没有binding")
}
} //查找当前变量所有使用的地方
function relyon_var(referencePaths, codes = new Map()) {
//作用域
for (let i = 0; i < referencePaths.length; i++) {
//使用的path
const nodePath = referencePaths[i];
//在当前方法内直接返回不管
// if (node_eq(nodePath.node, node)) {
// continue;
// }
//说明是一个赋值操作 var n=u;
if (["right"].includes(nodePath.key)) {
//抽离关于n的代码
const varScope = var_get_referencePaths(nodePath);
relyon_var(varScope);
// const id2 = nodePath.node.start + "_" + nodePath.node.end;
// codes.set(id2, nodePath)
// //查找当前nodepath使用的引用
// const context = nodePath.parentPath.get("left").context;
// const bindings = context.scope.bindings[nodePath.parent.left.name];
// const referencePaths = bindings.referencePaths;
// //引用
// for (let index = 0; index < array.length; index++) {
// const element = array[index]; // }
// console.log(binds.referencePaths)
}
}
} function encode1(arg1, arg2) {
var u = ["fSohrCk0cG==", "W4FdMmotWRve", "W7bJWQ1CW6C=", "W5K6bCooW6i=", "dSkjW7tdRSoB", "jtxcUfRcRq==", "ALj2WQRdQG==", "W5BdSSkqWOKH", "lK07WPDy", "f8oSW6VcNrq=", "eSowCSkoaa==", "d8oGW7BcPIO=", "m0FcRCkEtq==", "qv3cOuJdVq==", "iMG5W5BcVa==", "W73dVCo6WPD2", "W6VdKmkOWO8w", "zueIB8oz", "CmkhWP0nW5W=", "W7ldLmkSWOfh", "W5FdIqdcJSkO", "aCkBpmoPyG==", "l27dICkgWRK=", "s05AWR7cTa==", "bttcNhdcUW==", "gJldK8kHFW==", "W5Sso8oXW4i=", "FgC0W7hcNmoqwa==", "xmkPhdDl", "e14kWRzQ", "BNFcVxpdPq==", "z1vadK0=", "W7yOiCk2WQ0=", "qLb7lg0=", "t8o6BwhcOq==", "gmk6lYD9WPdcHSoQqG==", "oqldGmkiCq==", "rmo+uKlcSW==", "dSoIWOVdQ8kC", "iXSUsNu=", "W5ipW4S7WRS=", "WPtcTvOCtG==", "A3CcAmoS", "lCotW6lcMba=", "iuGzWPLz", "WQVdPmoKeSkR", "W4ydoCkqWQ4=", "jCobW47cNXC=", "W4tdJCkNWOCJ", "hCo/W7ZcSJ8=", "BNuZW6NcMG==", "b8kFW6hdN8oN", "W4SpoCkXWQK=", "cXddOmkDFa==", "W63dHSoyWQft", "W6ldSmk0WRj4", "A2bHWOtcHeeMyq==", "f3VcSSk/xG==", "qg1u", "ftyivga=", "DCkhpsfe", "WR3cKmo3oMWEw8kK", "yev3", "W4xdMKSejbm=", "W797WOL7W4m=", "W6xdOCkKWQXw", "gcCUye0=", "W7WXkmomb8kT", "c8kIesD0", "WOTpEW==", "ySo3E8oVWPy=", "iNyhW5lcNLNcG8kYWQu=", "W7JdMSkfWRnD", "FfijW5tcHW==", "xCokW54Zzq==", "W77dUsi=", "W5FdHfa6eq==", "E1FcQvVdSG==", "eZ/dNCo4AG==", "CgPmWQZdKa==", "A8oLECoJWPS=", "oCoSW7VcTJC=", "mCoADa==", "W7DXuSouDq==", "ic3dQCo8ua==", "rN3cIa==", "W6/dJ8kPWRGQ", "W4xdLYlcPmkc", "F3JcPvZdLa==", "xCk8iHn4", "qg15", "W5/dL8oOWPr4", "hW41C3C=", "sSoZzwxcPW==", "ywdcUvNdUW==", "t0TzWQpdIG==", "lv7dJSoIjq==", "W5Tzxq==", "W6DnWQK=", "W5mGaCkFWRC=", "W6LmWO5+W6C=", "WR7dQmoJa8k+", "emkFW4ddOmob", "imk8imoNEa==", "W4ZdP8kaWPvc", "F8k4WO40W4e=", "cSoHE8k9cG==", "jw4TW5dcSW==", "wuJcOKRdTa==", "swNcQx/dGG==", "aCkSiCoMEq==", "W6pdS8owWQTH", "WRFdQmonjmkT", "cKBdGCkpWOm=", "oCoWW4VcPIa=", "WQddSSoUjmks", "c8kdW5JdM8oE", "W7b0AGvl", "sCk4WOylW60=", "nXNdSmkXvW==", "W67dRSkjWOqj", "W44EcCohW6O=", "W6ddPmkpWRHN", "W7tdVIVcOSkR", "qg3dVG==", "W7Ofcmofda==", "WRDmW5VcLq==", "CSoRW4W4Aq==", "mmo0WP3dVmkj", "i8omW6ZcPd8=", "CSkaWQyvW4m=", "ACkMWQCLW4q=", "W5pdOCk0WRv3", "W7yDW44SWP8=", "WRP8W5dcNmkd", "ymkNaID5", "cfeTWRT6", "W6WdbmkmWO0=", "eSo3WQldVCkU", "W5flwZrl", "WPVcTe4tWQu=", "DuCPumok", "hLpcKCksqXe=", "g3hdUCkoWRu=", "sL0sW6JcPW==", "lf7dL8oOpG==", "w8k4WPWJW7u=", "i08mW5dcUW==", "kb/dU8klsW==", "WOhcMSoW", "W5LnfG==", "F8kJWQmxW6m=", "W5ldU0CDca==", "eKRdKmkoWPG=", "tmouW60=", "gSkrW7JdVSor", "WPNcP8oc", "DhLAmLW=", "sSo0EfdcQq==", "W6ygW689WQq=", "W6CPimkIWQa=", "WRJdLmoynSkY", "W5iimCkDWRa=", "oMhdN8kPWRHV", "eNqQWQHn", "bmkakSoHW4u=", "W4PxEbvN", "WQhcQxSWyW==", "xCoKEW==", "guBcISk2yG==", "nviRW4BcSq==", "m3tcVmkXCJ9YWQyXd8kuWQfJW71fWPmnWRj+WR1tW6WbW4PDdCkrkLbDs8ozWR4gySoyv20rWO3dJJpdIh9DWPhcGCoctKFcN8kTW6nHvbLRkg9MeKhdHCoP", "W7iZfmolW4q=", "p1JdGSk4WPW=", "ns3cTuhcMSk6u8kj", "q8kmhr5p", "lWCxtKW=", "pmk+hSoYFG==", "bdFdKmkIwa==", "WR/cMSoL", "csCy", "W7BdKCkmWPfO", "tCkeWPyXW70=", "smkVWRK=", "dNFdQSokiq==", "W5OyoCoLW5O=", "W4RcIZ0xW5hdPCkaWPddO0aoE8oCwXVcSgbVtWbqW6u=", "iKNdK8khWRa=", "WQtdQCommSkg", "W6ddU8k1WQ94", "ASoXAMRcHG==", "gMhdKCoBna==", "eCk5mSoEW6K2v8octbK=", "pmo+Fmkfea==", "f3y8WPL0Ex4=", "oSkmm8oczq==", "W7ldK8oWWRnrW6WtqMG0W7/cMxbU", "W7uwdmofbG==", "A8oqyudcPG==", "s8oHt3FcTq==", "a8okBCkAdq==", "W7mvg3OI", "E8kLWR0dW7i=", "W78qhKSF", "W6XMWRHsW6K=", "hCoyzSk7fa==", "WQNcKSoHp1S=", "oCkaiCocW6i=", "bSoEW5ZcVXq=", "W5pdVCkHWRj3", "eehdNSoGhG==", "W4VdTmkhWRO=", "W73dMte=", "bqBcJelcTG==", "WOpcKLXWBa==", "W7uRa0OKnwpdRmoq", "WO3cKSoHW7C4", "WPRcOCofl0i=", "BxvOWPhcSa==", "hwK0W7tcJq==", "BMOjW5lcGq==", "cmouWONdUmk8", "E8k9WQyjW7NdNa==", "WRNcQSoFi0S=", "zLTHWPpcUW==", "WRPjW7BcLCkB", "BLRcLMddLW==", "s8kzWOiiW5m=", "W40mW4uqWP8=", "i13cMCk7Ea==", "WQBcLMupWOu=", "x8o2xmoD", "hCkBcCoLvW==", "FmkEWRShW5q=", "W58ikmo+W7K=", "W4KehmkSWOG=", "WQZcLCod", "WQtcHgXHCa==", "W4ldRbpcSmkY", "r8oKW5ukr0e+gW==", "dSkjW4FdLCoY", "cGa6Ee4=", "W69pymoVuW==", "WQRcSCo7i0i=", "W5RdICoWWQPaW70ode4=", "cfiNWODs", "W7rzWPr/W4u=", "ySkuecz+", "W4qsW70WWOq=", "W5VdS8kmWPXz", "W44jW7W=", "pxRcGW==", "ye5hngpdUa==", "WRRcQfT0va==", "WQxcImouW7CY", "qLRcJKddTa==", "p8o6q8kUdW==", "W4nlWRLvW6W=", "p3hdQ8kzWOe=", "W4eFeCojW5W=", "W43dNCoMWRG=", "nNCqW7lcQW==", "FCoqw3dcUq==", "W4BdGSkKWQ8+", "rmo8q1/cKW==", "D0assmov", "f0eQWODU", "nJXVfCo5W6VcVIniWPKKcCkpWO0fW63dNI4fWPziiSkWEmowWO12AKqNWQvPyCkMmb8aCConW7ddQCkmxs3cG3xdJuuMW7FdJCoqWQndsmk9WQzzW5mgWP/cUHmx", "pCoRymkabCoqta==", "i2xdImk+", "owFdVSkkWOm=", "WPNcK1H+Ca==", "W4FdKJxcICkP", "W4hdNSkuWO4=", "W7Gol8oAW6O=", "W61RWRrOW4y=", "W7qAn8ksWQK=", "WPVcRvWNWOG=", "xmoyrwFcQW==", "WOz7W4hcRSkB", "l1yQW5RcSW==", "zvJcQvZdNa==", "W4hdPSobWPvy", "nWldKCoIvG==", "CeTyh3K=", "pa/cVexcLG==", "cmk0W6JdUSoK", "AwSxW5ZcHq==", "jIpcKfdcOW==", "W5r5WQXpW74=", "n8k1mmoHW4G=", "xe4JW7FcMW==", "hmolw8kViW==", "gfutW6hcSG==", "hflcVSkzrW==", "jZpcRN/cRq==", "W7tdV8kF", "ig0UW7VcLW==", "b03dGCkBWP0=", "nYFcPW==", "W4ueW6StWP0=", "W4BdN8ogWR9D", "qe89qCo3", "W68dgmkSWR4=", "Ae0FsmoD", "pSoVECkojG==", "W6aplSoBfG==", "mq/dR8omya==", "amkMiCojW40=", "xN5GWPVcJa==", "W67dJmk4WQji", "fxRcVCk7yG==", "fSkLoSoLW7a=", "a8oCWPJdP8kt", "e8o0WRxdI8kv", "ChO3W6NcMa==", "awVdPmkGWO0=", "nCk0W6pdMCod", "W4xdP8kOWO5J", "lSowxSk0fW==", "js/cPwVcTW==", "WOJdRmo9amkt", "nsRcULdcUmkH", "gCkIW4FdLmoF", "DmovW7erzG==", "cSoFD8kfeq==", "WRVcH8ouW7aC", "WPvCW6xcKSkr", "W4qRW4arWQW=", "WPpcPgjfFW=="];
var n = u;
var e = 280;
(function (t) {
for (; --t;)
n.push(n.shift())
})(++e);
var c = function t(n, r) {
var e = u[n -= 0];
void 0 === t.dkfVxK && (t.jRRxCS = function (t, n) {
for (var r = [], e = 0, o = void 0, a = "", i = "", u = 0, c = (t = function (t) {
for (var n, r, e = String(t).replace(/=+$/, ""), o = "", a = 0, i = 0; r = e.charAt(i++); ~r && (n = a % 4 ? 64 * n + r : r,
a++ % 4) ? o += String.fromCharCode(255 & n >> (-2 * a & 6)) : 0)
r = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=".indexOf(r);
return o
}(t)).length; u < c; u++)
i += "%" + ("00" + t.charCodeAt(u).toString(16)).slice(-2);
t = decodeURIComponent(i);
var W = void 0;
for (W = 0; W < 256; W++)
r[W] = W;
for (W = 0; W < 256; W++)
e = (e + r[W] + n.charCodeAt(W % n.length)) % 256,
o = r[W],
r[W] = r[e],
r[e] = o;
W = 0,
e = 0;
for (var d = 0; d < t.length; d++)
e = (e + r[W = (W + 1) % 256]) % 256,
o = r[W],
r[W] = r[e],
r[e] = o,
a += String.fromCharCode(t.charCodeAt(d) ^ r[(r[W] + r[e]) % 256]);
return a
}
,
t.vDRBih = {},
t.dkfVxK = !0);
var o = t.vDRBih[n];
return void 0 === o ? (void 0 === t.EOELbZ && (t.EOELbZ = !0),
e = t.jRRxCS(e, r),
t.vDRBih[n] = e) : e = o,
e
}
return c(arg1, arg2)
}
function encode2(arg1, arg2) {
var c = ["kmkRjCkHyG==", "tSkzhCooda==", "W5HyfwldN8oaq8kZWRj+fCkwCColW6pdVG==", "oNjak8o1", "W7ijFCk/zq==", "WQeJn8kMW54=", "W5TZqxn7W4NcJSo1WR4=", "WQfrW7JcOSocW5vs", "W74jevDO", "WO3dQSkcgJu=", "hKrxomoO", "jhBcNIrJ", "Emo/W53dGq==", "rMaLc3i=", "hmkKWPXWWQddJmkmWQC3", "W75cASo9WRKndmkl", "vConW4uZjq==", "gmkOnSkozG==", "EmkgWP/cMCkJWOib", "W6uKbffk", "wCkyWRhcR8km", "nNFcRYC=", "rv0Qd0C3FNlcGSk+WQy=", "WQdcObtdVSoVg8oHWPddNW==", "W4yRqSkPqq==", "WPGeb8kHW50=", "mcdcOmomW5xdLGBdQ2lcVeJdMmkWhmkD", "eSkQnSkz", "WPquomo0sq==", "wtVcRmkpW6m=", "A8klWPxcL8kd", "WP1qWP95WO0=", "WRNdQ2zLW7K=", "W4CcWOjBWRHvCG==", "WR1iW63cOCoBW5LnW7zVxh9r", "wLpdO8kqW4JcG8oG", "rCoGW7pdJmoW", "f8kHmCkkEuq=", "cmoJdmoUW7q=", "W5XDW6q=", "WQpdRKvKW7TRW6eYW7e=", "WPFdK8k9cdNcQKeSsa==", "WRLKW7/cHmoL", "w1mHpNi=", "DhyQhuq=", "W53dIrP1qa==", "W44Zz8k/", "W6BdPszHCG==", "WQz3W4/cPCoV", "CSkOWQngECkPWRNcPmkCW6ZcGCk3W6y=", "W5v+wmokWR8=", "xNqggwy=", "qCorzgxdQCoeW5ZcM1W=", "jmkYWObWWQe=", "jCovWQq0W5pcVa==", "tCoyW6pdKv0=", "xv4N", "nHO9WOyQW6G=", "aCk1WP1aWPC=", "W4uVjffacG==", "wSoGW5BdGMa=", "rCkShCoJ", "W5nMr8ojWQ4=", "uSk8WOFcQSkK", "W4TaW7ldUcW1l8kMWQZcL8ouW5S=", "WQ7cQe/dMCoWtbb5qSk3zeKbW5JcS8kL", "W6ldGZvkvSk3fx7cJG==", "lLb2lCoroGG=", "W7CJWOvkWOy=", "lfxcNSkJ", "s8k6WOhcU8kC", "W6VcKmo2hry=", "ymozW7q7Aa==", "CIX7rdK=", "W44RqCk5W5C=", "W558rN1t", "lHBcOmorW50=", "q8oZW5Kf", "BaNcUSkzW6v9AcRdKdWe", "W4HrW6xdGYK0hSkAWQG=", "D1WrcfK=", "W5VdRIrhWQtdG2K=", "W618C3XL", "W5eRjv1xpmoVWQ3dMq==", "mwtdISoNW6XgoCoVsa==", "W71Yx1PY", "W7uLv8k4W5q=", "W71QFurt", "WORcH3JdUmoj", "WRldO3r8W7u=", "pf3cJbfW", "FCodW5xdT1W=", "FmoFy2VdLq==", "WRJdRfLVW7TIW7aRW6qdW5O=", "WQG/nG==", "yCoJW5VdGCohW5qDA8oW", "bCoGWQCSwG==", "CCoWW7pdPsKhW4ZdG1ZcP8kjuvrd", "W5VdSd5uWQldMwpdV8oM", "emoNgmoiW5m=", "amkKWPf8WPS=", "W6OWzSkNEW==", "WRKTmmkYW50=", "W7SmwSkqW6q=", "F8oFzMhdQCod", "j1xcTmkGgq==", "W6RdNZzBsW==", "W4SVp3vao8o+WRZdGW==", "W4C3W7JcMdK=", "D8oMW6S7qa==", "y8olDgxdQCo9W5ZcHvRcRa==", "W4qEke5i", "gCkRWPTJ", "WOOogmk7W4NdIG==", "WRJdICkUhtNcVa==", "ySoFDMNdVmolW4hcHa==", "WP7cGfZdMCoe", "wvuPdLGMwMNcLW==", "W5vnp1tdSW==", "bLzAeCoK", "WRFdK8k9cdNcIKeSsmkjWP3dIWhdNmoNx8oeWQW=", "WRuKdSkmW4O=", "xSkHWQxcMmkc", "BqZdSmopW64=", "W7uoACk+W7jbW6ijWPu=", "mxFdHSo4W40=", "W5ailLzq", "d2ZcR8kalG==", "W7ddRtnkWQJdJM7cR8oqALldNcxdSb8xlmoTW5efDCkdW68kW7NcVgtdKmkhrGWTWPq=", "fmk1WRfvWQ8=", "nJOjWQqu", "DqpcT8kY", "WQrbWP1hWOu=", "W7hdPGTsWOa=", "xv0Nagu=", "WO7dK8k9gdtcVvO6vmk4", "evxdV8ocW48=", "bmoWWPabW7W=", "W7LaW77dJsT4gSkuWQ3cMG==", "W5vxW4hdJY4=", "u8oQW483hG==", "W7a5nw1s", "W51AhNFdHmorACkMWQu=", "cmkXpCkEEv7dLSo6pq==", "WQBcVHZdSSo9", "WOSueSk/W43dIG==", "qCosW67dPmoK", "W5GwWPrJWRrwCfHj", "W7/dNIvTwSk+h1RcLfGvCq==", "W4RdNJjwqq==", "sui0oM8=", "y8kkWQriCq==", "W7z2W43dJXe=", "vcFdHSo6W5S=", "dLbMkmotkYiCg8o8yCojW61FWQhcKYC1WPJcMSoxBq==", "jmotWRa+W43cOSkJaW==", "W5uTnvzjoConWQFdMW==", "WPiGkmozzCodDmoRva==", "AGddJmoPW4S=", "W4qqASk2ta==", "FxSNcgO=", "B8osAwxdTCoEW60=", "WRzjW7tcJ8oBW45kW6H6swrkW7m=", "WQlcQvJdR8oNtHTDB8k9Fa==", "WPO0oCkRW6u=", "lvRcMCkZf29ZW5O2WQBcUq==", "W5qUW7tcKdRcGmkCs8oZ", "WOSXgCkVW4u=", "W4SHmKPaomo2WR7dJG==", "FGZcVCkT", "qh0VkKqwmxRcIW==", "bmo7WPu+W44=", "W69sogldKq==", "WPSGjmo0", "awJcJSk8pG==", "zmkhpmoojG==", "W53dOqnCqG==", "xG7cQCkIW4C=", "x8k5WO/cL8ki", "umohW6hdHSo9", "W6VcK8o2", "etWLWQGJ", "W5/dRsrdWQxdNM7dRSoXFW==", "nxdcTdv1", "W5eHW7pcNHi=", "xIJcTSkqW4K=", "WQxcRXpdSmoh", "BqxcImkbW6q=", "WQmGj8kWW5tdOgeFWR5gW5BdNa==", "WQFdQfvVW6vUW4m4W7m=", "hmkOlCkSra==", "s8kHAcSz", "iSo1WOeABmoLW705", "WQBcRqldVSoSha==", "xCo6W7BdG8oT", "DCklWPJcK8ksWPu3W47dKCklW4DWW4Ty", "vh0TifW=", "CXJcQSkJW6jgAdhdQd0u", "jrmSWOij", "WO7cRw3dPCod", "WQf1W6RcOmoh", "WQVcHwhdTmoC", "gmkOoSkmF2/dNSo3mHO=", "WPOrgSkXW5W=", "W5qbWO1gWR1VFKHvfG==", "rCo9W5KBzSkoWR3cOvuGW4CUW5TCgq==", "v8oRW5ZdN8oh", "fCoKWOCFBSo0W5CIW5NcI8kI", "W6RcT8owpqK=", "p8oyWR8V", "W4DBbhNdMq==", "q8kLWPbMBG==", "beZcTdzw", "b2KYtea=", "uSktWQ/cNCkz", "tmkKWQBcLSk+", "nSojiSoFW6BcSsa+W4C=", "W7SMzCkOW68=", "BmocW4K9CG==", "m3SYrMi=", "i3/dI8o3", "WQxcVb/dR8oMbSo2WOxdNG==", "z8oEW6elkG==", "W47dSsDcWRu=", "W5TUggZdNG==", "pe4VsW==", "lLP9amofoGide8oTzSosW6jOWQFcKJ0cWOhcK8ovFmkK", "W4qNFSk8W4eV", "kcVcOmoxW53dLXC=", "W5aAWOvB", "WObbWRjYWRm=", "qCkmWOXaAa==", "WRRdOL5L", "seOHbv8=", "mCozWQu=", "WQvoW4KqW4u=", "WP8ieSkRW7q=", "W55yhwRdNW==", "zKeYega=", "w2xdOmksW4a=", "W5WzWOvB", "W7OBrmk6W7O=", "eSoWWP0ECmozW7C9W5VcJCkI", "u8kgWRbJtG==", "vZH7AcG=", "auaS", "h8oRWQOmya==", "W63cT8o8gs0=", "WOiClCksW7m=", "vmktWQn9vW==", "omoxWOCkyW==", "W7r6gvhdJW==", "W5SfW4hcTY0=", "W7yMFCk5zNi=", "fmkQWPfIWRJdImkfWRy=", "wLFdVCkyW4BcJq==", "WQBcOKldQa==", "b3NcMYPe", "wSkpwGmD", "WPjMWQ98", "cmkmhCkFqa==", "WPzhW63cQW==", "mNFcQdbPv8oOF1y=", "WQf+W7WqW4O=", "tSkTemoU", "WRPuW7ZcQa==", "yCoZW5C=", "uCo6W7xdT2WLW4xdK2O=", "W4n8xvP4W47cH8oKWRi=", "tmocW48S", "aulcNCkufa==", "feeT", "W4hcLCopbbu=", "W6VdPqPrAq==", "rSoaW487amolp2FcHCkejmkkucW=", "W5ONwmkUW70=", "e2D4e8ou", "xhOhihO=", "W7dcU8o2gZ0=", "WPZcGw7dKmov", "W5TTqxDPW4xcS8o1WQJdTuNdH8oXWOvNW6m=", "h8kLk8km", "W5VdTYjiWOpdGM7dPSoLyLFdNcpdSciC", "WQKUmSkSW57dPhSeWOe=", "WO3cIsBdTCoe", "W7yfESkYFa==", "smk+AsG/", "W6mfW7JcOWu=", "uYnUwsm=", "CmkGWPxcKCkO", "keZdGCohW6e=", "W6JcPmoAbru=", "ofb+jCovpaGC", "W71VeMddQG==", "WPNdM0zDW74=", "WPflW47cHCok", "W7LtDxXU", "W7ehW7pcLH0=", "W79Pu2bw", "efK6sLNdTrfJWRZdPum=", "gNGFr34=", "W5DPySo9WO8=", "WO8LnmokDSojya==", "k8kwg8kIEa==", "sLKWlKC3vMhcICkKWPddVwuY", "WOpcP2NdQSod", "qvJdUSki", "W6WHWPzRWRu=", "nmo8WRaAvG==", "W4uIwSkjwG==", "j2tdISo+W4bAiCoTBHC1lq==", "ba/cTmoUW4e=", "W4qMzCk0AMxdR8opu1LXEdlcGSokgSkV", "tmkch8o+iG==", "nhJdGCo2W6vBlSo6sq==", "iSkcWQvLWRm=", "tmo0W6pdR0C=", "W73dJcnUWOy=", "qI5Fqs04uCkyW44=", "tSoDW6OgCG==", "WOODq8kmWOS=", "W4JdQInpWQddIa==", "qwOXj14=", "nmoyWPuSW50=", "umoFW4mQkSoPlgZcNW==", "WOxcJ2JdImoh", "WPyinSonqq==", "W73cOCo6pI4=", "D8obW5VdVCoE", "WR/dRSkMcJ0=", "cSo0aSo2W7dcQsq+W5ldVfO=", "W4ThW6tdHa==", "mrZcH8o4W5G=", "WOzMWRH2WOG=", "W5SjF8k0W61k", "CJddLSo+W6DgESk0gmkK", "W7/cRvO=", "ACoqy2/dV8op", "DSo9W4BdTmoH", "AdVdJCo8", "W7uHpxvk", "WPxdICk8hI7cMuC/uSkK", "W5/dPYju", "b1LGi8oi", "nCkDWPr5WOq=", "cSkqWRDcWOm=", "uSovW7hdOCoG", "WPWkg8ktW78=", "W4ObW7BcKra=", "WPnnW5aSW5DrWRO=", "W6VcG8o6aJDYWOL+CG==", "qCovW7q/ga==", "msRcSmoEW4ddMaZdLuRcSuxdPa==", "nHmJWOuxW6u3CCkoWPpdPW==", "s1NdVmkxW4dcHq==", "W6iQW5pcNtm=", "W4KAvCktW7C=", "qg4Jnwu=", "bee/rLpdLbPVWR8=", "aSkUWRHEWQy=", "WQddUhX7W44=", "W4vbaNFdHmoxAq==", "s1a3ceW=", "pINcUSoCW58=", "WOiJemksW6m=", "ir06WOOVW54IFSkiWOJdJXhcNCoLFSo3W7yrW6W=", "qCoUC1pdOG==", "W4tdJqfiWRq=", "WOpdUM9zW5K=", "nLdcSJLc", "WPDhW5dcMSo9", "W4mrWPz1WR8=", "WPbxWRrvWRa=", "W5XyhLtdQq==", "W7mMwSkkW4y=", "ltFcTSoRW53dNaBdQhFcVK7dUW==", "W4Heq8ovWPG=", "gCoKWP0A", "m3pcSbHw", "WQFdQfv4W6nOW4C4", "W6zbsSoTWOK=", "s17dSSksW47cHCoHqXWin1yTDG==", "qg4Ylu4RjN4=", "WPqKkCoM", "l3BcTcC=", "wCkjWOhcMmkA", "W7DPBej/", "WOixiSkRW6G=", "W7ycavnq", "WOzpWRr3WOu=", "W64wF8kpW7C=", "WQfjW7tcQW==", "WQeGnSkaW5JdPMC=", "W6HLW67dHde=", "kCozgCoFW4i=", "WRRcOK/dUCoGqbbOAG==", "W4eGzmkqW7C=", "zZZdImo8W6Dg", "WOxcM3pdI8ot", "W5uIlLPa", "W7PQv3fP", "nSkulmk+Da==", "WQhcO1W=", "WQjhW7RcPCoG", "W6WOE8k0W4S=", "gMvNbSoH", "WQW2eSkGW44=", "xCkOrGyi", "W4KZF8kY", "WQScaCk8W78=", "W4WoEmk4W6HcW6qfWOi=", "xLmPdG==", "W6BdGILn", "W6y6WQLJWOi=", "WRVcQYBdUmoI", "W4ldPaboWQm=", "A8kCtbaK", "zCoCW5aVBW==", "bGy2WOuIW4aZE8ktWP0=", "fmoWWQWsW6W=", "y1G5nL8=", "ighcUcrI", "cmkLoCkmF0u=", "cCoPWQOkrG==", "yCkHWQLbuW==", "WOtcPZtdL8o5", "mH08", "WRTNW7GdW6G=", "ifFcKSk6hMrcW6u3", "smkZhmoOdW==", "qs9o", "gmojbCoZW6a=", "jxFdKCoY", "WRPKWPfnWPi=", "EmkUWQ5pzCk5WQ8=", "W50zFCk0W7jBW7G=", "W5ZdLbTbWQq=", "WQ8jj8kSW6a=", "WQfZW6OCW616WPS=", "mNFcJIDZu8oPBG==", "W6y6DSkQAG==", "zCkfa8otpq==", "WOZcHbFdISo8", "F8oWW5RdMSo3W5mqDmoNW7mrttWsFq==", "lmoJWPmoW6K=", "eSoUWOGsoSkxW6pcQsq=", "vheWd28=", "WPi8WQlcIwJcLCoduSkIW4NcMW==", "W5P8v3f4W5q=", "b8o2pCoZW4y=", "W4DZtgi=", "i0ZcN8k6hG==", "WRhcVJpdMCoZ", "lCkWdSk4rG==", "W7NdIJPJxq==", "WQD5W6uHW6O=", "i8ogWRi6W4VcTCkvfdv3W4CqiCoNWRtdPa==", "c8kLpmkgqW==", "ECkCrdG/WQH8", "smo8W5mA", "W4PAW4hdQZe=", "W5VdOZjlWOm=", "hSkKWOz+WQpdImolWQeRWPtdPa==", "cfFcH8k1aW==", "EmkAWQ5+FW==", "A8kTWQBcLSki", "WPNdLmk6fdhcQW==", "l8obn8o2W5dcQYyNW58=", "sCkGwIii", "sGVcL8kwW74=", "CmoEW4qQmG==", "W488zq==", "WOarfCkkW43dKgRdHSoGsKK=", "lhFdLq==", "kCktWOHtWRe=", "rv0TguC7vwe=", "nx/dImo2W5bgiCoYxq==", "W4f3W4BdRJq=", "WRRcP0BdL8or", "n1ddJmo8W7y=", "WQnRW7RcM8o6", "W4pcTSodgbu=", "sCoZW5qkz8koWPBcO3uIW5y=", "v8kXfSoUaqDtgSoW", "WRGimSkuW5G=", "pSoxWQuuW4JcVSkwaYHXW4CqaCo3", "hfnzeCoE"];
n = c,
e = 458,
function (t) {
for (; --t;)
n.push(n.shift())
}(++e);
var W = function t(n, r) {
var e = c[n -= 0];
void 0 === t.GMJOxm && (t.CPxjpy = function (t, n) {
for (var r = [], e = 0, o = void 0, a = "", i = "", u = 0, c = (t = function (t) {
for (var n, r, e = String(t).replace(/=+$/, ""), o = "", a = 0, i = 0; r = e.charAt(i++); ~r && (n = a % 4 ? 64 * n + r : r,
a++ % 4) ? o += String.fromCharCode(255 & n >> (-2 * a & 6)) : 0)
r = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=".indexOf(r);
return o
}(t)).length; u < c; u++)
i += "%" + ("00" + t.charCodeAt(u).toString(16)).slice(-2);
t = decodeURIComponent(i);
var W = void 0;
for (W = 0; W < 256; W++)
r[W] = W;
for (W = 0; W < 256; W++)
e = (e + r[W] + n.charCodeAt(W % n.length)) % 256,
o = r[W],
r[W] = r[e],
r[e] = o;
W = 0,
e = 0;
for (var d = 0; d < t.length; d++)
e = (e + r[W = (W + 1) % 256]) % 256,
o = r[W],
r[W] = r[e],
r[e] = o,
a += String.fromCharCode(t.charCodeAt(d) ^ r[(r[W] + r[e]) % 256]);
return a
}
,
t.hpBrye = {},
t.GMJOxm = !0);
var o = t.hpBrye[n];
return void 0 === o ? (void 0 === t.HWFFId && (t.HWFFId = !0),
e = t.CPxjpy(e, r),
t.hpBrye[n] = e) : e = o,
e
}
return W(arg1, arg2)
} function find_path_reference(scope, txt) {
if (!scope.referencePaths) return;
for (let i = 0; i < scope.referencePaths.length; i++) {
const ref = scope.referencePaths[i];
const varPath = ref.parentPath;
const propPath = varPath.get("property")
if (varPath.key == "left" && t.isLiteral(propPath.node) && propPath.node.value == txt) {
// if(txt=="YIUXn")debugger
return varPath.parentPath.get("right")
}
}
} //还原字符串
traverse(ast, {
CallExpression(path) {
const node = path.node;
if (node.arguments.length == 2 && node.arguments[0].type == "StringLiteral" && node.arguments[1].type == "StringLiteral") {
try {
//解密
const val = encode2(...path.node.arguments.map(x => x.value))
if (!val) {
console.log("跳过")
return;
}
// console.log(path.toString(), val)
path.replaceWith(t.stringLiteral(val))
//结束当前函数递归
// path.skip();
} catch (e) {
console.log(e)
}
}
}
}) //替换表达式
function rpc_reg_fn(basePath, rpsPath) {
const yargs = basePath.node.arguments;
if(!yargs || yargs.filter(x=>t.isFunction(x)).length){
return;
}
//值是方法
if (rpsPath.node.type == "FunctionExpression") {
//参数名
const args = {};
rpsPath.get("params").forEach((x, i) => {
args[x.node.name] = yargs[i]
})
//获取表达式
const temp_node = t.cloneNode(rpsPath.get("body.body.0.argument").node, true);
if (!temp_node) {
return;
}
traverse(temp_node, {
Identifier(path) {
const rg = args[path.node.name];
if (!rg) {
return;
}
try {
path.replaceWith(t.cloneNode(rg, true))
path.skip();
} catch (e) {
console.log(basePath,rpsPath)
debugger
}
}
}, {
noScope: true
})
try {
basePath.replaceWith(temp_node);
} catch (e) {
// console.log(e, basePath.toString())
}
} else if (t.isLiteral(rpsPath.node)) {
//固定内容
try {
basePath.replaceWith(t.stringLiteral(rpsPath.node.value))
} catch (e) {
// debugger
}
} } /* //还原函数basePath
traverse(ast, {
MemberExpression(path) {
let prop = path.get("property");
if (prop.type != "StringLiteral" || path.key == "left") {
//不符合格式
return;
}
let rpPath = path;
const basePath = path.parentPath;
//查找变量
function deep(path, keyPath) {
const objBind = get_scope_binding(path);
if (!objBind) return;
const initPath = objBind.path.get("init")
if (objBind.kind == "var" && initPath.type == "Identifier") {
//赋值
return deep(initPath, keyPath)
}
//返回
const rpsPath = find_path_reference(objBind, keyPath.node.value);
if (!rpsPath) {
return;
}
if (basePath.node.type == "CallExpression") {
rpPath = basePath;
}
rpc_reg_fn(rpPath, rpsPath);
//参数对应
// keyPath.replaceWith(rpsPath.node.__clone()) // console.log(rpsPath)
}
deep(path, path.get("property"))
// path.skip();
}
}) //恢复字符串
traverse(ast, {
Identifier(path) {
if (!(["init", "property"].includes(path.key))) {
return;
}
if (path.node.name == "k") {
// debugger
}
//执行
const evl = path.evaluate();
if (!evl || !evl.value) {
return;
}
path.replaceWith(t.valueToNode(evl.value));
path.skip();
}
})
*/ /*
// 删除无用r['xxx']=
traverse(ast, {
MemberExpression(path) {
if (path.get("property").type != "StringLiteral" || path.parentPath.type != "AssignmentExpression") {
return;
}
// const key=path.get("property").node.value;
const binding = get_scope_binding(path);
if (!binding) {
return;
}
//获取
const ls = binding.referencePaths.filter(x => x.parentPath.key != "left")
if (ls.length < 2) {
path.parentPath.remove();
} }
}) //删除没用的var e = r //转源码,必须转一下否则数据不刷新
let deobfCode = generator(ast, { comments: false }).code;
//在转ast
ast = parse(deobfCode)
traverse(ast, {
"VariableDeclarator|FunctionDeclaration"(path) {
const { node, scope } = path;
const bind = scope.getBinding(node.id.name);
if (!bind) return;
const { constant, referenced, referencePaths } = bind;
// If the variable is constant and never referenced, remove it.
// if(path.toString()=="e = {}")debugger
console.log(path.toString(), referencePaths.length)
if (constant && !referenced) {
path.remove();
path.skip()
}
}
}) // 数组转点优化
traverse(ast, {
MemberExpression(path) {
const prop = path.get("property");
if (prop.node.type == "StringLiteral") {
path.replaceWith(t.memberExpression(t.cloneNode(path.node.object, true), t.identifier(prop.node.value)))
}
}, // StringLiteral(path) {
// if (!(path.key == "property" && /^[a-zA-Z\d]+$/.test(path.node.value))) {
// return;
// }
// path.parentPath.replaceWith(t.memberExpression(t.cloneNode(path.parent.object, true), t.identifier(path.node.value)))
// }
}) traverse(ast, {
EmptyStatement(path) {
path.remove();
},
}) */ //美化代码
deobfCode = generator(ast, { comments: false }).code;
deobfCode = beautify(deobfCode, {
indent_size: 2,
space_in_empty_paren: true,
}); fs.writeFileSync("pdd_encode.js", deobfCode)

修复

以下是使用nodejs的修复版本,放到文件最上面

const window = Object.assign(global, {
outerHeight: 100,
outerWidth: 100,
location: {
href: "https://www.temu.com",
port:""
},
document: {
referrer: "",
cookie: ""
},
screen: {
availWidth: 2560,
availHeight: 1400
},
navigator: {
userAgent:"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/110.0.0.0 Safari/537.36 Edg/110.0.1587.57"
}
});

核心算法

function (t, n, r) {
"use strict";
(function init(t) {
var a = r(5);
// var a = {};
var i = r(3);
// var i = {};
//--------
var U = 0,
$ = [],
E = void 0,
Y = void 0,
X = 0,
tt = function () { },
nt = window;
var rt = window.navigator;
//"ontouchstart" in nt.document 移动端还是PC端
var it = false;
//("undefined" == typeof process ? "undefined" : typeof process) === "undefined" ? null : process; //浏览器环境直接为null
var ut = null; var dt = function () {
var a = [];
// if (typeof window.outerHeight !== "number" || typeof window.outerWidth !== "number") {
// a[0] = 1
// } else {
// a[0] = window.outerHeight < 1 || window.outerWidth < 1 ? 1 : 0
// }
a[0] = 0;
//typeof nt.callPhantom !== "undefined" || typeof nt._phantom !== "undefined" ? 1 : 0;
a[1] = 0;
//typeof nt.Buffer === "undefined" ? 0 : 1;
a[2] = 0;
//typeof nt.emit === "undefined" ? 0 : 1;
a[3] = 0;
//typeof nt.spawn === "undefined" ? 0 : 1;
a[4] = 0;
//rt.webdriver === !0 ? 1 : 0;
a[5] = 0;
//typeof nt.domAutomation === "undefined" && typeof nt.domAutomationController === "undefined" ? 0 : 1;
a[6] = 0; // try {
// typeof Function.prototype.bind == "undefined" && (a[7] = 1);
// Function.prototype.bind.toString().replace(/bind/g, "Error") !== Error.toString() && (a[7] = 1);
// Function.prototype.toString.toString().replace(/toString/g, "Error") !== Error.toString() && (a[7] = 1);
// } catch (t) {
// a[7] = 0;
// }
a[7] = 0;
//rt.plugins && rt.plugins.length === 0 ? 1 : 0;
a[8] = 0;
// rt.languages === "" ? 1 : 0
a[9] = 0;
//nt.vendor === "Brian Paul" && nt.renderer === "Mesa OffScreen" ? 1 : 0
a[10] = 0;
//nt.Modernizr && !nt.Modernizr.hairline ? 1 : 0
a[11] = 0;
//nt.chrome === void 0 ? 1 : 0;
a[12] = 0;
//"webdriver" in rt ? 1 : 0;
a[13] = 0;
// window.navigator.hasOwnProperty("webdriver") ? 1 : 0;
a[14] = 0;
//window.history.back && window.history.back.toString().indexOf("ipcRenderer") > -1 ? 1 : 0;
a[15] = 0;
//child_process
a[16] = 0;
//nt.document.getElementById.toString().indexOf("native code") > -1 ? 0 : 1;
a[17] = 0;
return a;
}; function xt(t, n, r) {
var i = {},
u = n || nt.event;
if (u.timeStamp > 0) {
if (t.preTimeStamp && u.timeStamp - t.preTimeStamp < 15) {
return;
}
t.preTimeStamp = u.timeStamp;
}
var c = {};
c.elementId = u.target.id || "";
c.timestamp = Date.now() - U;
var W = u.changedTouches;
if (W && W.length) {
c.clientX = W[0].clientX, c.clientY = W[0].clientY
} else {
c.clientX = u.clientX, c.clientY = u.clientY
}
if ((void 0 === r ? "undefined" : typeof r) !== "undefined") {
t.data[r].push(c);
if (t.data[r].length > t.maxLength) {
t.data[r].shift()
}
} else {
t.data.push(c);
if (t.data.length > t.maxLength) {
t.data.shift()
}
} }
//cookie中获取
function ft(t) {
var o = {};
return (nt.document.cookie ? nt.document.cookie.split("; ") : []).some(function (r) {
var i = r.split("="),
u = i.slice(1).join("="),
c = i[0].replace(/(%[0-9A-Z]{2})+/g, decodeURIComponent);
return u = u.replace(/(%[0-9A-Z]{2})+/g, decodeURIComponent), o[c] = u, t === c
}), t ? o[t] || "" : o;
} //events
function st(t) {
if (!t || !t.length) {
return []
};
var n = [];
t.forEach(function (t) {
var r = i.sc(t.elementId);
n = n.concat(i.va(t.clientX),
i.va(t.clientY),
i.va(t.timestamp),
i.va(r.length),
r
);
})
return n;
} var lt = {};
lt.data = [];
lt.maxLength = 1;
lt.init = function () {
var o = i.gos(vt, it ? "touchStartEventData" : "MouseDownEventData");
this.c = i.pbc("clickEventData" + o);
};
lt.handleEvent = function (t) {
xt(this, t)
};
lt.packN = function () {
if (this.data.length === 0)
return [];
var e = [].concat(i.ek(4, this.data), st(this.data));
return e.concat(this.c);
}; var vt = {};
vt.data = [];
vt.maxLength = 1;
vt.handleEvent = function (t) {
xt(this, t)
};
vt.packN = function () {
if (this.data.length === 0)
return [];
return [].concat(i.ek(it ? 1 : 2, this.data), st(this.data));
};
var _t = {};
_t.data = [];
_t.maxLength = 30;
_t.handleEvent = function (t) {
if (it) {
if (!this.data[X]) {
this.data[X] = []
}
xt(this, t, X)
} else {
xt(this, t);
}
};
_t.packN = function () {
var e = [];
if (it) {
e = this.data.filter(function (t) {
return t && t.length > 0;
});
for (var o = 0, a = e.length - 1; a >= 0; a--) {
o += e[a].length;
var u = o - this.maxLength;
if (u > 0 && (e[a] = e[a].slice(u)), u >= 0) {
e = e.slice(a);
break;
}
}
} else {
e = this.data
};
if (e.length === 0) {
return [];
}
var c = [].concat(i.ek(it ? 24 : 25, e));
if (it) {
e.forEach(function (n) {
c = (c = c.concat(i.va(n.length))).concat(st(n));
})
} else {
c = c.concat(st(this.data))
}
return c;
}; //浏览器滚动条高度 documentElement.scrollTop document.body.scrollTop
var pt = {};
pt.data = [];
pt.maxLength = 3;
pt.handleEvent = function () {
var e = {},
o = nt.document.documentElement.scrollTop || nt.document.body.scrollTop;
if (o > 0) {
e.scrollTop = o;
e.timestamp = Date.now() - U;
this.data.push(e);
if (this.data.length > this.maxLength) {
this.data.shift()
}
}
};
pt.packN = function () {
if (it && this.handleEvent(), !this.data.length) {
return [];
}
var t = [].concat(i.ek(3, this.data));
this.data.forEach(function (n) {
t = t.concat(i.va(n.scrollTop), i.va(n.timestamp));
})
return t;
};
//路由方面 location.href location.port
var gt = {};
gt.init = function () {
this.data = {};
this.data.href = nt.location.href;
this.data.port = nt.location.port;
this.c = i.pbc("locationInfo");
};
gt.packN = function () {
var e = i.ek(7);
var u = void 0 === this.data.href ? "" : this.data.href;
var W = void 0 === this.data.port ? "" : this.data.port;
if (!u && !W) {
return [].concat(e, this.c);
}
var x = u.length > 128 ? u.slice(0, 128) : u;
var f = i.sc(x);
return [].concat(e, i.va(f.length), f, i.va(W.length), W.length === 0 ? [] : i.sc(this.data.port), this.c);
};
//设备宽度和高度 screen.availWidth screen.availHeigh
var wt = {};
wt.init = function () {
this.data = {};
this.data.availWidth = nt.screen.availWidth;
this.data.availHeight = nt.screen.availHeight;
};
wt.packN = function () {
return [].concat(i.ek(8), i.va(this.data.availWidth), i.va(this.data.availHeight));
};
//随机数
var Rt = {};
Rt.init = function () {
this.data = nt.parseInt(Math.random() * (Math.pow(2, 52) + 1).toString(), 10)
+ nt.parseInt(Math.random() * (Math.pow(2, 30) + 1).toString(), 10)
+ "-" + E;
};
Rt.packN = function () {
return this.init(), [].concat(i.ek(9, this.data));
};
//document
var Ot = {};
Ot.data = [];
Ot.init = function () {
var n = {};
n.CjCho = function (t) {
return t();
};
this.data = dt();
};
Ot.packN = function () {
try {
this.data[18] = Object.keys(nt.document)
.some(function (n) {
return nt.document[n] && nt.document[n].cache_;
}) ? 1 : 0;
} catch (t) {
this.data[18] = 0;
}
for (var e = 0, o = 0; o < this.data.length; o++) {
e += this.data[o] << o;
}
return [].concat(i.ek(10), i.va(e));
};
//location.href
var Pt = {};
Pt.init = function () {
this.data = i.pbc(nt.location.href ? nt.location.href : "");
};
Pt.packN = function () {
return this.data.toString().length ? [].concat(i.ek(11), this.data) : [];
};
// window.DeviceOrientationEvent
var zt = {};
zt.init = function () {
this.data = nt.DeviceOrientationEvent ? "y" : "n";
};
zt.packN = function () {
return [].concat(i.ek(12, this.data));
};
//window.DeviceMotionEvent
var Jt = {};
Jt.init = function () {
this.data = nt.DeviceMotionEvent ? "y" : "n";
};
Jt.packN = function () {
return [].concat(i.ek(13, this.data));
};
//当前时间减去服务器更新时间
var Bt = {};
Bt.init = function () {
this.data = Date.now() - Y;
};
Bt.packN = function () {
return this.init(), [].concat(i.ek(14, this.data));
};
//userAgent
var At = {};
At.init = function () {
this.data = rt.userAgent;
};
At.packN = function () {
return this.data.length ? [].concat(i.ek(15, this.data)) : [];
};
var u = r(14)
var Vt = {};
Vt.init = function () {
this.data = u();
};
Vt.packN = function () {
var t = this;
var o = [],
a = {};
a.nano_cookie_fp = 16;
a.nano_storage_fp = 17;
Object.keys(this.data).forEach(function (n) {
var r = [].concat(t.data[n] ? i.ek(a[n], t.data[n]) : []);
o.push(r);
})
return o;
};
//document.referrer
var jt = {};
jt.init = function () {
var e = nt.document.referrer || "",
o = e.indexOf("?");
this.data = e.slice(0, o > -1 ? o : e.length);
};
jt.packN = function () {
return this.data.length ? [].concat(i.ek(18, this.data)) : [];
};
//pdd_user_id
var Nt = {};
Nt.init = function () {
this.data = ft("pdd_user_id");
};
Nt.packN = function () {
return this.data.length ? [].concat(i.ek(19, this.data)) : [];
};
//api_uid
var Tt = {};
Tt.init = function () {
this.data = ft("api_uid");
};
Tt.packN = function () {
return this.data.length ? [].concat(i.ek(20, this.data)) : [];
};
//
var Ut = {};
Ut.data = 0
Ut.packN = function () {
return [].concat(i.ek(21, this.data));
};
//
var Yt = {};
Yt.init = function (t) {
this.data = t;
};
Yt.packN = function () {
return [].concat(i.ek(22, this.data));
};
//pdd_vds
var $t = {};
$t.init = function () {
this.data = ft("pdd_vds");
};
$t.packN = function () {
return this.data.length ? [].concat(i.ek(23, this.data)) : [];
}; //检测浏览器
var nn = {};
nn.init = function () {
var e = [
nt.opr || nt.opera || rt.userAgent && " OPR/" > -1 ? 1 : 0,
("undefined" == typeof InstallTrigger ? "undefined" : typeof InstallTrigger) !== "undefined" ? 1 : 0,
/constructor/i.test(nt.HTMLElement) || (nt.safari && nt.safari.pushNotification || "").toString() === "[object SafariRemoteNotification]" ? 1 : 0,
nt.document && nt.document.documentMode || nt.StyleMedia || nt.navigate ? 1 : 0,
nt.chrome && (nt.chrome.webstore || nt.chrome.runtime) ? 1 : 0
];
for (var i = 0, a = 0; i < e.length; i++) {
a += e[i] << i;
}
this.data = a;
};
nn.packN = function () {
return [].concat(i.ek(26), i.va(this.data));
}; function rn(t) {//Tt nn lt
[wt, Ot, Pt, zt, Jt, At, Vt, jt, Nt, Tt, Yt, $t, gt, nn, lt].forEach(function (n) {
n.init(t);
});
}
//鼠标按下和鼠标移动
function en() {
return;
//添加移动日志
var e = "mousedown",
o = "mousemove";
it && (e = "touchstart", o = "touchmove");
nt.document.addEventListener(e, vt, !0);
nt.document.addEventListener(o, _t, !0);
nt.document.addEventListener("click", lt, !0);
!it && nt.document.addEventListener("scroll", pt, !0);
} function on() {
X = 0;
[vt, _t, lt, pt].forEach(function (t) {
t.data = [];
});
} function an() {
var e = i.pbc(dt.toString() + un.toString());
$ = e.map(function (t) {
return String.fromCharCode(t);
});
} function un() {
if (!nt) return "";
var t = [];
var u = t.concat.apply(
t,
[
vt.packN(),
_t.packN(),
lt.packN(),
pt.packN(),
gt.packN(),
wt.packN(),
Rt.packN(),
Ot.packN(),
Pt.packN(),
zt.packN(),
Jt.packN(),
Bt.packN(),
At.packN()
].concat(
(function (t) {
if (Array.isArray(t)) {
for (var n = 0, r = Array(t.length); n < t.length; n++) r[n] = t[n];
return r;
}
return Array.from(t);
})(Vt.packN())
, [
jt.packN(),
Nt.packN(),
Tt.packN(),
Ut.packN(),
Yt.packN(),
$t.packN(),
nn.packN()
]
)
);
//延迟加载
setTimeout(function () {
on();
}, 0);
var c = u.length.toString(2).split("");
for (var W = 0; c.length < 16; W += 1) {
c.unshift("0");
}
c = c.join("");
var x = [];
if (u.length === 0) {
x.push(0, 0)
} else if (u.length > 0 && u.length <= (1 << 8) - 1) {
x.push(0, u.length)
} else if (u.length > (1 << 8) - 1) {
x.push(
nt.parseInt(c.substring(0, 8), 2),
nt.parseInt(c.substring(8, 16), 2)
);
}
u = [].concat([3], [1, 0, 0], x, u);
var f = a.deflate(u);
var s = [].map.call(f, function (t) {
return String.fromCharCode(t);
});
return "0aq" + i.encode(s.join("") + $.join(""), i.budget);
} function cn(t = {}) {
var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {};
if ((void 0 === nt ? "undefined" : typeof nt) !== "undefined") {
//更新服务器时间
this.updateServerTime(t.serverTime || 879609302220);
//当前时间
U = Date.now();
//初始化
rn(U, nt);
//
en();
an();
}
} cn.prototype.updateServerTime = function (t) {
Y = Date.now();
E = t;
};
cn.prototype.init = tt;
cn.prototype.clearCache = tt;
cn.prototype.messagePack = function () {
return Ut.data++, un();
};
cn.prototype.messagePackSync = function () {
return new Promise(function (n) {
Ut.data++, n(un());
});
};
//这里如果是node环境就添加 swallow
if (ut && ut.env && ut.env.BROWSER) {
cn.prototype.swallow = function (t) {
switch (t.type) {
case "click":
lt.handleEvent(t);
break;
case "touchstart":
case "mousedown":
vt.handleEvent(t);
break;
case "touchmove":
case "mousemove":
_t.handleEvent(t);
}
}
}
t.exports = cn;
// return cn;
}).call(this, r(1)(t))
}

拼多多anti-content核心算法完全解密+修复的更多相关文章

  1. PHP拼多多模式,砍价免费拿商品算法

      我12年开始做网站,对拼多多关注两三年了,一直对他们的拉新模式很感兴趣,下面我对砍价送礼品的算法跟大家分享下. 拼多多砍价免费拿商品有几个核心的东西: 1.需要拉新多人给商品,这个是直接在数据库配 ...

  2. 拼多多、饿了么、蚂蚁金服Java面试题大集合

    自己当初找工作时参加过众多一线互联网公司的Java研发面试,这段时间处于寒冬,然而前几天跳槽找工作,两天面了3家,已经拿了两个offer,觉得可以和大家分享下: 下面为拼多多.饿了么.蚂蚁金服.哈啰出 ...

  3. 最新 拼多多java校招面经 (含整理过的面试题大全)

    从6月到10月,经过4个月努力和坚持,自己有幸拿到了网易雷火.京东.去哪儿.拼多多等10家互联网公司的校招Offer,因为某些自身原因最终选择了拼多多.6.7月主要是做系统复习.项目复盘.LeetCo ...

  4. C#类库推荐 拼多多.Net SDK,开源免费!

    背景介绍 近两年拼多多的发展非常迅速,即便口碑一般,也没有网页端,奈何我们已经全面小康,6亿月收入1000以下,9亿月收入2000以下,所以因为价格原因使用拼多多的用户也越来越多了.同样的,拼多多也开 ...

  5. Java对接拼多多开放平台API(加密上云等全流程)

    前言 本文为[小小赫下士 blog]原创,搬运请保留本段,或请在醒目位置设置原文地址和原作者. 作者:小小赫下士 原文地址:Java对接拼多多开放平台API(加密上云等全流程) 本文章为企业ERP(I ...

  6. SQL关键字转换大写核心算法实现

    1 不跟你多废话 上代码! /// <summary> /// SQL关键字转换器 /// </summary> public class SqlConverter : IKe ...

  7. 9、ABPZero系列教程之拼多多卖家工具 拼团提醒类库封装

    本篇开始正式做功能,我在开发拼团提醒之前,拼多多并没有放出拼团人数不足就提醒卖家的功能. 有这个想法主要来源于朋友的抱怨,我想这应该是大部分卖家的心声吧. 经过分析,拿到了几个api,不要问我api怎 ...

  8. 12、ABPZero系列教程之拼多多卖家工具 拼团提醒功能登录拼多多实现

    上篇文章已经完成了整个拼多多拼团提醒功能,本篇继续完成拼多多帐号登录,拼多多帐号登录的目的是为了获取拼团商品的SKU和订单号,便于商家备货. 以下是拼多多官方的后台登录,要实现的功能并不是直接在这里登 ...

  9. C#实现通过拼多多分享微信公众号实现查询优惠券、佣金比率

    主要实现功能:关注公众号的用户发送拼多多商品链接,后台程序通过链接查找商品优惠券或返佣情况. 说明:使用了niltor 封装的拼多多接口 github地址 ,但是需要注意可能会存在返回模型无法正确解析 ...

  10. 拼多多后台开发面试真题:如何用Redis统计独立用户访问量

    众所周至,拼多多的待遇也是高的可怕,在挖人方面也是不遗余力,对于一些工作3年的开发,稍微优秀一点的,都给到30K的Offer,当然,拼多多加班也是出名的,一周上6天班是常态,每天工作时间基本都是超过1 ...

随机推荐

  1. [whk] 解三元一次方程

    注:本篇运用大量 Katex ,如果炸了可能是运存不够也可能还要加载一会,重进几次即可.(都2202了,居然还存在我这种会炸公式的笔记本) 前言 写这篇随笔的由来是今天学习了: 不共线三点确定二次函数 ...

  2. Http请求接口

    方法一.使用springboot框间自带的Http的工具类RestTemplate. RestTemplate为springframework中自带的处理Http的工具类. 具体用法 请求的接口 @R ...

  3. Zookeeper详解(03) - zookeeper的使用

    Zookeeper详解(03) - zookeeper的使用 ZK客户端命令行操作 命令基本语法 help:显示所有操作命令 ls path:使用 ls 命令来查看当前znode的子节点 -w 监听子 ...

  4. UVA12412 A Typical Homework (a.k.a Shi Xiong Bang Bang Mang)

    简要题意 这道题就是要你维护一个学生成绩管理系统. 代码实现 程序设计 为了方便输出,我们定义了 println 函数: void println(string s){ cout<<s&l ...

  5. 【译】15 个有用的 JavaScript 技巧

    原文地址:https://javascript.plainenglish.io/15-useful-javascript-tips-814eeba1f4fd 1)数字分隔符 为了提高数字的可读性,可以 ...

  6. C#/VB.NET 在Excel中添加水印

    在工作中,为了防止文件被随意复制和传播,通常我们会选择在文档中添加水印来对文件进行有效保护.文字水印是比较常见的一种保护手段,它可以有效防止文件被任意复制和随意打印传播.不过,Excel默认并没有水印 ...

  7. Performance API不完全使用指北

    本教程解释了如何使用Performance API来记录真实用户访问你的应用程序的统计数据. 使用浏览器的DevTools来评估web应用性能是很有用的,但要复现现实世界的使用情况并不容易.因为人们在 ...

  8. vue学习笔记(一)---- vue指令(在vue中使用样式的方式)

    认真学习,认真记录,每天都要有进步呀!!! 加油叭!!! 一.在vue中使用样式的方式: 1. 直接传递一个数组,注意: 这里的 class 需要使用 v-bind 做数据绑定 <style&g ...

  9. 用Java写一个分布式缓存——RESP服务端

    前言 本篇我们将完成一个RESP的socket的服务端,初步完成一个单机版缓存. 另外在其中我们还需要完成命令的动态路由 源码:https://github.com/weloe/Java-Distri ...

  10. composer 安装 laravel指定版本

    composer 安装 laravel指定版本 $ composer create-project --prefer-dist laravel/laravel notelog '7.*'