点击搜索发送方请求,一直点击跳到下一个函数,遇到拦截器,会发现请求拦截器中并没有相关的加密逻辑,继续点击跳到下一个函数,遇到 a 是返回结果的时候,分析代码发现,会发现 Object(D[“g”])(a).then 方法,恰好 a 是 then 里面函数的参数,可以初步判断 Object(D[“g”]) 是调用请求的函数,在 then 里面打上断点
点击搜索发送方请求,分析代码得知 E(n, e) 内部是由 k(“param=” + JSON.stringify(n) + “×tamp=” + e + “&tenant=1&salt=” + C) 实现,而 k = t(“6c27”).sha256 说明该算法是 SHA256 算法生成
四、生成加密参数
新建 hrdj.js 用于放 扣下的 js 代码
把 E 函数拷贝出来,放到 hrdj.js 文件,并把 k 替换成 SHA256 算法
分析加密数据,把 n 输出控制台会发现,n 是请求中的 param 参数,分析代码 可以看出 e = (new Date).getTime(),而 C 是 z 函数,把 z 函数拷贝出来,放到 hrdj.js 文件,把 C 换成 e函数 ,把 E 参数的 e 换成 e = (new Date).getTime(),有命名冲突的需要换命名,其实 C 是固定的字符串直接打印出来赋值就行,这里为了走完流程把 C 生成的代码也扣一下
分析z函数,需要注意的有 s[“a”]、A[“a”]、h[“a”]、p[“a”]、f[“a”]、m[“b”],把它们在控制台打印出来发现都是函数,点击控制台上的打印信息,把函数拷贝到 hrdj.js 文件,分别替换 s[“a”]、A[“a”]、h[“a”]、p[“a”]、f[“a”]、m[“b”],在拷贝的过程中会发现这些函数内部实现的变量都是固定值,只有 m[“b”] 函数中的 i 变量是由 t 函数生成,在生成 i 的地方打断点
刷新页面,在控制台输出 i 会发现 i = 66,把 hrdj.js 里 d1 的 i 替换成 66