5

严禁利用文章中的内容从事违法行为!如有侵某乎权利,请联系我删除,本文仅供学习用,旨在分享。发表于思否-神经蛙

1.接口分析

1.首先找到接口路径是/api/v4/search_v3,其中看起来有点莫名其妙的是x-ab-pb,x-zse-96,x-zst-81这三个参数;去掉x-ab-pb参数,接口正常;去掉x-zst-81参数,接口报错;去掉x-zse-96参数,接口报错。
2.首次进入页面搜索时,无x-zst-81参数也可获取到数据,说明x-zst-81可有可无;
3.初步结论:x-zse-96是该接口的重要参数;
接口参数分析

2.js分析

x-zse-96参数

image.png
由上图看出x-zse-96来源于 F(r).encrypt(f()(s)),下面将一步步分析生成过程;

s来源

var i = n.zse93
    , o = n.dc0
    , a = n.xZst81
    , c = H(e)
    , u = q(t)
    , s = [i, c, o, W(u) && u, a].filter(Boolean).join("+")

image.png
断点调试可知,ix-zse-93参数(固定值),c为请求url,W(u)&&ufalse不参与,ax-zst-81可不用;o呢?
image.png

跳转过去发现生成o的代码就是拿cookie简单做了一下处理

K = new RegExp("d_c0=([^;]+)")
          , Q = function() {
            var e = K.exec(document.cookie);
            return e && e[1]

这样s的来源就非常清晰了,下面是我整理的生成s的代码:

function encryptCookie(cookie) {
  const K = new RegExp("d_c0=([^;]+)")
  const Q = function (string) {
    const e = K.exec(string);
    return e && e[1]
  }
  return Q(cookie)
}
const s = `${zse93}+${url}+${encryptCookie(cookie)}`

f()(s)过程

image.png
f()指向的函数在一个封闭的模块中,将该模块内的代码拷贝出来改写运行,验证相同s经过f()(s)得出的结果和浏览器得出的结果一致。

function o(e, t) {
  var n = (65535 & e) + (65535 & t);
  return (e >> 16) + (t >> 16) + (n >> 16) << 16 | 65535 & n
}
function a(e, t, n, r, i, a) {
  return o((c = o(o(t, e), o(r, a))) << (u = i) | c >>> 32 - u, n);
  var c, u
}
function c(e, t, n, r, i, o, c) {
  return a(t & n | ~t & r, e, t, i, o, c)
}
function u(e, t, n, r, i, o, c) {
  return a(t & r | n & ~r, e, t, i, o, c)
}
function s(e, t, n, r, i, o, c) {
  return a(t ^ n ^ r, e, t, i, o, c)
}
function l(e, t, n, r, i, o, c) {
  return a(n ^ (t | ~r), e, t, i, o, c)
}
function d(e, t) {
  var n, r, i, a, d;
  e[t >> 5] |= 128 << t % 32,
    e[14 + (t + 64 >>> 9 << 4)] = t;
  var f = 1732584193
    , p = -271733879
    , h = -1732584194
    , b = 271733878;
  for (n = 0; n < e.length; n += 16)
    r = f,
      i = p,
      a = h,
      d = b,
      f = c(f, p, h, b, e[n], 7, -680876936),
      b = c(b, f, p, h, e[n + 1], 12, -389564586),
      h = c(h, b, f, p, e[n + 2], 17, 606105819),
      p = c(p, h, b, f, e[n + 3], 22, -1044525330),
      f = c(f, p, h, b, e[n + 4], 7, -176418897),
      b = c(b, f, p, h, e[n + 5], 12, 1200080426),
      h = c(h, b, f, p, e[n + 6], 17, -1473231341),
      p = c(p, h, b, f, e[n + 7], 22, -45705983),
      f = c(f, p, h, b, e[n + 8], 7, 1770035416),
      b = c(b, f, p, h, e[n + 9], 12, -1958414417),
      h = c(h, b, f, p, e[n + 10], 17, -42063),
      p = c(p, h, b, f, e[n + 11], 22, -1990404162),
      f = c(f, p, h, b, e[n + 12], 7, 1804603682),
      b = c(b, f, p, h, e[n + 13], 12, -40341101),
      h = c(h, b, f, p, e[n + 14], 17, -1502002290),
      f = u(f, p = c(p, h, b, f, e[n + 15], 22, 1236535329), h, b, e[n + 1], 5, -165796510),
      b = u(b, f, p, h, e[n + 6], 9, -1069501632),
      h = u(h, b, f, p, e[n + 11], 14, 643717713),
      p = u(p, h, b, f, e[n], 20, -373897302),
      f = u(f, p, h, b, e[n + 5], 5, -701558691),
      b = u(b, f, p, h, e[n + 10], 9, 38016083),
      h = u(h, b, f, p, e[n + 15], 14, -660478335),
      p = u(p, h, b, f, e[n + 4], 20, -405537848),
      f = u(f, p, h, b, e[n + 9], 5, 568446438),
      b = u(b, f, p, h, e[n + 14], 9, -1019803690),
      h = u(h, b, f, p, e[n + 3], 14, -187363961),
      p = u(p, h, b, f, e[n + 8], 20, 1163531501),
      f = u(f, p, h, b, e[n + 13], 5, -1444681467),
      b = u(b, f, p, h, e[n + 2], 9, -51403784),
      h = u(h, b, f, p, e[n + 7], 14, 1735328473),
      f = s(f, p = u(p, h, b, f, e[n + 12], 20, -1926607734), h, b, e[n + 5], 4, -378558),
      b = s(b, f, p, h, e[n + 8], 11, -2022574463),
      h = s(h, b, f, p, e[n + 11], 16, 1839030562),
      p = s(p, h, b, f, e[n + 14], 23, -35309556),
      f = s(f, p, h, b, e[n + 1], 4, -1530992060),
      b = s(b, f, p, h, e[n + 4], 11, 1272893353),
      h = s(h, b, f, p, e[n + 7], 16, -155497632),
      p = s(p, h, b, f, e[n + 10], 23, -1094730640),
      f = s(f, p, h, b, e[n + 13], 4, 681279174),
      b = s(b, f, p, h, e[n], 11, -358537222),
      h = s(h, b, f, p, e[n + 3], 16, -722521979),
      p = s(p, h, b, f, e[n + 6], 23, 76029189),
      f = s(f, p, h, b, e[n + 9], 4, -640364487),
      b = s(b, f, p, h, e[n + 12], 11, -421815835),
      h = s(h, b, f, p, e[n + 15], 16, 530742520),
      f = l(f, p = s(p, h, b, f, e[n + 2], 23, -995338651), h, b, e[n], 6, -198630844),
      b = l(b, f, p, h, e[n + 7], 10, 1126891415),
      h = l(h, b, f, p, e[n + 14], 15, -1416354905),
      p = l(p, h, b, f, e[n + 5], 21, -57434055),
      f = l(f, p, h, b, e[n + 12], 6, 1700485571),
      b = l(b, f, p, h, e[n + 3], 10, -1894986606),
      h = l(h, b, f, p, e[n + 10], 15, -1051523),
      p = l(p, h, b, f, e[n + 1], 21, -2054922799),
      f = l(f, p, h, b, e[n + 8], 6, 1873313359),
      b = l(b, f, p, h, e[n + 15], 10, -30611744),
      h = l(h, b, f, p, e[n + 6], 15, -1560198380),
      p = l(p, h, b, f, e[n + 13], 21, 1309151649),
      f = l(f, p, h, b, e[n + 4], 6, -145523070),
      b = l(b, f, p, h, e[n + 11], 10, -1120210379),
      h = l(h, b, f, p, e[n + 2], 15, 718787259),
      p = l(p, h, b, f, e[n + 9], 21, -343485551),
      f = o(f, r),
      p = o(p, i),
      h = o(h, a),
      b = o(b, d);
  return [f, p, h, b]
}
function f(e) {
  var t, n = "", r = 32 * e.length;
  for (t = 0; t < r; t += 8)
    n += String.fromCharCode(e[t >> 5] >>> t % 32 & 255);
  return n
}
function p(e) {
  var t, n = [];
  for (n[(e.length >> 2) - 1] = void 0,
         t = 0; t < n.length; t += 1)
    n[t] = 0;
  var r = 8 * e.length;
  for (t = 0; t < r; t += 8)
    n[t >> 5] |= (255 & e.charCodeAt(t / 8)) << t % 32;
  return n
}
function h(e) {
  var t, n, r = "";
  for (n = 0; n < e.length; n += 1)
    t = e.charCodeAt(n),
      r += "0123456789abcdef".charAt(t >>> 4 & 15) + "0123456789abcdef".charAt(15 & t);
  return r
}
function b(e) {
  return unescape(encodeURIComponent(e))
}
function v(e) {
  return function(e) {
    return f(d(p(e), 8 * e.length))
  }(b(e))
}
function g(e, t) {
  return function(e, t) {
    var n, r, i = p(e), o = [], a = [];
    for (o[15] = a[15] = void 0,
         i.length > 16 && (i = d(i, 8 * e.length)),
           n = 0; n < 16; n += 1)
      o[n] = 909522486 ^ i[n],
        a[n] = 1549556828 ^ i[n];
    return r = d(o.concat(p(t)), 512 + 8 * t.length),
      f(d(a.concat(r), 640))
  }(b(e), b(t))
}
const md5 = function(e, t, n) {
  return t ? n ? g(t, e) : h(g(t, e)) : n ? v(e) : h(v(e))
}

module.exports = {md5}

将代码中的特殊数字搜索下,大概可以推测出该函数是在做md5加密。执行该函数验证与实际md5加密函数结果一致,因此断定这里f()(s)就是在对smd5加密,至此f()(s)分析完成。
image.png

F(r).encrypt()过程

image.png
断点调试跳转至D函数中,D也是在一个封闭的模块,将D模块函数拷贝出来运行,但跟之前md5函数不同的是,拷贝出来的代码会运行报错。首先放到node环境中运行报错TypeError: __g._encrypt is not a function,而放到浏览器控制台运行报错exports is not defined。针对exports报错直接在开头补上

exports = {}

补上后,浏览器控制台可直接运行该代码获得可用的x-zse-96参数。但nodejs中依然报__g._encrypt is not a function,这说明在node环境中缺少了一些浏览器包含的可用api。

3.补环境

jsdom

jsdom是常用的补环境的包,补充在node中运行时相对浏览器缺失的一些环境。
最常见的缺失就是window,先用jsdom补上

const jsdom = require("jsdom");
const {JSDOM} = jsdom;
const dom = new JSDOM(`<!DOCTYPE html><html lang="cn"><head></head><body></body></html>`);
window = dom.window;

补上后,依然报错__g._encrypt is not a function,找到入口代码:

"undefined" != typeof window && (S.__ZH__ = S.__ZH__ || {},
  h = S.__ZH__.zse = S.__ZH__.zse || {},
  (new l).O("ABt7CAAUSAAACADfSAAACAD1SAAACAAHSAAACAD4SAAACAACSAAACADCSAAACADRSAAACABXSAAACAAGSAAACADjSAAACAD9SAAACADwSAAACACASAAACADeSAAACABbSAAACADtSAAACAAJSAAACAB9SAAACACdSAAACADmSAAACABdSAAACAD8SAAACADNSAAACABaSAAACABPSAAACACQSAAACADHSAAACACfSAAACADFSAAACAC6SAAACACnSAAACAAnSAAACAAlSAAACACcSAAACADGSAAACAAmSAAACAAqSAAACAArSAAACACoSAAACADZSAAACACZSAAACAAPSAAACABnSAAACABQSAAACAC9SAAACABHSAAACAC/SAAACABhSAAACABUSAAACAD3SAAACABfSAAACAAkSAAACABFSAAACAAOSAAACAAjSAAACAAMSAAACACrSAAACAAcSAAACABySAAACACySAAACACUSAAACABWSAAACAC2SAAACAAgSAAACABTSAAACACeSAAACABtSAAACAAWSAAACAD/SAAACABeSAAACADuSAAACACXSAAACABVSAAACABNSAAACAB8SAAACAD+SAAACAASSAAACAAESAAACAAaSAAACAB7SAAACACwSAAACADoSAAACADBSAAACACDSAAACACsSAAACACPSAAACACOSAAACACWSAAACAAeSAAACAAKSAAACACSSAAACACiSAAACAA+SAAACADgSAAACADaSAAACADESAAACADlSAAACAABSAAACADASAAACADVSAAACAAbSAAACABuSAAACAA4SAAACADnSAAACAC0SAAACACKSAAACABrSAAACADySAAACAC7SAAACAA2SAAACAB4SAAACAATSAAACAAsSAAACAB1SAAACADkSAAACADXSAAACADLSAAACAA1SAAACADvSAAACAD7SAAACAB/SAAACABRSAAACAALSAAACACFSAAACABgSAAACADMSAAACACESAAACAApSAAACABzSAAACABJSAAACAA3SAAACAD5SAAACACTSAAACABmSAAACAAwSAAACAB6SAAACACRSAAACABqSAAACAB2SAAACABKSAAACAC+SAAACAAdSAAACAAQSAAACACuSAAACAAFSAAACACxSAAACACBSAAACAA/SAAACABxSAAACABjSAAACAAfSAAACAChSAAACABMSAAACAD2SAAACAAiSAAACADTSAAACAANSAAACAA8SAAACABESAAACADPSAAACACgSAAACABBSAAACABvSAAACABSSAAACAClSAAACABDSAAACACpSAAACADhSAAACAA5SAAACABwSAAACAD0SAAACACbSAAACAAzSAAACADsSAAACADISAAACADpSAAACAA6SAAACAA9SAAACAAvSAAACABkSAAACACJSAAACAC5SAAACABASAAACAARSAAACABGSAAACADqSAAACACjSAAACADbSAAACABsSAAACACqSAAACACmSAAACAA7SAAACACVSAAACAA0SAAACABpSAAACAAYSAAACADUSAAACABOSAAACACtSAAACAAtSAAACAAASAAACAB0SAAACADiSAAACAB3SAAACACISAAACADOSAAACACHSAAACACvSAAACADDSAAACAAZSAAACABcSAAACAB5SAAACADQSAAACAB+SAAACACLSAAACAADSAAACABLSAAACACNSAAACAAVSAAACACCSAAACABiSAAACADxSAAACAAoSAAACACaSAAACABCSAAACAC4SAAACAAxSAAACAC1SAAACAAuSAAACADzSAAACABYSAAACABlSAAACAC3SAAACAAISAAACAAXSAAACABISAAACAC8SAAACABoSAAACACzSAAACADSSAAACACGSAAACAD6SAAACADJSAAACACkSAAACABZSAAACADYSAAACADKSAAACADcSAAACAAySAAACADdSAAACACYSAAACACMSAAACAAhSAAACADrSAAACADWSAAAeIAAEAAACAB4SAAACAAySAAACABiSAAACABlSAAACABjSAAACABiSAAACAB3SAAACABkSAAACABnSAAACABrSAAACABjSAAACAB3SAAACABhSAAACABjSAAACABuSAAACABvSAAAeIABEAABCABkSAAACAAzSAAACABkSAAACAAySAAACABlSAAACAA3SAAACAAySAAACAA2SAAACABmSAAACAA1SAAACAAwSAAACABkSAAACAA0SAAACAAxSAAACAAwSAAACAAxSAAAeIABEAACCAAgSAAATgACVAAAQAAGEwADDAADSAAADAACSAAADAAASAAACANcIAADDAADSAAASAAATgADVAAATgAEUAAATgAFUAAATgAGUgAADAAASAAASAAATgADVAAATgAEUAAATgAFUAAATgAHUgAADAABSAAASAAATgADVAAATgAEUAAATgAFUAAATgAIUgAAcAgUSMAATgAJVAAATgAKUgAAAAAADAABSAAADAAAUAAACID/GwQPCAAYG2AREwAGDAABCIABGwQASMAADAAAUAAACID/GwQPCAAQG2AREwAHDAABCIACGwQASMAADAAAUAAACID/GwQPCAAIG2AREwAIDAABCIADGwQASMAADAAAUAAACID/GwQPEwAJDYAGDAAHG2ATDAAIG2ATDAAJG2ATKAAACAD/DIAACQAYGygSGwwPSMAASMAADAACSAAADAABUgAACAD/DIAACQAQGygSGwwPSMAASMAADAACCIABGwQASMAADAABUgAACAD/DIAACQAIGygSGwwPSMAASMAADAACCIACGwQASMAADAABUgAACAD/DIAAGwQPSMAASMAADAACCIADGwQASMAADAABUgAAKAAACAAgDIABGwQBEwANDAAAWQALGwQPDAABG2AREwAODAAODIAADQANGygSGwwTEwAPDYAPKAAACAAESAAATgACVAAAQAAGEwAQCAAESAAATgACVAAAQAAGEwAFDAAASAAADAAQSAAACAAASAAACAKsIAADCAAASAAADAAQUAAACID/GwQPSMAADAABUAAASAAASAAACAAASAAADAAFUgAACAABSAAADAAQUAAACID/GwQPSMAADAABUAAASAAASAAACAABSAAADAAFUgAACAACSAAADAAQUAAACID/GwQPSMAADAABUAAASAAASAAACAACSAAADAAFUgAACAADSAAADAAQUAAACID/GwQPSMAADAABUAAASAAASAAACAADSAAADAAFUgAADAAFSAAACAAASAAACAJ8IAACEwARDAARSAAACAANSAAACALdIAACEwASDAARSAAACAAXSAAACALdIAACEwATDAARDIASGwQQDAATG2AQEwAUDYAUKAAAWAAMSAAAWAANSAAAWAAOSAAAWAAPSAAAWAAQSAAAWAARSAAAWAASSAAAWAATSAAAWAAUSAAAWAAVSAAAWAAWSAAAWAAXSAAAWAAYSAAAWAAZSAAAWAAaSAAAWAAbSAAAWAAcSAAAWAAdSAAAWAAeSAAAWAAfSAAAWAAgSAAAWAAhSAAAWAAiSAAAWAAjSAAAWAAkSAAAWAAlSAAAWAAmSAAAWAAnSAAAWAAoSAAAWAApSAAAWAAqSAAAWAArSAAAeIAsEAAXWAAtSAAAWAAuSAAAWAAvSAAAWAAwSAAAeIAxEAAYCAAESAAATgACVAAAQAAGEwAZCAAkSAAATgACVAAAQAAGEwAaDAABSAAACAAASAAACAJ8IAACSMAASMAACAAASAAADAAZUgAADAABSAAACAAESAAACAJ8IAACSMAASMAACAABSAAADAAZUgAADAABSAAACAAISAAACAJ8IAACSMAASMAACAACSAAADAAZUgAADAABSAAACAAMSAAACAJ8IAACSMAASMAACAADSAAADAAZUgAACAAASAAADAAZUAAACIAASEAADIAYUEgAGwQQSMAASMAACAAASAAADAAaUgAACAABSAAADAAZUAAACIABSEAADIAYUEgAGwQQSMAASMAACAABSAAADAAaUgAACAACSAAADAAZUAAACIACSEAADIAYUEgAGwQQSMAASMAACAACSAAADAAaUgAACAADSAAADAAZUAAACIADSEAADIAYUEgAGwQQSMAASMAACAADSAAADAAaUgAACAAAEAAJDAAJCIAgGwQOMwAGOBG2DAAJCIABGwQASMAADAAaUAAAEAAbDAAJCIACGwQASMAADAAaUAAAEAAcDAAJCIADGwQASMAADAAaUAAAEAAdDAAbDIAcGwQQDAAdG2AQDAAJSAAADAAXUAAAG2AQEwAeDAAeSAAADAACSAAACALvIAACEwAfDAAJSAAADAAaUAAADIAfGwQQSMAASMAADAAJCIAEGwQASMAADAAaUgAADAAJCIAEGwQASMAADAAaUAAASAAASAAADAAJSAAADAAAUgAADAAJCIABGQQAEQAJOBCIKAAADAABTgAyUAAACIAQGwQEEwAVCAAQDIAVGwQBEwAKCAAAEAAhDAAhDIAKGwQOMwAGOBImDAAKSAAADAABTgAzQAAFDAAhCIABGQQAEQAhOBHoCAAASAAACAAQSAAADAABTgA0QAAJEwAiCAAQSAAATgACVAAAQAAGEwAjCAAAEAALDAALCIAQGwQOMwAGOBLSDAALSAAADAAiUAAADIALSEAADIAAUEgAGwQQCAAqG2AQSMAASMAADAALSAAADAAjUgAA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"));
var D = function(e) {
  return __g._encrypt(encodeURIComponent(e))
};
exports.ENCRYPT_VERSION = A,
  exports.default = D

以上代码入口中,O指向了一个带有try...catch...的代码块,在catch处打印出具体的错误,坚持缺什么补什么的原则,补齐缺失的环境。下面将一步一步分析调试过程中的缺失的参数。

atob

image.png
前一步中我们已经补上了window,此处atob直接指向window.atob即可

const atob = window.atob

补上atob后,D函数已经可以在node环境中运行且可以拿到一串长得比较对劲的字符串了。但放到接口中运行,发现接口竟然还是拿不到数据。
image.png

这说明这串加密字符串中,包含了D函数中的环境检测结果。且补了atob函数后,咱们执行try...catch...还在报错呢,只有一步步扣下去。

document navigator location history screen

image.png

document navigator location history screen的缺失,通过补充以下代码解决:

const document = window.document;
const navigator = window.navigator
const location = window.location
const history = window.history
const screen = window.screen

补充好以上代码后,代码执行无任何报错,但运行的结果去请求接口依然无法获取到数据。

关键代码分析

  • 准备断点调试代码,但只要一断点代码,代码又会报错__g._encrypt is not a function回到原点,这说明这坨代码中包含了时间检测。
  • 虽然这坨字节码咱们基本上看不懂,但里面有些关键词还是能看懂的,首先需要关注的就是eval执行了什么。代码中有4个eval,打印出来看下执行了什么。已知浏览器执行该函数后的结果是正确的,执行对比node和浏览器环境差异,发现浏览器在case 254: 处执行了134次,而在node环境中只执行86次。这说明在中间某些过程循环被断掉了。
    image.png
  • 对比两边的结果是在第81次执行时出现差异的。关注charCodeAt代码,执行打印。在第80次执行代码时,case 440: 部分代码出现差异,具体差异如下:
    image.png
  • 由上图推测,这段代码可能在执行document.toString().indexOf('HTMLDocument'),在浏览器上执行时返回8,而在node环境中返回-1
  • 上面只是在推测分析,下面将使用ES6特性Proxy来代理可能被检测的对象,看看哪些属性被读取了且返回值与浏览器中执行结果不一致。

代理被检测对象

  • 添加以下代码代理被检测对象:

    window = new Proxy(window, {
    set(target, property, value, receiver) {
      return Reflect.set(target, property, receiver);
    },
    get(target, property, receiver) {
      console.log('window', property, '属性被读取了')
      return Reflect.get(target, property, receiver);
    }
    })
    
    document = new Proxy(document, {
    set(target, property, value, receiver) {
      return Reflect.set(target, property, receiver);
    },
    get(target, property, receiver) {
      console.log('document', property, '属性被读取了')
      return Reflect.get(target, property, receiver);
    }
    })
    
    navigator = new Proxy(navigator, {
    set(target, property, value, receiver) {
      return Reflect.set(target, property, receiver);
    },
    get(target, property, receiver) {
      console.log('navigator', property, '属性被读取了')
      return Reflect.get(target, property, receiver);
    }
    })
    
    location = new Proxy(location, {
    set(target, property, value, receiver) {
      return Reflect.set(target, property, receiver);
    },
    get(target, property, receiver) {
      console.log('location', property, '属性被读取了')
      return Reflect.get(target, property, receiver);
    }
    })
    
    history = new Proxy(history, {
    set(target, property, value, receiver) {
      return Reflect.set(target, property, receiver);
    },
    get(target, property, receiver) {
      console.log('history', property, '属性被读取了')
      return Reflect.get(target, property, receiver);
    }
    })
    
    screen = new Proxy(screen, {
    set(target, property, value, receiver) {
      return Reflect.set(target, property, receiver);
    },
    get(target, property, receiver) {
      console.log('screen', property, '属性被读取了')
      return Reflect.get(target, property, receiver);
    }
    })

    document.toString()

  • 执行代码,发现在第80次执行case 254后,document的确是被读取了toString属性。hook toString方法,使node返回值与浏览器该属性的返回值一致;
    image.png

    let ObjectToString = Object.prototype.toString
    Object.prototype.toString = function () {
      if (this.constructor.name === 'Document') {
        return '[object HTMLDocument]'
      }
      return ObjectToString.call(this, arguments)
    }
  • 到这一步,执行代码发现case 254:代码可以由原来的86次到可以执行到88次了,这说明分析方向没错,就继续按照此步继续分析被读取的属性,遇到什么属性的返回值不一致,就hook对应的方法。

    location.toString()

  • 继续执行到第82次,location出现差异,合理怀疑是在校验location.toString().indexOf('http')
    image.png
  • 改写之前dom生成的代码,增加url参数,解决location的校验。运行后,发现case 254的运行总次数变为94了。

    const dom = new JSDOM(`<!DOCTYPE html><html lang="cn"><head></head><body></body></html>`, {url: 'http://www.baidu.com'});

    document.createElement('canvas').getContext('2d').toString()

  • 继续执行代码,发现报另一个错Error: Not implemented: HTMLCanvasElement.prototype.getContext (without installing the canvas npm package),这是因为缺少了canvas的包,npm install canvas即可。
  • 继续执行,两边的差异如下,合理怀疑是在校验document.createElement('canvas').getContext('2d').toString().indexOf('Canvas'),在浏览器上执行返回8,在node上返回-1。document.createElement('canvas').getContext('2d').toString()在node中返回结果[object Object] 而在浏览器中返回为[object CanvasRenderingContext2D]
    image.png
  • 在前面我们改写的ObjectToString中增加CanvasRenderingContext2D劫持代码:

    Object.prototype.toString = function () {
    if (this.constructor.name === 'Document') {
      ...
    }else if(this.constructor.name === 'CanvasRenderingContext2D') {
      return '[object CanvasRenderingContext2D]'
    }
    ...
    }

    window._resourceLoader ._sessionHistory

  • 继续分析,代码执行到第105次时,怀疑是在校验window._resourceLoader === undefined,此代码在浏览器环境下返回true,而node中返回false
    image.png
    加入以下代码解决此问题:

    window._resourceLoader = undefined

    解决后,继续跟踪发现_sessionHistory也在同样的校验,同样是加入以下代码解决:

    window._sessionHistory = undefined

    alert

  • 继续执行,发现代码报错
    image.png
    补充alert的定义即可:

    alert = window.alert

    window.__proto__.constructor.toString()

  • 继续执行,发现浏览器结果差异与node结果差异出现在第114次执行,推测是在校验window.__proto__.constructor.toString().indexOf('[native code]')
    image.png
    image.png
    加入以下代码解决:

    let FunctionToString = Function.prototype.toString
    Function.prototype.toString = function () {
    if(this.name === 'Window') {
      return 'function Window() { [native code] }'
    }
    return FunctionToString.call(this, arguments)
    }

    到这一步,代码可以执行到133次了。去掉前面咱们加上的window document navigator location history screen的代码。代码无报错,执行次数与浏览器中运行次数相同。再拿运行结果到postman中测试,可以正常拿到结果。
    image.png
    至此代码分析完成。

    4.完整代码

    以下代码中的md5部分在前面已提供,就不在此处列出了。

    const md5 = require('./md5')
    const jsdom = require("jsdom");
    const {JSDOM} = jsdom;
    const dom = new JSDOM(`<!DOCTYPE html><html lang="cn"><head></head><body></body></html>`, {url:'https://www.zhihu.com/search'});
    const window = dom.window;
    const document = window.document;
    const navigator = window.navigator
    const location = window.location
    const history = window.history
    const screen = window.screen
    const alert = window.alert
    
    let ObjectToString = Object.prototype.toString
    Object.prototype.toString = function () {
    if(this.constructor.name === 'Document') {
      return '[object HTMLDocument]'
    } else if(this.constructor.name === 'CanvasRenderingContext2D') {
      return '[object CanvasRenderingContext2D]'
    }
    return ObjectToString.call(this, arguments)
    }
    window._resourceLoader = undefined
    window._sessionHistory = undefined
    
    let FunctionToString = Function.prototype.toString
    Function.prototype.toString = function () {
    if(this.name === 'Window') {
      return 'function Window() { [native code] }'
    }
    return FunctionToString.call(this, arguments)
    }
    exports = {}
    function o(e) {
    return (o = "function" == typeof Symbol && "symbol" == typeof Symbol.A ? function(e) {
          return typeof e
        }
        : function(e) {
          return e && "function" == typeof Symbol && e.constructor === Symbol && e !== Symbol.prototype ? "symbol" : typeof e
        }
    )(e)
    }
    function x(e) {
    return C(e) || s(e) || t()
    }
    function C(e) {
    if (Array.isArray(e)) {
      for (var t = 0, n = new Array(e.length); t < e.length; t++)
        n[t] = e[t];
      return n
    }
    }
    function s(e) {
    if (Symbol.A in Object(e) || "[object Arguments]" === Object.prototype.toString.call(e))
      return Array.from(e)
    }
    function t() {
    throw new TypeError("Invalid attempt to spread non-iterable instance")
    }
    Object.defineProperty(exports, "__esModule", {
    value: !0
    });
    var A = "3.0", S = "undefined" != typeof window ? window : {}, h;
    function i(e, t, n) {
    t[n] = 255 & e >>> 24,
      t[n + 1] = 255 & e >>> 16,
      t[n + 2] = 255 & e >>> 8,
      t[n + 3] = 255 & e
    }
    function B(e, t) {
    return (255 & e[t]) << 24 | (255 & e[t + 1]) << 16 | (255 & e[t + 2]) << 8 | 255 & e[t + 3]
    }
    function Q(e, t) {
    return (4294967295 & e) << t | e >>> 32 - t
    }
    function G(e) {
    var t = new Array(4)
      , n = new Array(4);
    i(e, t, 0),
      n[0] = h.zb[255 & t[0]],
      n[1] = h.zb[255 & t[1]],
      n[2] = h.zb[255 & t[2]],
      n[3] = h.zb[255 & t[3]];
    var r = B(n, 0);
    return r ^ Q(r, 2) ^ Q(r, 10) ^ Q(r, 18) ^ Q(r, 24)
    }
    var __g = {
    x: function(e, t) {
      for (var n = [], r = e.length, i = 0; 0 < r; r -= 16) {
        for (var o = e.slice(16 * i, 16 * (i + 1)), a = new Array(16), c = 0; c < 16; c++)
          a[c] = o[c] ^ t[c];
        t = __g.r(a),
          n = n.concat(t),
          i++
      }
      return n
    },
    r: function(e) {
      var t = new Array(16)
        , n = new Array(36);
      n[0] = B(e, 0),
        n[1] = B(e, 4),
        n[2] = B(e, 8),
        n[3] = B(e, 12);
      for (var r = 0; r < 32; r++) {
        var o = G(n[r + 1] ^ n[r + 2] ^ n[r + 3] ^ h.zk[r]);
        n[r + 4] = n[r] ^ o
      }
      return i(n[35], t, 0),
        i(n[34], t, 4),
        i(n[33], t, 8),
        i(n[32], t, 12),
        t
    }
    };
    function l() {
    this.C = [0, 0, 0, 0],
      this.s = +[],
      this.t = [],
      this.S = [],
      this.h = [],
      this.i = [],
      this.B = [],
      this.Q = !1,
      this.G = [],
      this.D = [],
      this.w = 1024,
      this.g = null,
      this.a = Date.now(),
      this.e = +[],
      this.T = 255,
      this.V = null,
      this.U = Date.now,
      this.M = new Array(32)
    }
    l.prototype.O = function(A, C, s) {
    for (var t, S, h, i, B, Q, G, D, w, g, a, e, E, T, r, V, U, M, O, c, I; this.T < this.w; )
      try {
        switch (this.T) {
          case 27:
            this.C[this.c] = this.C[this.I] >> this.C[this.F],
              this.M[12] = 35,
              this.T = this.T * (this.C.length + (this.M[13] ? 3 : 9)) + 1;
            break;
          case 34:
            this.C[this.c] = this.C[this.I] & this.C[this.F],
              this.T = this.T * (this.M[15] - 6) + 12;
            break;
          case 41:
            this.C[this.c] = this.C[this.I] <= this.C[this.F],
              this.T = 8 * this.T + 27;
            break;
          case 48:
            this.C[this.c] = !this.C[this.I],
              this.T = 7 * this.T + 16;
            break;
          case 50:
            this.C[this.c] = this.C[this.I] | this.C[this.F],
              this.T = 6 * this.T + 52;
            break;
          case 57:
            this.C[this.c] = this.C[this.I] >>> this.C[this.F],
              this.T = 7 * this.T - 47;
            break;
          case 64:
            this.C[this.c] = this.C[this.I] << this.C[this.F],
              this.T = 5 * this.T + 32;
            break;
          case 71:
            this.C[this.c] = this.C[this.I] ^ this.C[this.F],
              this.T = 6 * this.T - 74;
            break;
          case 78:
            this.C[this.c] = this.C[this.I] & this.C[this.F],
              this.T = 4 * this.T + 40;
            break;
          case 80:
            this.C[this.c] = this.C[this.I] < this.C[this.F],
              this.T = 5 * this.T - 48;
            break;
          case 87:
            this.C[this.c] = -this.C[this.I],
              this.T = 3 * this.T + 91;
            break;
          case 94:
            this.C[this.c] = this.C[this.I] > this.C[this.F],
              this.T = 4 * this.T - 24;
            break;
          case 101:
            this.C[this.c] = this.C[this.I]in this.C[this.F],
              this.T = 3 * this.T + 49;
            break;
          case 108:
            this.C[this.c] = o(this.C[this.I]),
              this.T = 2 * this.T + 136;
            break;
          case 110:
            this.C[this.c] = this.C[this.I] !== this.C[this.F],
              this.T += 242;
            break;
          case 117:
            this.C[this.c] = this.C[this.I] && this.C[this.F],
              this.T = 3 * this.T + 1;
            break;
          case 124:
            this.C[this.c] = this.C[this.I] || this.C[this.F],
              this.T += 228;
            break;
          case 131:
            this.C[this.c] = this.C[this.I] >= this.C[this.F],
              this.T = 3 * this.T - 41;
            break;
          case 138:
            this.C[this.c] = this.C[this.I] == this.C[this.F],
              this.T = 2 * this.T + 76;
            break;
          case 140:
            this.C[this.c] = this.C[this.I] % this.C[this.F],
              this.T += 212;
            break;
          case 147:
            this.C[this.c] = this.C[this.I] / this.C[this.F],
              this.T += 205;
            break;
          case 154:
            this.C[this.c] = this.C[this.I] * this.C[this.F],
              this.T += 198;
            break;
          case 161:
            this.C[this.c] = this.C[this.I] - this.C[this.F],
              this.T += 191;
            break;
          case 168:
            this.C[this.c] = this.C[this.I] + this.C[this.F],
              this.T = 2 * this.T + 16;
            break;
          case 254:
            this.C[this.c] = eval(i),
              this.T += 20 < this.M[11] ? 98 : 89;
            break;
          case 255:
            this.s = C || 0,
              this.M[26] = 52,
              this.T += this.M[13] ? 8 : 6;
            break;
          case 258:
            g = {};
            for (var F = 0; F < this.k; F++)
              e = this.i.pop(),
                a = this.i.pop(),
                g[a] = e;
            this.C[this.W] = g,
              this.T += 94;
            break;
          case 261:
            this.D = s || [],
              this.M[11] = 68,
              this.T += this.M[26] ? 3 : 5;
            break;
          case 264:
            this.M[15] = 16,
              this.T = "string" == typeof A ? 331 : 336;
            break;
          case 266:
            this.C[this.I][i] = this.i.pop(),
              this.T += 86;
            break;
          case 278:
            this.C[this.c] = this.C[this.I][i],
              this.T += this.M[22] ? 63 : 74;
            break;
          case 283:
            this.C[this.c] = eval(String.fromCharCode(this.C[this.I]));
            break;
          case 300:
            S = this.U(),
              this.M[0] = 66,
              this.T += this.M[11];
            break;
          case 331:
            D = window.atob(A),
              w = D.charCodeAt(0) << 16 | D.charCodeAt(1) << 8 | D.charCodeAt(2);
            for (var k = 3; k < w + 3; k += 3)
              this.G.push(D.charCodeAt(k) << 16 | D.charCodeAt(k + 1) << 8 | D.charCodeAt(k + 2));
            for (V = w + 3; V < D.length; )
              E = D.charCodeAt(V) << 8 | D.charCodeAt(V + 1),
                T = D.slice(V + 2, V + 2 + E),
                this.D.push(T),
                V += E + 2;
            this.M[21] = 8,
              this.T += 1e3 < V ? 21 : 35;
            break;
          case 336:
            this.G = A,
              this.D = s,
              this.M[18] = 134,
              this.T += this.M[15];
            break;
          case 344:
            this.T = 3 * this.T - 8;
            break;
          case 350:
            U = 66,
              M = [],
              I = this.D[this.k];
            for (var W = 0; W < I.length; W++)
              M.push(String.fromCharCode(24 ^ I.charCodeAt(W) ^ U)),
                U = 24 ^ I.charCodeAt(W) ^ U;
            r = parseInt(M.join("").split("|")[1]),
              this.C[this.W] = this.i.slice(this.i.length - r),
              this.i = this.i.slice(0, this.i.length - r),
              this.T += 2;
            break;
          case 352:
            this.e = this.G[this.s++],
              this.T -= this.M[26];
            break;
          case 360:
            this.a = S,
              this.T += this.M[0];
            break;
          case 368:
            this.T -= 500 < S - this.a ? 24 : 8;
            break;
          case 380:
            this.i.push(16383 & this.e),
              this.T -= 28;
            break;
          case 400:
            this.i.push(this.S[16383 & this.e]),
              this.T -= 48;
            break;
          case 408:
            this.T -= 64;
            break;
          case 413:
            this.C[this.e >> 15 & 7] = (this.e >> 18 & 1) == +[] ? 32767 & this.e : this.S[32767 & this.e],
              this.T -= 61;
            break;
          case 418:
            this.S[65535 & this.e] = this.C[this.e >> 16 & 7],
              this.T -= this.e >> 16 < 20 ? 66 : 80;
            break;
          case 423:
            this.c = this.e >> 16 & 7,
              this.I = this.e >> 13 & 7,
              this.F = this.e >> 10 & 7,
              this.J = 1023 & this.e,
              this.T -= 255 + 6 * this.J + this.J % 5;
            break;
          case 426:
            this.T += 5 * (this.e >> 19) - 18;
            break;
          case 428:
            this.W = this.e >> 16 & 7,
              this.k = 65535 & this.e,
              this.t.push(this.s),
              this.h.push(this.S),
              this.s = this.C[this.W],
              this.S = [];
            for (var J = 0; J < this.k; J++)
              this.S.unshift(this.i.pop());
            this.B.push(this.i),
              this.i = [],
              this.T -= 76;
            break;
          case 433:
            this.s = this.t.pop(),
              this.S = this.h.pop(),
              this.i = this.B.pop(),
              this.T -= 81;
            break;
          case 438:
            this.Q = this.C[this.e >> 16 & 7],
              this.T -= 86;
            break;
          case 440:
            U = 66,
              M = [],
              I = this.D[16383 & this.e];
            for (var b = 0; b < I.length; b++)
              M.push(String.fromCharCode(24 ^ I.charCodeAt(b) ^ U)),
                U = 24 ^ I.charCodeAt(b) ^ U;
            M = M.join("").split("|"),
              O = parseInt(M.shift()),
              this.i.push(O === +[] ? M.join("|") : O === +!+[] ? -1 !== M.join().indexOf(".") ? parseInt(M.join()) : parseFloat(M.join()) : O === !+[] + !+[] ? eval(M.join()) : 3 === O ? null : void 0),
              this.T -= 88;
            break;
          case 443:
            this.b = this.e >> 2 & 65535,
              this.J = 3 & this.e,
              this.J === +[] ? this.s = this.b : this.J === +!+[] ? !!this.Q && (this.s = this.b) : 2 === this.J ? !this.Q && (this.s = this.b) : this.s = this.b,
              this.g = null,
              this.T -= 91;
            break;
          case 445:
            this.i.push(this.C[this.e >> 14 & 7]),
              this.T -= 93;
            break;
          case 448:
            this.W = this.e >> 16 & 7,
              this.k = this.e >> 2 & 4095,
              this.J = 3 & this.e,
              Q = this.J === +!+[] && this.i.pop(),
              G = this.i.slice(this.i.length - this.k, this.i.length),
              this.i = this.i.slice(0, this.i.length - this.k),
              c = 2 < G.length ? 3 : G.length,
              this.T += 6 * this.J + 1 + 10 * c;
            break;
          case 449:
            this.C[3] = this.C[this.W](),
              this.T -= 97 - G.length;
            break;
          case 455:
            this.C[3] = this.C[this.W][Q](),
              this.T -= 103 + G.length;
            break;
          case 453:
            B = this.e >> 17 & 3,
              this.T = B === +[] ? 445 : B === +!+[] ? 380 : B === !+[] + !+[] ? 400 : 440;
            break;
          case 458:
            this.J = this.e >> 17 & 3,
              this.c = this.e >> 14 & 7,
              this.I = this.e >> 11 & 7,
              i = this.i.pop(),
              this.T -= 12 * this.J + 180;
            break;
          case 459:
            this.C[3] = this.C[this.W](G[+[]]),
              this.T -= 100 + 7 * G.length;
            break;
          case 461:
            this.C[3] = new this.C[this.W],
              this.T -= 109 - G.length;
            break;
          case 463:
            U = 66,
              M = [],
              I = this.D[65535 & this.e];
            for (var n = 0; n < I.length; n++)
              M.push(String.fromCharCode(24 ^ I.charCodeAt(n) ^ U)),
                U = 24 ^ I.charCodeAt(n) ^ U;
            M = M.join("").split("|"),
              O = parseInt(M.shift()),
              this.T += 10 * O + 3;
            break;
          case 465:
            this.C[3] = this.C[this.W][Q](G[+[]]),
              this.T -= 13 * G.length + 100;
            break;
          case 466:
            this.C[this.e >> 16 & 7] = M.join("|"),
              this.T -= 114 * M.length;
            break;
          case 468:
            this.g = 65535 & this.e,
              this.T -= 116;
            break;
          case 469:
            this.C[3] = this.C[this.W](G[+[]], G[1]),
              this.T -= 119 - G.length;
            break;
          case 471:
            this.C[3] = new this.C[this.W](G[+[]]),
              this.T -= 118 + G.length;
            break;
          case 473:
            throw this.C[this.e >> 16 & 7];
          case 475:
            this.C[3] = this.C[this.W][Q](G[+[]], G[1]),
              this.T -= 123;
            break;
          case 476:
            this.C[this.e >> 16 & 7] = -1 !== M.join().indexOf(".") ? parseInt(M.join()) : parseFloat(M.join()),
              this.T -= this.M[21] < 10 ? 124 : 126;
            break;
          case 478:
            t = [0].concat(x(this.S)),
              this.V = 65535 & this.e,
              h = this,
              this.C[3] = function(e) {
                var n = new l;
                return n.S = t,
                  n.S[0] = e,
                  n.O(h.G, h.V, h.D),
                  n.C[3]
              }
              ,
              this.T -= 50 < this.M[3] ? 120 : 126;
            break;
          case 479:
            this.C[3] = this.C[this.W].apply(null, G),
              this.M[3] = 168,
              this.T -= this.M[9] ? 127 : 128;
            break;
          case 481:
            this.C[3] = new this.C[this.W](G[+[]],G[1]),
              this.T -= 10 * G.length + 109;
            break;
          case 483:
            this.J = this.e >> 15 & 15,
              this.W = this.e >> 12 & 7,
              this.k = 4095 & this.e,
              this.T = 0 === this.J ? 258 : 350;
            break;
          case 485:
            this.C[3] = this.C[this.W][Q].apply(null, G),
              this.T -= this.M[15] % 2 == 1 ? 143 : 133;
            break;
          case 486:
            this.C[this.e >> 16 & 7] = eval(M.join()),
              this.T -= this.M[18];
            break;
          case 491:
            this.C[3] = new this.C[this.W].apply(null,G),
              this.T -= this.M[8] / this.M[1] < 10 ? 139 : 130;
            break;
          case 496:
            this.C[this.e >> 16 & 7] = null,
              this.T -= 10 < this.M[5] - this.M[3] ? 160 : 144;
            break;
          case 506:
            this.C[this.e >> 16 & 7] = void 0,
              this.T -= this.M[18] % this.M[12] == 1 ? 154 : 145;
            break;
          default:
            this.T = this.w
        }
      } catch (A) {
        this.g && (this.s = this.g),
          this.T -= 114
      }
    }
    ,
    "undefined" != typeof window && (S.__ZH__ = S.__ZH__ || {},
    h = S.__ZH__.zse = S.__ZH__.zse || {},
    (new l).O("ABt7CAAUSAAACADfSAAACAD1SAAACAAHSAAACAD4SAAACAACSAAACADCSAAACADRSAAACABXSAAACAAGSAAACADjSAAACAD9SAAACADwSAAACACASAAACADeSAAACABbSAAACADtSAAACAAJSAAACAB9SAAACACdSAAACADmSAAACABdSAAACAD8SAAACADNSAAACABaSAAACABPSAAACACQSAAACADHSAAACACfSAAACADFSAAACAC6SAAACACnSAAACAAnSAAACAAlSAAACACcSAAACADGSAAACAAmSAAACAAqSAAACAArSAAACACoSAAACADZSAAACACZSAAACAAPSAAACABnSAAACABQSAAACAC9SAAACABHSAAACAC/SAAACABhSAAACABUSAAACAD3SAAACABfSAAACAAkSAAACABFSAAACAAOSAAACAAjSAAACAAMSAAACACrSAAACAAcSAAACABySAAACACySAAACACUSAAACABWSAAACAC2SAAACAAgSAAACABTSAAACACeSAAACABtSAAACAAWSAAACAD/SAAACABeSAAACADuSAAACACXSAAACABVSAAACABNSAAACAB8SAAACAD+SAAACAASSAAACAAESAAACAAaSAAACAB7SAAACACwSAAACADoSAAACADBSAAACACDSAAACACsSAAACACPSAAACACOSAAACACWSAAACAAeSAAACAAKSAAACACSSAAACACiSAAACAA+SAAACADgSAAACADaSAAACADESAAACADlSAAACAABSAAACADASAAACADVSAAACAAbSAAACABuSAAACAA4SAAACADnSAAACAC0SAAACACKSAAACABrSAAACADySAAACAC7SAAACAA2SAAACAB4SAAACAATSAAACAAsSAAACAB1SAAACADkSAAACADXSAAACADLSAAACAA1SAAACADvSAAACAD7SAAACAB/SAAACABRSAAACAALSAAACACFSAAACABgSAAACADMSAAACACESAAACAApSAAACABzSAAACABJSAAACAA3SAAACAD5SAAACACTSAAACABmSAAACAAwSAAACAB6SAAACACRSAAACABqSAAACAB2SAAACABKSAAACAC+SAAACAAdSAAACAAQSAAACACuSAAACAAFSAAACACxSAAACACBSAAACAA/SAAACABxSAAACABjSAAACAAfSAAACAChSAAACABMSAAACAD2SAAACAAiSAAACADTSAAACAANSAAACAA8SAAACABESAAACADPSAAACACgSAAACABBSAAACABvSAAACABSSAAACAClSAAACABDSAAACACpSAAACADhSAAACAA5SAAACABwSAAACAD0SAAACACbSAAACAAzSAAACADsSAAACADISAAACADpSAAACAA6SAAACAA9SAAACAAvSAAACABkSAAACACJSAAACAC5SAAACABASAAACAARSAAACABGSAAACADqSAAACACjSAAACADbSAAACABsSAAACACqSAAACACmSAAACAA7SAAACACVSAAACAA0SAAACABpSAAACAAYSAAACADUSAAACABOSAAACACtSAAACAAtSAAACAAASAAACAB0SAAACADiSAAACAB3SAAACACISAAACADOSAAACACHSAAACACvSAAACADDSAAACAAZSAAACABcSAAACAB5SAAACADQSAAACAB+SAAACACLSAAACAADSAAACABLSAAACACNSAAACAAVSAAACACCSAAACABiSAAACADxSAAACAAoSAAACACaSAAACABCSAAACAC4SAAACAAxSAAACAC1SAAACAAuSAAACADzSAAACABYSAAACABlSAAACAC3SAAACAAISAAACAAXSAAACABISAAACAC8SAAACABoSAAACACzSAAACADSSAAACACGSAAACAD6SAAACADJSAAACACkSAAACABZSAAACADYSAAACADKSAAACADcSAAACAAySAAACADdSAAACACYSAAACACMSAAACAAhSAAACADrSAAACADWSAAAeIAAEAAACAB4SAAACAAySAAACABiSAAACABlSAAACABjSAAACABiSAAACAB3SAAACABkSAAACABnSAAACABrSAAACABjSAAACAB3SAAACABhSAAACABjSAAACABuSAAACABvSAAAeIABEAABCABkSAAACAAzSAAACABkSAAACAAySAAACABlSAAACAA3SAAACAAySAAACAA2SAAACABmSAAACAA1SAAACAAwSAAACABkSAAACAA0SAAACAAxSAAACAAwSAAACAAxSAAAeIABEAACCAAgSAAATgACVAAAQAAGEwADDAADSAAADAACSAAADAAASAAACANcIAADDAADSAAASAAATgADVAAATgAEUAAATgAFUAAATgAGUgAADAAASAAASAAATgADVAAATgAEUAAATgAFUAAATgAHUgAADAABSAAASAAATgADVAAATgAEUAAATgAFUAAATgAIUgAAcAgUSMAATgAJVAAATgAKUgAAAAAADAABSAAADAAAUAAACID/GwQPCAAYG2AREwAGDAABCIABGwQASMAADAAAUAAACID/GwQPCAAQG2AREwAHDAABCIACGwQASMAADAAAUAAACID/GwQPCAAIG2AREwAIDAABCIADGwQASMAADAAAUAAACID/GwQPEwAJDYAGDAAHG2ATDAAIG2ATDAAJG2ATKAAACAD/DIAACQAYGygSGwwPSMAASMAADAACSAAADAABUgAACAD/DIAACQAQGygSGwwPSMAASMAADAACCIABGwQASMAADAABUgAACAD/DIAACQAIGygSGwwPSMAASMAADAACCIACGwQASMAADAABUgAACAD/DIAAGwQPSMAASMAADAACCIADGwQASMAADAABUgAAKAAACAAgDIABGwQBEwANDAAAWQALGwQPDAABG2AREwAODAAODIAADQANGygSGwwTEwAPDYAPKAAACAAESAAATgACVAAAQAAGEwAQCAAESAAATgACVAAAQAAGEwAFDAAASAAADAAQSAAACAAASAAACAKsIAADCAAASAAADAAQUAAACID/GwQPSMAADAABUAAASAAASAAACAAASAAADAAFUgAACAABSAAADAAQUAAACID/GwQPSMAADAABUAAASAAASAAACAABSAAADAAFUgAACAACSAAADAAQUAAACID/GwQPSMAADAABUAAASAAASAAACAACSAAADAAFUgAACAADSAAADAAQUAAACID/GwQPSMAADAABUAAASAAASAAACAADSAAADAAFUgAADAAFSAAACAAASAAACAJ8IAACEwARDAARSAAACAANSAAACALdIAACEwASDAARSAAACAAXSAAACALdIAACEwATDAARDIASGwQQDAATG2AQEwAUDYAUKAAAWAAMSAAAWAANSAAAWAAOSAAAWAAPSAAAWAAQSAAAWAARSAAAWAASSAAAWAATSAAAWAAUSAAAWAAVSAAAWAAWSAAAWAAXSAAAWAAYSAAAWAAZSAAAWAAaSAAAWAAbSAAAWAAcSAAAWAAdSAAAWAAeSAAAWAAfSAAAWAAgSAAAWAAhSAAAWAAiSAAAWAAjSAAAWAAkSAAAWAAlSAAAWAAmSAAAWAAnSAAAWAAoSAAAWAApSAAAWAAqSAAAWAArSAAAeIAsEAAXWAAtSAAAWAAuSAAAWAAvSAAAWAAwSAAAeIAxEAAYCAAESAAATgACVAAAQAAGEwAZCAAkSAAATgACVAAAQAAGEwAaDAABSAAACAAASAAACAJ8IAACSMAASMAACAAASAAADAAZUgAADAABSAAACAAESAAACAJ8IAACSMAASMAACAABSAAADAAZUgAADAABSAAACAAISAAACAJ8IAACSMAASMAACAACSAAADAAZUgAADAABSAAACAAMSAAACAJ8IAACSMAASMAACAADSAAADAAZUgAACAAASAAADAAZUAAACIAASEAADIAYUEgAGwQQSMAASMAACAAASAAADAAaUgAACAABSAAADAAZUAAACIABSEAADIAYUEgAGwQQSMAASMAACAABSAAADAAaUgAACAACSAAADAAZUAAACIACSEAADIAYUEgAGwQQSMAASMAACAACSAAADAAaUgAACAADSAAADAAZUAAACIADSEAADIAYUEgAGwQQSMAASMAACAADSAAADAAaUgAACAAAEAAJDAAJCIAgGwQOMwAGOBG2DAAJCIABGwQASMAADAAaUAAAEAAbDAAJCIACGwQASMAADAAaUAAAEAAcDAAJCIADGwQASMAADAAaUAAAEAAdDAAbDIAcGwQQDAAdG2AQDAAJSAAADAAXUAAAG2AQEwAeDAAeSAAADAACSAAACALvIAACEwAfDAAJSAAADAAaUAAADIAfGwQQSMAASMAADAAJCIAEGwQASMAADAAaUgAADAAJCIAEGwQASMAADAAaUAAASAAASAAADAAJSAAADAAAUgAADAAJCIABGQQAEQAJOBCIKAAADAABTgAyUAAACIAQGwQEEwAVCAAQDIAVGwQBEwAKCAAAEAAhDAAhDIAKGwQOMwAGOBImDAAKSAAADAABTgAzQAAFDAAhCIABGQQAEQAhOBHoCAAASAAACAAQSAAADAABTgA0QAAJEwAiCAAQSAAATgACVAAAQAAGEwAjCAAAEAALDAALCIAQGwQOMwAGOBLSDAALSAAADAAiUAAADIALSEAADIAAUEgAGwQQCAAqG2AQSMAASMAADAALSAAADAAjUgAA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"));
    var D = function(e) {
    return __g._encrypt(encodeURIComponent(e))
    };
    exports.ENCRYPT_VERSION = A
    exports.default = D
    
    
    function encryptCookie(cookie) {
    const K = new RegExp("d_c0=([^;]+)")
    const Q = function (string) {
      const e = K.exec(string);
      return e && e[1]
    }
    return Q(cookie)
    }
    
    
    
    
    
    function getZse96(cookie, url, zse93, x81) {
    let s = `${zse93}+${url}+${encryptCookie(cookie)}`
    if (x81) {
      s = s + `+${x81}`
    }
    let e = md5.md5(s)
    return `2.0_${D(e)}`
    }
    
    
    const cookie = `_zap=bb92d33c-0a9e-425b-ae72-a9fb9a574e54; _xsrf=7376f3b1-9f13-4c3b-8d57-ed1a118a143e; d_c0=ANCW96oK1BWPTsvJdsswa5U5WLIBChsm4js=|1667787128; KLBRSID=d017ffedd50a8c265f0e648afe355952|1667787128|1667787127; SESSIONID=tn6WdE87SB0SsVGvtdqIMm6ly3jjB6hcpPo3H3mMFAG`
    const url = "/api/v4/search_v3?gk_version=gz-gaokao&t=general&q=%E7%8B%BC%E7%9A%84%E5%AD%A9%E5%AD%90%E9%9B%A8%E5%92%8C%E9%9B%AA&correction=1&offset=0&limit=20&filter_fields=&lc_idx=0&show_all_topics=0&search_source=Normal"
    const zse93 = "101_3_3.0"
    const x81 = ''
    console.log(getZse96(cookie, url, zse93, x81))
    

气势凌人的帽子
4 声望2 粉丝