爬虫逆向案列 ---《某某省资源平台》
网站接口: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;
- 该文章仅用于参考学习,不得用商业用途;
浙公网安备 33010602011771号