爬虫逆向实战(32)-某号店登录(RSA、补环境、混淆)

一、数据接口分析

主页地址:某号店

1、抓包

通过抓包可以发现登录接口是/publicPassport/login.do
爬虫逆向实战(32)-某号店登录(RSA、补环境、混淆)_第1张图片

2、判断是否有加密参数

  1. 请求参数是否加密?
    通过查看“载荷”模块可以发现,有三个加密参数:usernamepasswordcaptchaToken
    爬虫逆向实战(32)-某号店登录(RSA、补环境、混淆)_第2张图片
  2. 请求头是否加密?
  3. 响应是否加密?
  4. cookie是否加密?

二、加密位置定位

1、看启动器

查看启动器发现里面调用堆栈中有一个double_submit,点进去查看
爬虫逆向实战(32)-某号店登录(RSA、补环境、混淆)_第3张图片
可以看出此处是发送ajax请求的位置,并且三个加密参数都是在此处赋值
爬虫逆向实战(32)-某号店登录(RSA、补环境、混淆)_第4张图片
在此处打上断点,发现可以断住,所以此处就是加密位置。

三、扣js代码

usernamepassword是使用的标准RSA加密算法,所以我们可以不用扣,直接使用标准算法即可。但是captchaToken是使用window.jab.getData()生成的,进去这个方法后,可以发现是在一个混淆的文件中,所以我们需要将文件进行解混淆,解混淆之后再使用本地替换,将这个js文件替换为解混淆的。扣代码的时候,发现需要扣的代码还是挺多的,所以我们可以将整个文件全扣,然后补环境即可。
JavaScript源码:

function get_null_func(name) {
    return function (arg) {
        console.log('null_func --> ', name, ' --> ', arg)
    }
}

window = global

function getElementsByTagName(arg) {
    switch (arg){
        case 'head':
            return [{
                appendChild: get_null_func('getElementsByTagName --> appendChild')
            }]
    }
    console.log('getElementsByTagName --> ', arg)
}

function createElement(arg) {
    switch (arg){
        case 'script':
            return {}
    }
    console.log('getElementsByTagName --> ', arg)
}

document = {
    getElementsByTagName: getElementsByTagName,
    createElement: createElement,
    cookie: ''
}

navigator = {
    userAgent:'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36'
}

Image = get_null_func('Image')

function XMLHttpRequest() {
    return {
        open: get_null_func('XMLHttpRequest --> open')
    }
}

setTimeout = get_null_func('setTimeout')

