逆向过程分析与js代码扣取

请求头U-Sign数据

image.png

通过浏览器开发者工具可以看到返回数据的接口/youzy.dms.basiclib.api.college.query

image.png

添加XHR断点刷新浏览器会自动进入断点

image.png

查看具体请求数据,将断点定位到r = r.then(t.shift(), t.shift());

image.png

F8跳转到改断点位置,可以看到有5个方法

image.png

点击[[FunctionLocation]]:后的js查看方法,发现第一个方法里面有u-sign

image.png

将断点定位到u-sign,并将上一步的断点放开,F8定位到u-sign

image.png

  • 发现u-sign由o方法生成

image.png

  • 复制出url和data的值,data可以直接右键复制对象

image.png

data = {
   "keyword": "",
   "provinceNames": [],
   "natureTypes": [],
   "eduLevel": "",
   "categories": [],
   "features": [],
   "pageIndex": 1,
   "pageSize": 20,
   "sort": 11
}

进入o方法,断点并执行

image.png 观察发现该方法,发现参数o只是做了一个拼接,数据加密由n(o)完成,i值为固定值,a值为请求参数

var i = "9SASji5OWnG41iRKiSvTJHlXHmRySRp1"
o = Object.keys(a).length > 0 ? "".concat(JSON.stringify(a), "&").concat(i) : "&".concat(i);
o = o.toLowerCase()
n(o)

image.png

进入n方法并断点

image.png 复制出方法并改成正常方法

// 防止重名改为exports123
exports123 = function(e, r) {
 if (null == e)
   throw new Error("Illegal argument " + e);
 var n = t.wordsToBytes(a(e, r));
 return r && r.asBytes ? n : r && r.asString ? o.bytesToString(n) : t.bytesToHex(n)
}

我们现在可以得到js

var i = "9SASji5OWnG41iRKiSvTJHlXHmRySRp1",
data = {
       "keyword": "",
       "provinceNames": [],
       "natureTypes": [],
       "eduLevel": "",
       "categories": [],
       "features": [],
       "pageIndex": 1,
       "pageSize": 20,
       "sort": 11
},
uri = '/youzy.dms.basiclib.api.college.query'


exports123 = function(e, r) {
   if (null == e)
       throw new Error("Illegal argument " + e);
   var n = t.wordsToBytes(a(e, r));
   return r && r.asBytes ? n : r && r.asString ? o.bytesToString(n) : t.bytesToHex(n)
}

// 将a改为data
o = Object.keys(data).length > 0 ? "".concat(JSON.stringify(data), "&").concat(i) : "&".concat(i);
o = o.toLowerCase()

console.log(exports123(o))

执行发现t未定义,进入t image.png image.png 跳转到到wordsToBytes在r中,即t为r,将r复制出来并改名r123,并将t.wordsToBytes改为r123.wordsToBytes

r123 = {
 rotl: function(e, t) {
   return e << t | e >>> 32 - t
},
 rotr: function(e, t) {
   return e << 32 - t | e >>> t
},
 endian: function(e) {
   if (e.constructor == Number)
     return 16711935 & r123.rotl(e, 8) | 4278255360 & r123.rotl(e, 24);
   for (var t = 0; t < e.length; t++)
     e[t] = r123.endian(e[t]);
   return e
},
 randomBytes: function(e) {
   for (var t = []; e > 0; e--)
     t.push(Math.floor(256 * Math.random()));
   return t
},
 bytesToWords: function(e) {
   for (var t = [], r = 0, n = 0; r < e.length; r++,
        n += 8)
     t[n >>> 5] |= e[r] << 24 - n % 32;
   return t
},
 wordsToBytes: function(e) {
   for (var t = [], r = 0; r < 32 * e.length; r += 8)
     t.push(e[r >>> 5] >>> 24 - r % 32 & 255);
   return t
},
 bytesToHex: function(e) {
   for (var t = [], r = 0; r < e.length; r++)
     t.push((e[r] >>> 4).toString(16)),
       t.push((15 & e[r]).toString(16));
   return t.join("")
},
 hexToBytes: function(e) {
   for (var
内容来源于网络如有侵权请私信删除

文章来源: 博客园

原文链接: https://www.cnblogs.com/wandaren/p/17619116.html

你还没有登录,请先登录注册
  • 还没有人评论,欢迎说说您的想法!