网站接口:aHR0cHM6Ly95Z3AuZ2R6d2Z3Lmdvdi5jbi8jLzQ0L2p5Z2c=
- 加密接口:aHR0cHM6Ly95Z3AuZ2R6d2Z3Lmdvdi5jbi9nZ3p5LXBvcnRhbC9zZWFyY2gvdjIvaXRlbXM=
- 三个加密参数:X-Dgi-Req-Nonce、X-Dgi-Req-Timestamp、X-Dgi-Req-Signature
观察请求头:
- 从上图我们不难看出>X-Dgi-Req-Timestamp该参数是一个时间戳(秒);
- 我们可以使用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
运行结果
注意:
- 该内容如有侵权,请及时联系vx:wzwzwz0613;
- 该文章仅用于参考学习,不得用商业用途;