爬虫逆向案列 ---《某某省资源平台》

网站接口:aHR0cHM6Ly95Z3AuZ2R6d2Z3Lmdvdi5jbi8jLzQ0L2p5Z2c=

  • 加密接口:aHR0cHM6Ly95Z3AuZ2R6d2Z3Lmdvdi5jbi9nZ3p5LXBvcnRhbC9zZWFyY2gvdjIvaXRlbXM=
  • 三个加密参数:X-Dgi-Req-Nonce、X-Dgi-Req-Timestamp、X-Dgi-Req-Signature
    观察请求头:
    1. 从上图我们不难看出>X-Dgi-Req-Timestamp该参数是一个时间戳(秒);
    2. 我们可以使用HOOK---》header的代码进行debugger:
       (function(){
                 var open = window.XMLHttpRequest.prototype.setRequestHeader;
                 window.XMLHttpRequest.prototype.setRequestHeader = function(key,val){
                     console.log('val--->',val);
                     debugger;
                     return open.apply(this,arguments);
                 };
             }());
      

经过hook我们发现:
图一:

继续往上跟栈我们发现:请求头参数是异步生成的!
图二:

那么我们可以断点到异步的方法体:
图三:

我们进入第一个异步方法中进行断点观察:
图四:

进入hne方法我们观察Nonce的生成:

进一步我们分析sigurate参数:
图五:

o.data:请求体参数

sC.stringify:字符串拼接

k

t和n:是时间戳和随机字符串
分析t1方法

最后sigurate:

重点:进入uK方法后我们观察到:uK就是sha256加密

网页:

在线加密:https://www.spidertools.cn/#/crypto

最后验证确认就是纯sha256算法!
纯python代码展示:

  def getNonce():
      arrs = []
      str = "zxcvbnmlkjhgfdsaqwertyuiop0987654321QWERTYUIOPLKJHGFDSAZXCVBNM"
      for i in range(16):
          arrs.append(str[int(random.random() * (61 - 0 + 1) + 0)])
      return ''.join(arrs)

    def timeStamp():
        return str(int(time.time() * 1000))

    def getSigurate(nonce,data,times):
        strs = nonce + "k8tUyS$m" + getDict(data) + times
        sign = (lambda  s: hashlib.sha256(s.encode("utf-8")).hexdigest())(strs)
        return sign

    def  getDict(data):
        # 字典排序
        keys = data.keys()
        keys = sorted(keys)
        strs = ''
        for key in keys:
            strs += key + '=' + str(data[key]) + '&'
        strs = strs[:-1]
        return strs

运行结果

注意:

  1. 该内容如有侵权,请及时联系vx:wzwzwz0613;
  2. 该文章仅用于参考学习,不得用商业用途;
posted @ 2024-02-04 20:06  带带弟弟学逆向  阅读(249)  评论(0)    收藏  举报