!function (a) {
  window["Murmur"] = function (c, e, b, d) {
    var f = function () {};

    f["prototype"] = {
      "x64Add": function (j, k) {
        j = [j[0] >>> 16, 65535 & j[0], j[1] >>> 16, 65535 & j[1]];
        k = [k[0] >>> 16, 65535 & k[0], k[1] >>> 16, 65535 & k[1]];
        var g = [0, 0, 0, 0];
        g[3] += j[3] + k[3];
        g[2] += g[3] >>> 16;
        g[3] &= 65535;
        g[2] += j[2] + k[2];
        g[1] += g[2] >>> 16;
        g[2] &= 65535;
        g[1] += j[1] + k[1];
        g[0] += g[1] >>> 16;
        g[1] &= 65535;
        g[0] += j[0] + k[0];
        g[0] &= 65535;
        return [g[0] << 16 | g[1], g[2] << 16 | g[3]];
      },
      "x64Multiply": function (j, k) {
        j = [j[0] >>> 16, 65535 & j[0], j[1] >>> 16, 65535 & j[1]];
        k = [k[0] >>> 16, 65535 & k[0], k[1] >>> 16, 65535 & k[1]];
        var g = [0, 0, 0, 0];
        g[3] += j[3] * k[3];
        g[2] += g[3] >>> 16;
        g[3] &= 65535;
        g[2] += j[2] * k[3];
        g[1] += g[2] >>> 16;
        g[2] &= 65535;
        g[2] += j[3] * k[2];
        g[1] += g[2] >>> 16;
        g[2] &= 65535;
        g[1] += j[1] * k[3];
        g[0] += g[1] >>> 16;
        g[1] &= 65535;
        g[1] += j[2] * k[2];
        g[0] += g[1] >>> 16;
        g[1] &= 65535;
        g[1] += j[3] * k[1];
        g[0] += g[1] >>> 16;
        g[1] &= 65535;
        g[0] += j[0] * k[3] + j[1] * k[2] + j[2] * k[1] + j[3] * k[0];
        g[0] &= 65535;
        return [g[0] << 16 | g[1], g[2] << 16 | g[3]];
      },
      "x64Rotl": function (g, i) {
        return 32 == (i %= 64) ? [g[1], g[0]] : i < 32 ? [g[0] << i | g[1] >>> 32 - i, g[1] << i | g[0] >>> 32 - i] : (i -= 32, [g[1] << i | g[0] >>> 32 - i, g[0] << i | g[1] >>> 32 - i]);
      },
      "x64LeftShift": function (g, i) {
        return 0 == (i %= 64) ? g : i < 32 ? [g[0] << i | g[1] >>> 32 - i, g[1] << i] : [g[1] << i - 32, 0];
      },
      "x64Xor": function (g, i) {
        return [g[0] ^ i[0], g[1] ^ i[1]];
      },
      "x64Fmix": function (g) {
        g = this["x64Xor"](g, [0, g[0] >>> 1]);
        g = this["x64Multiply"](g, [4283543511, 3981806797]);
        g = this["x64Xor"](g, [0, g[0] >>> 1]);
        g = this["x64Multiply"](g, [3301882366, 444984403]);
        return g = this["x64Xor"](g, [0, g[0] >>> 1]);
      },
      "x64hash128": function (v, l) {
        v = v || "";
        l = l || 0;

        for (var k = v["length"] % 16, w = v["length"] - k, g = [0, l], j = [0, l], m = [0, 0], u = [0, 0], p = [2277735313, 289559509], q = [1291169091, 658871167], n = 0; n < w; n += 16) {
          m = [255 & v["charCodeAt"](n + 4) | (255 & v["charCodeAt"](n + 5)) << 8 | (255 & v["charCodeAt"](n + 6)) << 16 | (255 & v["charCodeAt"](n + 7)) << 24, 255 & v["charCodeAt"](n) | (255 & v["charCodeAt"](n + 1)) << 8 | (255 & v["charCodeAt"](n + 2)) << 16 | (255 & v["charCodeAt"](n + 3)) << 24];
          u = [255 & v["charCodeAt"](n + 12) | (255 & v["charCodeAt"](n + 13)) << 8 | (255 & v["charCodeAt"](n + 14)) << 16 | (255 & v["charCodeAt"](n + 15)) << 24, 255 & v["charCodeAt"](n + 8) | (255 & v["charCodeAt"](n + 9)) << 8 | (255 & v["charCodeAt"](n + 10)) << 16 | (255 & v["charCodeAt"](n + 11)) << 24];
          m = this["x64Multiply"](m, p);
          m = this["x64Rotl"](m, 31);
          m = this["x64Multiply"](m, q);
          g = this["x64Xor"](g, m);
          g = this["x64Rotl"](g, 27);
          g = this["x64Add"](g, j);
          g = this["x64Add"](this["x64Multiply"](g, [0, 5]), [0, 1390208809]);
          u = this["x64Multiply"](u, q);
          u = this["x64Rotl"](u, 33);
          u = this["x64Multiply"](u, p);
          j = this["x64Xor"](j, u);
          j = this["x64Rotl"](j, 31);
          j = this["x64Add"](j, g);
          j = this["x64Add"](this["x64Multiply"](j, [0, 5]), [0, 944331445]);
        }

        switch (m = [0, 0], u = [0, 0], k) {
          case 15:
            u = this["x64Xor"](u, this["x64LeftShift"]([0, v["charCodeAt"](n + 14)], 48));

          case 14:
            u = this["x64Xor"](u, this["x64LeftShift"]([0, v["charCodeAt"](n + 13)], 40));

          case 13:
            u = this["x64Xor"](u, this["x64LeftShift"]([0, v["charCodeAt"](n + 12)], 32));

          case 12:
            u = this["x64Xor"](u, this["x64LeftShift"]([0, v["charCodeAt"](n + 11)], 24));

          case 11:
            u = this["x64Xor"](u, this["x64LeftShift"]([0, v["charCodeAt"](n + 10)], 16));

          case 10:
            u = this["x64Xor"](u, this["x64LeftShift"]([0, v["charCodeAt"](n + 9)], 8));

          case 9:
            u = this["x64Xor"](u, [0, v["charCodeAt"](n + 8)]);
            u = this["x64Multiply"](u, q);
            u = this["x64Rotl"](u, 33);
            u = this["x64Multiply"](u, p);
            j = this["x64Xor"](j, u);

          case 8:
            m = this["x64Xor"](m, this["x64LeftShift"]([0, v["charCodeAt"](n + 7)], 56));

          case 7:
            m = this["x64Xor"](m, this["x64LeftShift"]([0, v["charCodeAt"](n + 6)], 48));

          case 6:
            m = this["x64Xor"](m, this["x64LeftShift"]([0, v["charCodeAt"](n + 5)], 40));

          case 5:
            m = this["x64Xor"](m, this["x64LeftShift"]([0, v["charCodeAt"](n + 4)], 32));

          case 4:
            m = this["x64Xor"](m, this["x64LeftShift"]([0, v["charCodeAt"](n + 3)], 24));

          case 3:
            m = this["x64Xor"](m, this["x64LeftShift"]([0, v["charCodeAt"](n + 2)], 16));

          case 2:
            m = this["x64Xor"](m, this["x64LeftShift"]([0, v["charCodeAt"](n + 1)], 8));

          case 1:
            m = this["x64Xor"](m, [0, v["charCodeAt"](n)]);
            m = this["x64Multiply"](m, p);
            m = this["x64Rotl"](m, 31);
            m = this["x64Multiply"](m, q);
            g = this["x64Xor"](g, m);
        }

        g = this["x64Xor"](g, [0, v["length"]]);
        j = this["x64Xor"](j, [0, v["length"]]);
        g = this["x64Add"](g, j);
        j = this["x64Add"](j, g);
        g = this["x64Fmix"](g);
        j = this["x64Fmix"](j);
        g = this["x64Add"](g, j);
        j = this["x64Add"](j, g);
        return ("00000000" + (g[0] >>> 0)["toString"](16))["slice"](-8) + ("00000000" + (g[1] >>> 0)["toString"](16))["slice"](-8) + ("00000000" + (j[0] >>> 0)["toString"](16))["slice"](-8) + ("00000000" + (j[1] >>> 0)["toString"](16))["slice"](-8);
      },
      "hash": function (g) {
        return this["x64hash128"](g, 31);
      }
    };
    return new f();
  }(window, document, navigator, setTimeout);
}();
!function () {
  (function () {
    function d(f, g, h) {
      function k(p, q) {
        if (!g[p]) {
          if (!f[p]) {
            var y = typeof require == "function" && require;

            if (!q && y) {
              return y(p, true);
            }

            if (l) {
              return l(p, true);
            }

            var x = new Error("Cannot find module '" + p + "'");
            throw x["code"] = "MODULE_NOT_FOUND", x;
          }

          var z = g[p] = {
            "exports": {}
          };
          f[p][0]["call"](z["exports"], function (A) {
            var B = f[p][1][A];
            return k(B ? B : A);
          }, z, z["exports"], d, f, g, h);
        }

        return g[p]["exports"];
      }

      var l = typeof require == "function" && require;

      for (var m = 0; m < h["length"]; m++) {
        k(h[m]);
      }

      return k;
    }

    return d;
  })()({
    1: [function (c, d, e) {
      (function (g) {
        d["exports"] = g(window, document, navigator, setTimeout, clearTimeout, encodeURIComponent, Object, Date, Array, String, Image, RegExp, Math, XMLHttpRequest, parseInt);
      })(function (g, h, i, j, k, l, m, n, o, p, q, r, s, t, u) {
        "use strict";

        var w = c(7);
        var x = w["ism"]();
        var y = g;
        var z = h;
        var B = [];
        var C = [];
        var D = 0;
        var E = [];
        var F = {};
        var G = "";
        var H = new n()["getTime"]();
        var I = {};
        var J = {};
        var K = "";
        var L = 0;
        var M = [];

        var N = function () {};

        o["prototype"]["indexOf"] = o["prototype"]["indexOf"] || function (au) {
          for (var av = 0; av < this["length"]; av++) {
            if (this[av] === au) {
              return av;
            }
          }

          return -1;
        };

        var O = ["click", "mousemove", "keydown", "mouseenter", "mouseleave", "touchstart", "touchmove", "touchend", "touchcancel", "focus", "blur", "mousedown"];
        var P = ["resize", "orientationchange", "mousewheel", "DOMMouseScroll", "scroll"];
        var Q = ["click", "mousedown", "mousemove", "keydown", "touchstart", "touchmove"];
        var R = O["concat"](P);
        var S = 0;
        var T = false;
        var U = 0;
        var V = 0;
        var W = 0;
        var X = [1000, -1000];
        var Y = [1000, -1000];
        var Z = 0;
        var a0 = 0;
        var a1 = false;
        var a2 = [1000, -1000];
        var a3 = [1000, -1000];
        var a4 = [1000, -1000];

        if (g["DeviceOrientationEvent"]) {
          T = true;
          g["addEventListener"]("deviceorientation", function (au) {
            try {
              S++;

              if (au["beta"] == null || au["gamma"] == null) {
                U++;
                return;
              }

              if (au["absolute"]) {
                V++;
              } else {
                W++;
              }

              X = a5(au["beta"], X);
              Y = a5(au["gamma"], Y);
            } catch (ax) {}
          }, true);
        }

        if (g["DeviceMotionEvent"]) {
          a1 = true;
          g["addEventListener"]("devicemotion", function (au) {
            Z++;
            var aA = au["accelerationIncludingGravity"];
            var az = aA["x"];
            var ay = aA["y"];
            var ax = aA["z"];

            if (az == null || ay == null || ax == null) {
              a0++;
              return;
            }

            a2 = a5(az, a2);
            a3 = a5(az, a3);
            a4 = a5(az, a4);
          }, true);
        }

        function a5(au, av) {
          av[0] = s["min"](au, av[0]);
          av[1] = s["max"](au, av[1]);
          return av;
        }

        function a6(au) {
          var av = R["indexOf"](au);
          return av;
        }

        function a7() {
          return u(new n()["getTime"]() - H);
        }

        function a8(au) {
          if (event["touches"] && event["touches"]["length"] > 0) {
            var av = event["touches"][0];
            return u(av["pageX"]) + "," + u(av["pageY"]);
          } else {
            return "";
          }
        }

        function a9(au) {
          if (au["offsetX"] != undefined && au["offsetY"] != undefined) {
            return u(au["offsetX"]) + "," + u(au["offsetY"]);
          }

          return "";
        }

        function aa(au) {
          var av = "";

          try {
            if (au["pageX"] != undefined && au["pageY"] != undefined) {
              av = u(au["pageX"]) + "," + u(au["pageY"]);
            } else {
              if (au["clientX"] != undefined && au["clientX"] != undefined) {
                var aw = z["documentElement"],
                    ax = z["body"];
                var ay = event["clientX"] + (aw && aw["scrollLeft"] || ax && ax["scrollLeft"] || 0) - (aw && aw["clientLeft"] || ax && ax["clientLeft"] || 0);
                var az = event["clientY"] + (aw && aw["scrollTop"] || ax && ax["scrollTop"] || 0) - (aw && aw["clientTop"] || ax && ax["clientTop"] || 0);
                av = u(ay)["toString"]() + "-" + u(az)["toString"]();
              }
            }
          } catch (aA) {
            av = "-1,-1";
          }

          return av;
        }

        function ab(au, av) {
          var az = function (aC) {
            var aD = "",
                aE = aC["type"];

            if (["focus", "blur", "mousewheel", "DOMMouseScroll", "scroll"]["indexOf"](aE) != -1) {
              aD = "";
            } else {
              if (["resize", "orientationchange"]["indexOf"](aE) != -1) {
                aD = (g["innerWidth"] || 0) + "," + (g["innerHeight"] || 0);
              } else {
                if (aE == "keydown") {
                  var aF = aC["keyCode"] ? aC["keyCode"] + "" : "";
                  aD = ["8", "9", "46", "13"]["indexOf"](aF) != -1 ? aF : "";
                } else {
                  if (aE["indexOf"]("touch") != -1) {
                    aD = a8(aC) + "|" + a9(aC);
                  } else {
                    aD = aa(aC) + "|" + a9(aC);
                  }
                }
              }
            }

            return aD;
          };

          var aB = a7();
          var aA = az(au);
          return {
            "et": au["type"],
            "to": aB,
            "ed": aA,
            "id": av,
            "it": au["isTrusted"]
          };
        }

        function ac(au, av, aw, ax, ay, az) {
          var aD = F[aw] ? true : false;
          var aC = G == ax;
          var aF = av["indexOf"](au["type"]) != -1;

          if (!aD || !aC || !aF) {
            return false;
          }

          var aG = F[aw]["eti"];
          var aE = u((aG - H) / az) === u((ay - H) / az);
          return aE;
        }

        var ad = [];

        function ae(au) {
          var av = au["target"] || au["srcElement"];
          var aw = false;

          for (var ax = 0; ax < ad["length"]; ax++) {
            if (av == ad[ax]) {
              aw = true;
            }
          }

          return aw;
        }

        function af(au, av) {
          var aw = ["mousemove", "mousedown", "mouseenter", "touchmove", "touchstart"];

          if (!K && au["type"] == "mousemove") {
            K = av;
          }

          if (K && av != K && aw["indexOf"](au["type"]) != -1) {
            M["push"](K + ":" + L);
            K = av;
            L = 0;
          }

          if (au["type"] == "mousemove") {
            L++;
          }
        }

        function ag() {
          var au = [];
          au = au["concat"](M);

          if (L > 0 && K) {
            au["push"](K + ":" + L);
          }

          return au;
        }

        var ah = function (au, av, aw) {
          w["ael"](au, av, function (ay) {
            var aC = ay || g["event"];
            var aE = new n()["getTime"]();
            var aN = aw + "_" + aC["type"];
            var aD = ae(aC);

            if (au == h && aD) {
              return;
            }

            af(aC, aw);

            if (aC["type"] == "mousemove") {
              var aM = I[aw] || 0;
              I[aw] = aM + 1;
              var aL = s["abs"](aC["movementX"]);
              var aK = s["abs"](aC["movementY"]);

              if (aL != undefined && aK != undefined) {
                var aH = J[aw] || "0-0";
                var aI = u(aH["split"]("-")[0]);
                var aJ = u(aH["split"]("-")[1]);

                if (aL + aK > aI + aJ) {
                  J[aw] = aL + "-" + aJ;
                }
              }
            }

            if (x && aC["type"] == "mousemove" || E["length"] > 1000) {
              D++;
              return;
            }

            var aB = E["length"] < 30 ? 10 : E["length"] < 50 ? 100 : 1000;

            if (ac(aC, ["mousemove", "touchmove"], aN, aw, aE, aB) || ac(aC, ["resize", "scroll", "mousewheel", "DOMMouseScroll"], aN, aw, aE, 2000)) {
              D++;
              return;
            }

            G = aw;
            F[aN] = {
              "eti": aE,
              "et": aC["type"]
            };
            E["push"](ab(aC, aw));

            if (N) {
              N(aC);
            }
          });
        };

        function ai() {
          var au = [];

          for (var av = 0; av < B["length"]; av++) {
            var aw = B[av];
            var ax = aw["value"] || "";
            au["push"](av + ":" + ax["length"]);
          }

          return au;
        }

        function aj() {
          function au(aA) {
            return aA == undefined ? "" : u(aA);
          }

          var av = [];

          for (var aw = 0; aw < B["length"]; aw++) {
            var ax = B[aw];
            av["push"](aw + ":" + au(ax["offsetWidth"]) + "-" + au(ax["offsetHeight"]));
          }

          for (var aw = 0; aw < C["length"]; aw++) {
            var ay = C[aw];
            var az = 5 + aw;
            av["push"](az + ":" + au(ay["offsetWidth"]) + "-" + au(ay["offsetHeight"]));
          }

          return av;
        }

        function ak(au) {
          var av = 800;

          if (B["length"] != 0) {
            av = 800;
          } else {
            if (C["length"] != 0) {
              av = 500;
            } else {
              if (ad["length"] == 0) {
                av = 200;
              }
            }
          }

          var aw = E["slice"](0, av);
          var ax = 0;
          var ay = [];

          for (var az = 0; az < aw["length"]; az++) {
            var aA = az == 0 ? 0 : aw[az - 1]["to"];
            var aB = aw[az];
            var aC = a6(aB["et"]);
            var aD = aB["to"] - aA;

            if (aD < 0) {
              ax++;
              continue;
            }

            var aE = aB["ed"];
            var aF = aB["id"];
            var aG = aB["it"];
            var aH = [];

            if (aG == false) {
              aH["push"]("f-");
            } else {
              if (aG == undefined) {
                aH["push"]("-");
              } else {
                aH["push"]("");
              }
            }

            aH["push"](aC["toString"](36));
            aH["push"](aF);
            aH["push"](aD["toString"](36));

            if (aE && aE["indexOf"]("|") != -1) {
              var aP = [];
              var aM = aE["split"]("|")[0];
              var aO = aE["split"]("|")[1];
              var aQ = "";
              var aN = "";
              var aL = "";
              var aK = "";

              if (aM["indexOf"](",") != -1) {
                aQ = u(aM["split"](",")[0])["toString"](36);
                aN = u(aM["split"](",")[1])["toString"](36);
              }

              if (aO["indexOf"](",") != -1) {
                aL = u(aO["split"](",")[0])["toString"](36);
                aK = u(aO["split"](",")[1])["toString"](36);
              }

              aP["push"](aQ);
              aP["push"](aN);
              aP["push"](aL);
              aP["push"](aK);
              aH["push"]("-" + aP["join"](","));
            } else {
              if (aE) {
                aH["push"]("-" + aE);
              }
            }

            ay["push"](aH["join"](""));
          }

          if (au) {
            ay = [];
          }

          var aR = new n()["getTime"]();
          var aS = ["doei:", T ? "1" : "0", S, W, V, U, u(X[0]), u(X[1]), u(Y[0]), u(Y[1])]["join"](",");
          var aT = ["dmei:", a1 ? "1" : "0", Z, a0, u(a2[0]), u(a2[1]), u(a3[0]), u(a3[1]), u(a4[0]), u(a4[1])]["join"](",");
          var aU = B["length"];
          var aV = C["length"];
          var aW = E["length"];
          var aX = ay["length"];
          var aY = [];

          for (var aZ in I) {
            aY["push"](aZ + ":" + I[aZ]);
          }

          var b0 = [];

          for (var aZ in J) {
            b0["push"](aZ + ":" + J[aZ]);
          }

          var b1 = ["emc:"]["concat"](aY)["join"](",");
          var b2 = ["emmm:"]["concat"](b0)["join"](",");
          var b3 = ag();
          b3 = au ? [] : b3;
          var b4 = ["emcf:"]["concat"](b3)["join"](",");
          var b5 = ["ivli:"]["concat"](ai())["join"](",");
          var b6 = ["iivl:"]["concat"](ap)["join"](",");
          var b7 = ["ivcvj:"]["concat"](aq)["join"](",");
          var b8 = ["scvje:"]["concat"](ar)["join"](",");
          var b9 = ["ewhi:"]["concat"](aj())["join"](",");
          ay["push"](aS);
          ay["push"](aT);
          ay["push"](b1);
          ay["push"](b2);
          ay["push"](b4);
          ay["push"](b5);
          ay["push"](b6);
          ay["push"](b7);
          ay["push"](b8);
          ay["push"](b9);
          var ba = [H, aR, aU, aV, aW, aX, 0, D, ax, 0, w["ivw"]() ? "1" : "0"]["join"](",");
          ay["push"](ba);
          var bb = w["sph"](ay["join"](""), "4");
          ay["push"](bb);
          return ay["join"](";");
        };
        window._ak = ak

        function al(au) {
          return au;
        }

        function am(au, av) {
          if (!h["addEventListener"]) {
            return;
          }

          var az = m["getOwnPropertyDescriptor"](HTMLInputElement["prototype"], "value");

          if (!az || !az["set"]) {
            return;
          }

          var ay = az["set"];

          az["set"] = function (aB) {
            for (var aC = 0; aC < au["length"]; aC++) {
              if (au[aC] == this) {
                av(au[aC], aC, au[aC]["value"], aB);
              }
            }

            ay["apply"](this, arguments);
          };

          m["defineProperty"](HTMLInputElement["prototype"], "value", az);
        }

        function an(au, av) {
          for (var aw = 0; aw < au["length"]; aw++) {
            var ax = au[aw];
            var ay = ax["click"];

            au[aw]["click"] = function (az) {
              return function () {
                av(au[az], az);
                ay["apply"](this, arguments);
              };
            }(aw);
          }
        }

        function ao(au) {
          var av = [];
          w["each"](au, function (aw, ax) {
            av["push"](ax);
          });
          return av;
        }

        var ap = [];
        var aq = [];
        var ar = [];

        function as() {
          B = ao(h["querySelectorAll"]("[_input]"));
          C = ao(h["querySelectorAll"]("[_submit]"));
          ad = ad["concat"](B);
          ad = ad["concat"](C);

          if (B["length"] > 0) {
            w["each"](B, function (ax, ay) {
              ah(ay, al(O), ax + "");
            });
            ap = ai();
            !x && am(B, function (ax, ay, az, aA) {
              var aB = ay;
              aq["push"](aB + ":" + az["length"] + ":" + aA["length"]);
            });
          }

          if (C["length"] > 0) {
            w["each"](C, function (ax, ay) {
              ah(ay, al(O), 5 + ax + "");
            });
            an(C, function (ax, ay) {
              ar["push"](5 + ay);
            });
          }
        }

        try {
          as();
          w["d_r"](function () {
            if (ad["length"] == 0) {
              as();
            }
          });
          ah(h, al(Q), "d");
          ah(y, al(P), "w");
        } catch (au) {}

        function at(av) {
          N = av;
        }

        return {
          "l": at,
          "get": ak
        };
      });
    }, {
      "7": 7
    }],
    2: [function (c, d, e) {
      (function (g) {
        d["exports"] = g(window, document, navigator, setTimeout, clearTimeout, encodeURIComponent, Object, Date, Array, String, Image, RegExp, Math, XMLHttpRequest, parseInt);
      })(function (g, h, i, j, k, l, m, n, o, p, q, r, s, t, u) {
        var w = g;
        var x = c(6);
        var y = c(7);
        var z = c(4);
        var A = c(1);
        var B = "";
        var C = 0;
        var D = 0;
        var E = "";
        var F = "";
        var G = "";
        var I = "//nocaptcha.jd.com";
        var J = "_c_id";
        var K = "_s_id";
        var L = false;
        var M = "";
        var N = "";
        N += "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
        N += "abcdefghijklmnopqrstuvwxyz";
        N += "0123456789";
        N += "+/";
        var O = p["fromCharCode"];

        var P = function (ap) {
          var au = ap["length"];
          var av = [];

          for (var as = 0; as < au; as++) {
            av[as >>> 2] |= (ap["charCodeAt"](as) & 255) << 24 - as % 4 * 8;
          }

          var at = [];

          for (var as = 0; as < au; as += 3) {
            var aB = av[as >>> 2] >>> 24 - as % 4 * 8 & 255;
            var aC = av[as + 1 >>> 2] >>> 24 - (as + 1) % 4 * 8 & 255;
            var aA = av[as + 2 >>> 2] >>> 24 - (as + 2) % 4 * 8 & 255;
            var ay = aB << 16 | aC << 8 | aA;

            for (var az = 0; az < 4 && as + az * 0.75 < au; az++) {
              at["push"](N["charAt"](ay >>> 6 * (3 - az) & 63));
            }
          }

          for (var as = 0; as < at["length"] % 4; as++) {
            at["push"]("=");
          }

          return at["join"]("");
        };

        function Q(ap) {
          function ar(az, aA) {
            return O(az >> aA & 63 | 128);
          }

          function as(az) {
            if (az >= 55296 && az <= 57343) {
              throw Error("not a scalar value");
            }
          }

          function at(az) {
            var aD = [];
            var aC = 0;
            var aE = az["length"];

            while (aC < aE) {
              var aF = az["charCodeAt"](aC++);
              aD["push"](aF);
            }

            return aD;
          }

          function au(az) {
            if ((az & 4294967168) == 0) {
              return O(az);
            }

            var aC = "";

            if ((az & 4294965248) == 0) {
              aC = O(az >> 6 & 31 | 192);
            } else {
              if ((az & 4294901760) == 0) {
                as(az);
                aC = O(az >> 12 & 15 | 224);
                aC += ar(az, 6);
              } else {
                if ((az & 4292870144) == 0) {
                  aC = O(az >> 18 & 7 | 240);
                  aC += ar(az, 12);
                  aC += ar(az, 6);
                }
              }
            }

            aC += O(az & 63 | 128);
            return aC;
          }

          var av = at(ap);
          var aw = -1;
          var ax = "";

          while (++aw < av["length"]) {
            var ay = av[aw];
            ax += au(ay);
          }

          return ax;
        }

        function R(ap) {
          function ar(av) {
            var aw = (av & 15) << 4;
            var ax = (av & 240) >>> 4;
            return aw | ax;
          }

          var as = Q(ap);
          var at = "";

          for (var au = 0; au < as["length"]; au++) {
            at += O(ar(as["charCodeAt"](au)));
          }

          return P(at);
        }

        function S(ap, aq) {
          function as(ax, ay) {
            return ax ^ ay;
          }

          if (!ap) {
            return "";
          }

          var at = Q(ap);
          var au = "";

          for (var aw = 0; aw < at["length"]; aw++) {
            au += O(at["charCodeAt"](aw) ^ aq["charCodeAt"](aw % aq["length"]));
          }

          return P(au);
        }

        var T = y["ouw"](function () {
          var ap = y["grs"](32);
          var aq = ap + y["sph"](ap, 4);
          return aq;
        }, function () {
          return y["grs"](36);
        });

        var U = function () {
          var ap = g["XMLHttpRequest"] ? new t() : null;

          if (ap && "withCredentials" in ap) {
            return "1";
          } else {
            if (typeof XDomainRequest != "undefined") {
              return "2";
            } else {
              return "0";
            }
          }
        }();

        function V(ap) {
          return S(ap, B || "MD78QfVqcAGMDam2");
        }

        function W(ap) {
          return R(ap);
        }

        function X() {
          return U != "0";
        }

        var Z = "";
        var a0 = "0";
        var a1 = "";
        var a2 = T();
        var a3 = "";
        var a4 = new n()["getTime"]();
        var a5 = {};
        var a6 = 10000;

        function a7() {
          a6--;
        }

        var a8 = function () {
          var ap = [a4, a2, G, a5["mini"]["data"]];
          var aq = ap["join"]("|");
          return y["sph"](aq, 8);
        };

        var a9 = function () {
          a5 = z["gedd"]();

          var ax = function (az) {
            var aA = p["fromCharCode"](116),
                aB = p["fromCharCode"](95);
            var aC = aA + aB;
            var aD = aC["split"]("")["reverse"]()["join"]("");
            w[aD] = az;
          };

          a3 = a8["call"](this);
          var au = "abc";
          var at = "ist" + au + "edd" + au + "eddsg" + au + "cs" + au + "c" + au + "dsn" + au + "is" + au + "jic";
          var ar = [a4 + "", a5["mini"]["data"], a5["mini"]["sg"], a2, G, a3, a0, a6 + ""];
          var av = {};
          var aw = at["split"](au);

          for (var ay = 0; ay < aw["length"]; ay++) {
            av[aw[ay]] = ar[ay];
          }

          var as = F + "~" + V["call"](this, x(av))["toString"]();
          ax["call"](this, as);
        };

        var aa = function () {
          try {
            a9["call"](this);
          } catch (ap) {
            a1 = "bg";
            a0 = "3";
            ae(ap, "bg");
          }
        };

        function ab(ap, aq) {
          var ar = {};

          for (var as = 0; as < ap["length"]; as++) {
            ar[ap[as]] = aq[as];
          }

          return ar;
        }

        function ac() {
          var ap = ai(F, "1");

          if (F && ap) {
            return;
          }

          var aq = I + "/public/api/monitorCollector";
          var ar = ["bizId", "s", "slct", "edd", "cors", "ict", "ct", "cid"];
          var as = [E, F, C, a5["all"], U, D + "", new n()["getTime"]() + "", G];
          var at = ab(ar, as);
          var au = W(x(at));

          if (X()) {
            y["s_b_c"](aq, {
              "content": au,
              "s": F
            }, {
              "onSuccess": function (av) {
                if (av && av["td"]) {
                  M = av["td"];
                }

                F && aj(F, M, 300000);
              }
            });
          } else {
            y["s_j_p"](aq, {
              "content": au,
              "s": F
            });
          }
        }

        function ad() {
          if (F && M == "") {
            M = ai(F);
          }

          return M;
        }

        function ae(ap, aq) {
          var av = I + "/public/api/jsError";
          var aw = ["bizId", "s", "c", "where", "jv", "is"];
          var ax = [E, F, G, aq, Z, a0];
          var au = ab(aw, ax);
          var at = W(x(au));

          if (X()) {
            y["s_b_c"](av, {
              "content": at,
              "jserror": y["p_e"](ap)
            });
          } else {
            y["s_j_p"](av, {
              "content": at,
              "jserror": y["p_e"](ap)
            }, {
              "withoutCallback": true
            });
          }
        }

        function af() {}

        function ag(ap) {
          ap = ap + "";

          if (ap["length"] >= 13) {
            return ap["substring"](0, 13);
          } else {
            while (ap["length"] != 13) {
              ap = "0" + ap;
            }
          }

          return ap;
        }

        function ah() {
          var ap = y["grs"](19) + ag(new n()["getTime"]());
          return ap + y["sph"](ap, 4);
        }

        function ai(ap) {
          return y["g_c"](ap);
        }

        function aj(ap, aq, ar) {
          y["p_c"](ap, aq, ar);
        }

        var ak = function (ap, aq, ar) {
          var at = function () {
            a0 = "1";
            aa();
            af();
            aq();
            ac();
          };

          var au = function (aA) {
            a0 = "2";
            aa();
            af();
            ar("i e");
            ae(aA, "i");
            ac();
          };

          try {
            var ax = new n()["getTime"]();
            aq = y["np"](aq);
            ar = y["np"](ar);
            Z = ap["jv"];
            E = ap["bizId"];
            var az = ai(J);
            var ay = ai(K);
            G = ap["c"] || az || ah();
            F = ap["s"] || ay || ah();
            L = ap["dataComp"] || false;

            if (!az) {
              aj(J, G, 3153600000000);
            }

            if (!ay) {
              aj(K, F, -1);
            }

            B = ap["k"];
            I = ap["apiServer"];
            C = ap["scriptLoadConsumeTime"] || C;
            D = new n()["getTime"]() - ax;
            a7();
            at();
          } catch (aA) {
            au(aA);
          }
        };

        function al() {
          var ap = "";

          try {
            ap = A["get"](L);
          } catch (aq) {
            a1 = "gbd";
            a0 = "3";
            ae(aq, "gbd");
          }

          return ap;
        }

        var am = 0;

        function an() {
          var at = new n()["getTime"]();
          var ar = "";

          try {
            ar = P(x(z["gaedd"]()));
          } catch (av) {
            a1 = "gad";
            a0 = "3";
            ae(av, "gad");
          }

          var au = [];
          au["push"](a1);
          au["push"](at);
          au["push"](a0);
          au["push"](Z);
          au["push"](ar);
          au["push"](++am);
          au["push"](ad());
          var as = y["sph"](au["join"]("~"), 4);
          au["push"](as);
          return au["join"]("~");
        }

        var ao = [ak, function () {
          return "";
        }, function () {
          var ap = al();
          var aq = an();
          return (g["_t"] || "") + "|" + aq + "|" + ap;
        }];
        return ao;
      });
    }, {
      "1": 1,
      "4": 4,
      "6": 6,
      "7": 7
    }],
    3: [function (c, d, e) {
      (function (g) {
        d["exports"] = g();
      })(function () {
        "use strict";

        var k = [{
          "id": "gfgkebiommjpiaomalcbfefimhhanlfd",
          "res": ["static/touch-emulator.js"]
        }];
        var j = [];
        var r = navigator["userAgent"]["toLowerCase"]();

        if (r["indexOf"]("edg") > 0) {
          k = [{
            "id": "ljdjkkjiognkghfjndoddoplekppngge",
            "res": ["static/touch-emulator.js"]
          }];

          for (var m = 0; m < k["length"]; m++) {
            var p = "chrome-extension://" + k[m]["id"] + "/" + k[m]["res"];
            var q = new XMLHttpRequest();

            q["onreadystatechange"] = function () {
              if (this["readyState"] == 4 && this["status"] == 200) {
                j["push"](k[m]["id"]);
              }
            };

            q["open"]("GET", p, false);

            try {
              q["send"]();
            } catch (s) {}
          }
        } else {
          if (r["indexOf"]("chrome") > 0 && r["indexOf"]("edg") == -1) {
            for (var m = 0; m < k["length"]; m++) {
              var p = "chrome-extension://" + k[m]["id"] + "/" + k[m]["res"];
              var q = new XMLHttpRequest();

              q["onreadystatechange"] = function () {
                if (this["readyState"] == 4 && this["status"] == 200) {
                  j["push"](k[m]["id"]);
                }
              };

              q["open"]("GET", p, false);

              try {
                q["send"]();
              } catch (t) {}
            }
          } else {
            if (r["indexOf"]("firefox") > 0) {
              if (document["getElementsByClassName"]("jjb-login")["length"] > 0 || document["getElementsByClassName"]("jjbPriceChart")["length"] > 0) {
                j["push"]("42f0bbb4-0214-49d1-a01a-bdead05c5540");
              }
            }
          }
        }

        return j;
      });
    }, {}],
    4: [function (c, d, e) {
      (function (g) {
        d["exports"] = g(window, document, navigator, setTimeout, clearTimeout, encodeURIComponent, Object, Date, Array, String, Image, RegExp, Math, XMLHttpRequest, parseInt);
      })(function (g, h, i, j, k, l, m, n, o, p, q, r, s, t, u) {
        "use strict";

        var w = c(7);
        var x = c(6);
        var y = c(3);

        function z(a1) {
          return a1 ? w["murmur"](a1) : "";
        }

        function A(a1) {
          return a1 + "";
        }

        var B = [];
        var C = "";
        var D = 0;
        var E = {};

        var F = function () {
          var a3 = "motnahp"["split"]("")["reverse"]()["join"]("");
          var a5 = "motnahPllac"["split"]("")["reverse"]()["join"]("");
          var a4 = i["userAgent"] || "";

          if (a4["toLowerCase"]()["indexOf"](a3) != -1) {
            return true;
          }

          if (a3 in g || "_" + a3 in g || a5 in g) {
            return true;
          }

          return false;
        };

        var G = function () {
          var a1 = /Chrome/i["test"](i["userAgent"]);
          var a2 = !!g["chrome"];
          var a3 = [];
          var a4 = [];

          if (g["chrome"]) {
            for (var a5 in g["chrome"]) {
              a3["push"](a5);
            }
          }

          var a6 = [];
          var a7 = [];
          var a8 = ["plugins", "mimeTypes", "webdriver", "languages"];

          function a9(ad) {
            if (!ad) {
              return "";
            }

            var ae = ["configurable", "enumerable"];

            for (var af = 0; af < ae["length"]; af++) {
              if (!(ae[af] in ad)) {
                return "false";
              }
            }

            return "true";
          }

          for (var aa = 0; aa < a8["length"]; aa++) {
            var ab = null;

            if (m["getOwnPropertyDescriptor"]) {
              ab = m["getOwnPropertyDescriptor"](i, a8[aa]);
            }

            a6["push"](ab ? "true" : "false");
            a7["push"](a9(ab));
          }

          var ac = g["console"] && "debug" in g["console"];
          return {
            "haprode": a6,
            "leprode": a7,
            "chinua": a1 + "",
            "chinwi": a2 + "",
            "princh": a3,
            "princhru": a4,
            "deinco": ac + "",
            "plle": i["plugins"]["length"] + "",
            "laep": i["languages"] === "" ? "true" : "false"
          };
        };

        var H = function () {
          return h["referrer"] + "";
        };

        var I = function () {
          var a6 = {};
          var a4 = ["outerWidth", "outerHeight", "innerWidth", "innerHeight", "devicePixelRatio", "orientation"];
          var a3 = ["ouwi", "ouhe", "inwi", "inhe", "depira", "or"];

          for (var a5 = 0; a5 < a4["length"]; a5++) {
            a6[a3[a5]] = g[a4[a5]] + "";
          }

          return a6;
        };

        var J = function () {
          var a3 = {};
          var a6 = ["left", "right", "availLeft", "availTop", "availWidth", "availHeight", "width", "height", "colorDepth", "deviceXDPI", "logicalXDPI", "systemXDPI"];
          var a5 = ["le", "ri", "avle", "avto", "avwi", "avhe", "wi", "he", "code", "dexd", "loxd", "syxd"];

          for (var a4 = 0; a4 < a6["length"]; a4++) {
            a3[a5[a4]] = g["screen"][a6[a4]] + "";
          }

          return a3;
        };

        function K() {
          var a1 = h["createElement"]("canvas");
          return !!(a1["getContext"] && a1["getContext"]("2d"));
        }

        function L() {
          var a1 = [];

          if (i["plugins"]) {
            for (var a2 = 0; a2 < i["plugins"]["length"]; a2++) {
              a1["push"](i["plugins"][a2]["name"]);
            }
          }

          return a1;
        }

        function M() {
          var a1 = [];

          if (m["getOwnPropertyDescriptor"] && m["getOwnPropertyDescriptor"](g, "ActiveXObject") || "ActiveXObject" in g) {
            var a2 = ["AcroPDF.PDF", "Adodb.Stream", "AgControl.AgControl", "DevalVRXCtrl.DevalVRXCtrl.1", "Msxml2.DOMDocument", "Msxml2.XMLHTTP", "PDF.PdfCtrl", "QuickTime.QuickTime", "QuickTimeCheckObject.QuickTimeCheck.1", "RealPlayer", "RealPlayer.RealPlayer(tm) ActiveX Control (32-bit)", "RealVideo.RealVideo(tm) ActiveX Control (32-bit)", "Scripting.Dictionary", "SWCtl.SWCtl", "Shell.UIHelper", "Skype.Detection", "TDCCtl.TDCCtl", "WMPlayer.OCX", "rmocx.RealPlayer G2 Control", "rmocx.RealPlayer G2 Control.1"];

            for (var a3 = 0; a3 < a2["length"]; a3++) {
              try {
                var a4 = a2[a3];
                new g["ActiveXObject"](a4);
                a1["push"](a4);
              } catch (a5) {}
            }
          }

          return a1;
        }

        function N() {
          function a1(a2) {
            try {
              return a2 in g;
            } catch (a3) {
              return true;
            }
          }

          return {
            "sest": a1("sessionStorage"),
            "lost": a1("localStorage"),
            "indb": a1("indexedDB"),
            "ontost": a1("ontouchstart")
          };
        }

        var O = function () {
          return {
            "lang": A(i["language"]),
            "langs": i["languages"] ? i["languages"]["join"](",") : "",
            "brla": A(i["browserLanguage"]),
            "syla": A(i["systemLanguage"]),
            "cpcl": A(i["cpuClass"]),
            "oscp": A(i["oscpu"]),
            "apna": A(i["appName"]),
            "apve": A(i["appVersion"]),
            "apmive": A(i["appMinorVersion"]),
            "mityle": A(i["mimeTypes"]["length"]),
            "buid": A(i["buildID"]),
            "cken": A(i["cookieEnabled"]),
            "deme": A(i["deviceMemory"]),
            "matopo": A(i["maxTouchPoints"] || i["msMaxTouchPoints"]),
            "donotr": A(i["doNotTrack"]),
            "haco": A(i["hardwareConcurrency"]),
            "plat": A(i["platform"]),
            "prod": A(i["product"]),
            "prsu": A(i["productSub"]),
            "vend": A(i["vendor"]),
            "vesu": A(i["vendorSub"])
          };
        };

        function P() {
          if (!K()) {
            return "";
          }

          var a5 = [];
          var a3 = h["createElement"]("canvas");
          a3["width"] = 2000;
          a3["height"] = 200;
          a3["style"]["display"] = "inline";
          var a4 = a3["getContext"]("2d");
          a4["rect"](0, 0, 10, 10);
          a4["rect"](2, 2, 6, 6);
          a5["push"]("winding:" + (a4["isPointInPath"](5, 5, "evenodd") === false ? "yes" : "no"));
          a4["textBaseline"] = "alphabetic";
          a4["fillStyle"] = "#f60";
          a4["fillRect"](125, 1, 62, 20);
          a4["fillStyle"] = "#069";
          a4["font"] = "11pt no-real-font-123";
          a4["fillText"]("Cwm fjordbank glyphs vext quiz, ", 2, 15);
          a4["fillStyle"] = "rgba(102, 204, 0, 0.2)";
          a4["font"] = "18pt Arial";
          a4["fillText"]("Cwm fjordbank glyphs vext quiz, ", 4, 45);
          a4["globalCompositeOperation"] = "multiply";
          a4["fillStyle"] = "rgb(255,0,255)";
          a4["beginPath"]();
          a4["arc"](50, 50, 50, 0, s["PI"] * 2, true);
          a4["closePath"]();
          a4["fill"]();
          a4["fillStyle"] = "rgb(0,255,255)";
          a4["beginPath"]();
          a4["arc"](100, 50, 50, 0, s["PI"] * 2, true);
          a4["closePath"]();
          a4["fill"]();
          a4["fillStyle"] = "rgb(255,255,0)";
          a4["beginPath"]();
          a4["arc"](75, 100, 50, 0, s["PI"] * 2, true);
          a4["closePath"]();
          a4["fill"]();
          a4["fillStyle"] = "rgb(255,0,255)";
          a4["arc"](75, 75, 75, 0, s["PI"] * 2, true);
          a4["arc"](75, 75, 25, 0, s["PI"] * 2, true);
          a4["fill"]("evenodd");

          if (a3["toDataURL"]) {
            a5["push"](a3["toDataURL"]());
          }

          return a5["join"]("~");
        }

        function Q() {
          var a2 = new n()["getTime"]();

          var a3 = function () {
            return i["mediaDevices"] && i["mediaDevices"]["enumerateDevices"];
          };

          if (a3()) {
            i["mediaDevices"]["enumerateDevices"]()["then"](function (a4) {
              a4["forEach"](function (a5) {
                B["push"](a5["kind"] + ": " + a5["label"] + " id = " + a5["deviceId"]);
              });

              if (B["length"] > 0) {
                C = z(B["join"]("~"));
                w["s_l_i"]("_dev_ha", C);
              }

              D = new n()["getTime"]() - a2;
            });
          }
        }

        function R() {
          i["getBattery"] && i["getBattery"]()["then"](function (a2) {
            function a4() {
              E["ic"] = a2["charging"] ? "1" : "0";
            }

            function a5() {
              E["le"] = A(a2["level"] * 100);
            }

            function a6() {
              var a9 = a2["chargingTime"];
              E["ct"] = a9 == Infinity ? "i" : A(a9);
            }

            function a7() {
              var a9 = a2["dischargingTime"];
              E["dt"] = a9 == Infinity ? "i" : A(a9);
            }

            a8();
            a2["addEventListener"]("chargingchange", function () {
              a4();
            });
            a2["addEventListener"]("levelchange", function () {
              a5();
            });
            a2["addEventListener"]("chargingtimechange", function () {
              a6();
            });
            a2["addEventListener"]("dischargingtimechange", function () {
              a7();
            });

            function a8() {
              a4();
              a5();
              a6();
              a7();
            }
          });
        }

        var S = w["ism"]();

        function T() {
          var a1 = w["g_l_i"]("_c_f2");

          if (!a1) {
            var a1 = z(P());
            a1 = a1 + w["sph"](a1, 4);

            if (a1) {
              w["s_l_i"]("_c_f2", a1);
            }
          }

          return a1;
        }

        function U(a1, a2) {
          var a3 = [];

          for (var a4 in a1) {
            if (a4 != a2) {
              a3["push"](a4 + ":" + a1[a4]);
            }
          }

          return a3;
        }

        function V() {
          return S ? "" : C || w["g_l_i"]("_dev_ha") || "";
        }

        function W() {
          !S && Q();
          R();
        }

        function X(a1, a2) {
          return a1 ? a1["substring"](s["max"](0, a1["length"] - a2), a1["length"]) : "";
        }

        function Y() {
          var a1 = ["script", "link", "meta", "input", "button", "div"];
          var a2 = [];

          for (var a3 = 0; a3 < a1["length"]; a3++) {
            var a4 = h["querySelectorAll"](a1[a3]);
            a2["push"](a4["length"]);
          }

          return a2["join"](",");
        }

        var Z = function () {
          var a1 = new n()["getTime"]();
          var a2 = w["ivw"]();
          var a3 = F();
          var a4 = T();
          var a5 = new n()["getTime"]() - a1;
          var a6 = L();
          var a7 = M();
          var a8 = J();
          var a9 = I();
          var aa = O();
          var ab = N();
          var ac = G();
          var ad = H();
          var ae = V();
          var af = A(new n()["getTimezoneOffset"]());
          var ag = g["location"]["href"] + "";
          ag = ag["substring"](0, s["min"](64, ag["length"]));
          var ah = g["location"]["host"];
          var ai = g["location"]["pathname"];
          var aj = g["location"]["protocol"];
          var ak = Y();
          var al = {
            "isviwe": A(a2),
            "isviph": A(a3),
            "cafp": a4,
            "repl": a6,
            "iepl": a7,
            "wiin": a9,
            "scin": a8,
            "nain": aa,
            "cain": ab,
            "deha": ae,
            "tiof": A(af),
            "hile": A(history["length"]),
            "hechde": ac,
            "dore": X(ad, 50),
            "ism": A(S),
            "href": ag,
            "pi": ak,
            "cbl": y
          };
          var am = [];
          am["push"](a2);
          am["push"](a3);
          am["push"](a4);
          am["push"](a6["join"]("~"));
          am["push"](a7["join"]("~"));
          am["push"](g["devicePixelRatio"]);
          am["push"](U(a8)["join"]("~"));
          am["push"](U(aa)["join"]("~"));
          am["push"](U(ab));
          am["push"](ae);
          am["push"](af);
          var an = z(am["join"]("#"));
          var ao = w["sph"](an, 4);
          al["f"] = an + ao;
          var ap = {
            "isviwe": A(a2),
            "isviph": A(a3),
            "dore": X(ad, 5),
            "f": an + ao,
            "ism": A(S),
            "hst": ah,
            "pn": ai["substring"](0, 30),
            "pt": aj,
            "pi": ak
          };
          var aq = new n()["getTime"]() - a1;
          var ar = {
            "all": {}
          };
          ar["all"]["data"] = x(al);
          ar["all"]["perf"] = {
            "cacoti": A(a5),
            "tocosu": A(aq),
            "decoti": A(D)
          };
          ar["all"]["sg"] = w["sph"](ar["all"]["data"], 4);
          ar["mini"] = {};
          ar["mini"]["data"] = x(ap);
          ar["mini"]["sg"] = w["sph"](ar["mini"]["data"], 4);
          return ar;
        };

        function a0() {
          var a1 = w["ivw"]();
          return {
            "viwe": a1 ? "1" : "0",
            "bain": E
          };
        }

        W();
        return {
          "gedd": Z,
          "gaedd": a0
        };
      });
    }, {
      "3": 3,
      "6": 6,
      "7": 7
    }],
    5: [function (c, d, e) {
      !function (g, h, i, j, k, l, m, n, o, p, q, r, s, t, u) {
        function w() {
          return g["JCaptcha"];
        }

        function x(z, A, B, C, D) {
          var E = z + "/public/api/jsError2?bizId=" + A + "&where=" + l(C) + "&jserror=" + l(D ? D : "") + "&jv=" + B + "&t=" + new n()["getTime"]();
          var F = new q();
          F["src"] = E;
          g["_tmp"] = F;
        }

        function y(z, A, B) {
            z["apiServer"] = z["apiServer"] || "//nocaptcha.jd.com";
            z["staticServer"] = z["staticServer"] || "//js-nocaptcha.jd.com";
            z["bizId"] = z["bizId"] || z["biz_id"];
            z["jv"] = "20201218";
            this["config"] = z;
            var C = c(7);
            this["uts"] = C;
            this["c"] = c(2);
            var D = this["c"][0];
            var E = this;
            D(z, A, B);

            if (z["initCaptcha"]) {
              var F = z["staticServer"] + "/statics/slidecaptcha/v1/slide.min.js?v=" + this["config"]["jv"];
              C["loadScript"](F, function (H) {
                if (!H) {
                  var I = w();
                  E["jcaptcha"] = new I(z);
                } else {
                  x(z["apiServer"], z["bizId"], z["jv"], "load slide", "load slide.js fail");
                }
              });
            }
        }

        y["prototype"]["getToken"] = y["prototype"]["getData"] = function () {
          try {
            var z = this["c"];
            return z[2]() || "er";
          } catch (B) {
            var A = this["uts"] ? this["uts"]["p_e"](B) : B["toString"]();
            x(this["config"]["apiServer"], this["config"]["bizId"], this["config"]["jv"], "g t e", A);
            return "er";
          }
        };

        y["prototype"]["showCaptcha"] = function (z, A) {
          var B = this;
          var C = z["onValidateSuccess"];
          z["requestId"] = z["requestId"] || A;

          var D = function (E) {
            var F = {
              "token": B["getToken"](),
              "requestId": z["requestId"],
              "captcha_data": B["jcaptcha"]["getJson"]()
            };
            var G = c(6);
            C(G(F));
          };

          z["onValidateSuccess"] = D;

          if (!this["jcaptcha"]) {
            j(function () {
              var E = "";

              if (B["jcaptcha"]) {
                E = "slide.js has loaded after 1s";
                B["jcaptcha"] && B["jcaptcha"]["show"](z);
              } else {
                E = "slide.js not loaded yet after 1s";
              }

              x(B["config"]["apiServer"], B["config"]["bizId"], B["config"]["jv"], "sh ca", E);
            }, 1000);
            x(B["config"]["apiServer"], B["config"]["bizId"], B["config"]["jv"], "sh ca", "slide.js not loaded yet");
          } else {
            this["jcaptcha"]["show"](z);
          }
        };

        g["JAB"] = y;
      }(window, document, navigator, setTimeout, clearTimeout, encodeURIComponent, Object, Date, Array, String, Image, RegExp, Math, XMLHttpRequest, parseInt);
    }, {
      "2": 2,
      "6": 6,
      "7": 7
    }],
    6: [function (c, d, e) {
      (function (g) {
        d["exports"] = g(window, document, navigator, setTimeout);
      })(function (g, h, i, j) {
        "use strict";

        var l = {
          "": "\\b",
          "\t": "\\t",
          "\n": "\\n",
          "\f": "\\f",
          "\r": "\\r",
          "\"": "\\\"",
          "\\": "\\\\"
        };
        var m = "",
            n = "";

        function o(r) {
          var s = /[\\\"\u0000-\u001f\u007f-\u009f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g;
          s["lastIndex"] = 0;
          return s["test"](r) ? "\"" + r["replace"](s, function (t) {
            var u = l[t];
            return typeof u === "string" ? u : "\\u" + ("0000" + t["charCodeAt"](0)["toString"](16))["slice"](-4);
          }) + "\"" : "\"" + r + "\"";
        }

        function p(r, s) {
          var t,
              u,
              w,
              x,
              y = m,
              z,
              A = s[r];

          switch (typeof A) {
            case "string":
              return o(A);

            case "number":
              return isFinite(A) ? String(A) : "null";

            case "boolean":
            case "null":
              return String(A);

            case "object":
              if (!A) {
                return "null";
              }

              m += n;
              z = [];

              if (Object["prototype"]["toString"]["apply"](A) === "[object Array]") {
                x = A["length"];

                for (t = 0; t < x; t += 1) {
                  z[t] = p(t, A) || "null";
                }

                w = z["length"] === 0 ? "[]" : m ? "[\n" + m + z["join"](",\n" + m) + "\n" + y + "]" : "[" + z["join"](",") + "]";
                m = y;
                return w;
              } else {
                for (u in A) {
                  if (Object["prototype"]["hasOwnProperty"]["call"](A, u)) {
                    w = p(u, A);

                    if (w) {
                      z["push"](o(u) + (m ? ": " : ":") + w);
                    }
                  }
                }

                w = z["length"] === 0 ? "{}" : m ? "{\n" + m + z["join"](",\n" + m) + "\n" + y + "}" : "{" + z["join"](",") + "}";
                m = y;
                return w;
              }

          }
        }

        var q = function (r) {
          if (JSON) {
            var s = JSON["stringify"](r);
            return s;
          }

          return p("", {
            "": r
          });
        };

        return q;
      });
    }, {}],
    7: [function (c, d, e) {
      (function (g) {
        d["exports"] = g(window, document, navigator, setTimeout, clearTimeout, encodeURIComponent, Object, Date, Array, String, Image, RegExp, Math, XMLHttpRequest, parseInt);
      })(function (g, h, i, j, k, l, m, n, o, p, q, r, s, t, u) {
        var w = {};
        var y = c(6);
        var z = "1234567890abcdefghijklmnopqrstuvwxyz";

        function A() {
          return u(s["random"]() * 10000) + new n()["valueOf"]();
        }

        w["ivw"] = function () {
          return "$cdc_asdjflasutopfhvcZLmcfl_" in h || !!i["webdriver"] || false;
        };

        w["np"] = function (B) {
          return B || function () {};
        };

        w["p_j"] = function (B) {
          return eval("(" + B + ")");
        };

        w["p_c"] = function (B, C, D, E) {
          var H = B + "=" + C;
          D = D == undefined ? -1 : D;

          if (D > 0) {
            H += ";expires=" + new n(new n()["getTime"]() + D)["toUTCString"]();
          } else {
            if (D == 0) {
              H += ";expires=0";
            }
          }

          H += ";path=" + (E || "/");
          h["cookie"] = H;
        };

        w["g_c"] = function (B) {
          var C = new r("(?:(?:^|.*;\\s*)" + B + "\\s*\\=\\s*([^;]*).*$)|^.*$");
          var D = h["cookie"]["replace"](C, "$1");
          return D;
        };

        w["str"] = function (B) {
          return B + "";
        };

        w["ism"] = function () {
          var B = new r("Android|webOS|iPhone|iPad|iPod|BlackBerry|Mobile", "i");
          var C = B["test"](i["userAgent"]) || "ontouchstart" in g || "orientation" in g;
          return C;
        };

        w["i_l_s"] = function () {
          try {
            if (!g["localStorage"]) {
              return false;
            }

            g["localStorage"]["setItem"]("__test", "1");
            return true;
          } catch (B) {
            return false;
          }
        }();

        w["s_l_i"] = function (B, C) {
          w["i_l_s"] && g["localStorage"]["setItem"](B, C);
        };

        w["g_l_i"] = function (B) {
          return w["i_l_s"] ? g["localStorage"]["getItem"](B) : "";
        };

        w["murmur"] = function (B) {
          if (!B) {
            return "";
          }

          if (g["Murmur"]) {
            return g["Murmur"]["x64hash128"](B, 31);
          } else {
            return w["sph"](B, 32);
          }
        };

        w["s_b_c"] = function (B, C, D) {
          var D = D || {};
          var Q = D["method"] || "post";
          var R = D["timeout"] || 5000;
          var G = w["np"](D["onSuccess"]);
          var K = w["np"](D["onError"]);
          var M = false;
          var I = g["XMLHttpRequest"] ? new t() : null;

          if (I && "withCredentials" in I) {
            I["open"](Q, B, true);
          } else {
            if (typeof XDomainRequest != "undefined") {
              M = true;
              I = new XDomainRequest();
              I["open"](Q, B);
            }
          }

          I["timeout"] = R;
          var N = false;

          var L = function (T) {
            !N && K(T);
            N = true;
          };

          I["onerror"] = I["ontimeout"] = function () {
            L("timeout");
          };

          var B = B + "?random=" + A();

          if (M) {
            I["onload"] = function () {
              var T = I["responseText"] ? w["p_j"](I["responseText"]) : {};
              G(T);
            };
          } else {
            if (I["setRequestHeader"]) {
              I["setRequestHeader"]("Content-Type", "text/plain; charset=utf-8");
            }

            I["onreadystatechange"] = function () {
              if (I["readyState"] == 4) {
                if (I["status"] == 200) {
                  var T = I["responseText"] ? w["p_j"](I["responseText"]) : {};
                  G(T);
                } else {
                  L("response fail with status: " + I["status"]);
                }
              }
            };
          }

          var O = [];

          for (var H in C) {
            O["push"](H + "=" + l(C[H]));
          }

          var S = O["join"]("&");
          I["send"](S);
        };

        w["p_j"] = function (B) {
          return eval("(" + B + ")");
        };

        w["s_j_p"] = function (B, C, D) {
          var D = D || {};
          var F = D["timeout"];
          var G = w["np"](D["onSuccess"]);
          var H = w["np"](D["onError"]);
          var I = D["charset"] || "UTF-8";
          var J = D["async"] || true;
          var K = h["getElementsByTagName"]("head")[0];
          var L = h["createElement"]("script");
          L["charset"] = I;
          L["async"] = J;
          var M = "jsonp_" + A();
          var N = [];

          for (var O in C) {
            N["push"](O + "=" + l(C[O]));
          }

          if (!D["withoutCallback"]) {
            N["push"]("callback=" + M);
          }

          N["push"]("random=" + A());
          L["src"] = B + "?" + N["join"]("&");

          L["onerror"] = function () {
            P();
            H && H("onerror");
          };

          if (F) {
            L["timer"] = j(function () {
              P();
              H && H("timeout");
            }, F);
          }

          g[M] = function (Q) {
            P();
            G && G(Q);
          };

          function P() {
            L["timer"] && k(L["timer"]);
            L["onerror"] = null;
            K["removeChild"](L);
            g[M] = null;
          }

          K["appendChild"](L);
        };

        w["p_e"] = function (B) {
          var C = B;
          var D = [];

          if (C instanceof Error) {
            if (C["number"] !== undefined) {
              D["push"]("Number: " + C["number"]);
            }

            if (C["description"] !== undefined) {
              D["push"]("Description: " + C["description"]);
            }

            if (C["name"] !== undefined) {
              D["push"](C["name"] + ": " + (C["message"] === undefined ? "" : C["message"]));
            }

            if (C["lineNumber"] !== undefined) {
              D["push"]("lineNumber: " + C["lineNumber"]);
            }

            if (C["stack"] !== undefined) {
              D["push"]("stack: " + C["stack"]["replace"](/\n/g, "")["replace"](/\r/g, ""));
            }
          } else {
            D["push"](C);
          }

          return y(D);
        };

        w["ouw"] = function (B, C, D) {
          return function () {
            var E = B["apply"](D || this, arguments);
            B = C;
            return E;
          };
        };

        w["sph"] = function (B, C, D) {
          if (B === "") {
            return "";
          }

          var F = u(B["length"] / C);
          var G = [];

          for (var H = 0; H < C; H++) {
            var I = 0;
            var J = H * F;
            var K = H == C - 1 ? F + B["length"] % C : F;

            for (var L = 0; L < K; L++) {
              var M = J + L;

              if (M < B["length"]) {
                I = I + B["charCodeAt"](M);
              }
            }

            I = I * (D || 31);
            G["push"](z["charAt"](I % z["length"]));
          }

          return G["join"]("");
        };

        w["grs"] = function (B) {
          var C = z["split"]("");
          var D = [];

          for (var E = 0; E < B; E++) {
            var F = u(C["length"] * s["random"]());
            D["push"](C[F]);
          }

          return D["join"]("");
        };

        w["ael"] = function (B, C, D) {
          for (var E in C) {
            if (C["hasOwnProperty"](E)) {
              B["addEventListener"] ? B["addEventListener"](C[E], D, false) : B["attachEvent"]("on" + C[E], D, false);
            }
          }
        };

        w["each"] = function (B, C) {
          if (B && B["length"] > 0) {
            for (var D = 0; D < B["length"]; D++) {
              C(D, B[D]);
            }
          }
        };

        w["d_r"] = function (B) {
          if (h["addEventListener"]) {
            h["addEventListener"]("DOMContentLoaded", function () {
              B && B();
            }, false);
          } else {
            var D = h["onreadystatechange"];

            h["onreadystatechange"] = function () {
              if (h["readyState"] == "complete") {
                B && B();
              }

              D && D["apply"](this);
            };
          }
        };

        w["loadScript"] = function (B, C) {
          var E = h["getElementsByTagName"]("head")[0];
          var F = h["createElement"]("script");
          F["charset"] = "UTF-8";
          F["async"] = true;

          F["onerror"] = function () {
            C(true);
          };

          var G = false;

          F["onload"] = F["onreadystatechange"] = function () {
            if (!G && (!F["readyState"] || "loaded" === F["readyState"] || "complete" === F["readyState"])) {
              G = true;
              j(function () {
                C(false);
              }, 0);
            }
          };

          F["src"] = B;
          E["appendChild"](F);
        };

        return w;
      });
    }, {
      "6": 6
    }]
  }, {}, [5]);
}();

const JSEncrypt = require('jsencrypt');
var jab = new JAB({
        bizId: 'PASSPORT_LOGIN',
        initCaptcha: true})
var pubkey = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDXQG8rnxhslm+2f7Epu3bB0inrnCaTHhUQCYE+2X+qWQgcpn+Hvwyks3A67mvkIcyvV0ED3HFDf+ANoMWV1Ex56dKqOmSUmjrk7s5cjQeiIsxX7Q3hSzO61/kLpKNH+NE6iAPpm96Fg15rCjbm+5rR96DhLNG7zt2JgOd2o1wXkQIDAQAB";


function get_param(username, password) {
    var k = username;
    var j = password;
    var i = new JSEncrypt();
    i.setPublicKey(pubkey);
    j = i.encrypt(j);
    k = i.encrypt(k);
    var h = {
        "credentials.username": k,
        "credentials.password": j,
        validCode: undefined,
        sig: "",
        is_jab: "true",
        captchaToken: jab.getData(),
        jab_st: 0,
        loginSource: "1",
        returnUrl: "http://www.yhd.com",
        isAutoLogin: "0",
        slideData: ""
    }
    return h
}

你可能感兴趣的:(爬虫逆向实战,爬虫)