声明
本文仅供参考学习,禁止用于其他用途,违者后果自负!
前言
目标网站:aHR0cHM6Ly93d3cucWluZ3RpbmcuZm0v
小说链接:aHR0cHM6Ly93d3cucWluZ3RpbmcuZm0vY2hhbm5lbHMvNDQwMjkw
接口信息:aHR0cHM6Ly9hdWRpby5xdGZtLmNuL2F1ZGlvc3RyZWFtL3JlZGlyZWN0LzQ0MDI5MC8yMTg4ODQzOD9hY2Nlc3NfdG9rZW49JmRldmljZV9pZD1NT0JJTEVTSVRFJnFpbmd0aW5nX2lkPSZ0PTE2NjE5MzUzODgxODMmc2lnbj0xZDhlYzBiMmI2ZTI4ODE0OWRiNDIyMzFiNzFhZTVhNA==
参数分析
点击某一章节进去,点击播放后会有一个音频信息的接口
将音频的url复制到浏览器中就可以得到音频文件,通过不断播放不同章节的小说发现该url发现有两处比较可疑,会发现62后面这一串和auth_key后面这一串。
既然比较可以,就复制其中一部分进行搜索。
其中2到4都是音频的url,只有第一个不是。大概率是在这里了。
可以看到该节后的一些信息,状态码是一个302跳转到Location中的url中,这个url不就是音频的url吗?这是一个get请求,参数内容中有一个sign值看不懂,应该加密了。
32位长度,很多小伙伴看到32位加密就猜是md5加密,只能说有一定的可能性,也可能是摘要算法的一种。
参数内容已经确定了,只有sign加密。
流程分析
直接搜索sign。
文件有点略多,遇到这种情况可以搜索其他的参数,尤其是更具有辨识性的这样重复会比较少。
access_token 就只有两个了。分别点进文件看一下,最终发现是在main的文件中。
定位一下位置,发现url也对的上。
没猜错的话 return后的结果就是sign。别问我是怎么知道的,因为我看到了Hmac和md5。
剩下的不用多说,打断点调试。
s
是在拼接url,
t是当前章节有声小说的id,a是一个对象,仔细一看是url中的一部分。t是当前时间戳。
看一下sign
。
HmacMD5
加密,密钥是fpMn12&38f_2e
。实际上Hmac也是一种摘要算法,这种算法和md5相比多了一个密钥所以也更加安全。不懂的小伙伴自行百度一下。
找一个在线的加密网站看一下,加密一下前面的s
链接:在线加密网站
和上图的结果不能说大差不差,只能说是一模一样。
加密到这里就解决了,因为比较简单。所以没有必要去扣js代码,直接用python调用即可。
import time
import hmac
t = str(int(time.time() * 1000))
key = "fpMn12&38f_2e"
message = "/audiostream/redirect/" + book_id + "/" + chapters_id + "?" + 'access_token=&device_id=MOBILESITE&qingting_id=&t=d' + t
message = message.encode('utf-8')
sign = hmac.new(key.encode('utf-8'), message, digestmod='md5').hexdigest()
print("sign的值为------>",sign)