# 侵删
一、打开网址(以其中的头条新闻为例),下滑并点击加载更多,找到返回数据的接口1000?
二、分析请求参数
id 是模块对应的id,不同板块的id不一样(头条,股票等)
last_time 是时间戳
rn和sv可以写死
sign需要逆向
三、sign逆向
(一)搜索关键字
使用浏览器自带的工具搜索关键字sign,并在可能的位置打上断点
(二)继续加载更多得到断住
点击加载更多,如果断住了,则进行跟栈分析,如果没有断住,那就检查关键字断点,继续打
加密位置应该是
sign: S(m({}, r))
(三)分析算法
在控制台打印出S(m({}, r))的值,发现与请求参数的位数一致,成功了50%
在控制台打印出r的值
{
"lastTime": 1712384875,
"os": "web",
"sv": "7.7.5",
"app": "CailianpressWeb"
}
然后再打印出内层m({}, r)的值
{
"lastTime": 1712384875,
"os": "web",
"sv": "7.7.5",
"app": "CailianpressWeb"
}
发现r和m({}, r)一样,所以可以把函数简化为S(r)
将光标移动到S上,进入该方法
在return的地方打上断点,并打印出p(t, e[t])的值,不难发现这一步就是在构建请求体中除去sign的其他参数。
接下来单步调试(慢,但一定能找到)
到这里我们发现请求体的参数已经准备好了,所以加密应该就在这附近了,多打断点多输出观察。
发现
return t = i.sync(t),
t = u(t)
很可疑,t在未执行 i.synd()前是'app=CailianpressWeb&id=1000&last_time=1712149125&os=web&rn=20&sv=7.7.5'
执行后就是三十二位的密文了!由于是三十二位加密结果,我们首秀考虑是不是标准加密算法,一看,就是标准的MD5算法。
接下来你高高兴兴的以为逆向成功并且结束了,但其实不然一比较就会发现,其实sign的值位数对了,但是值不对,为什么呢?别忘了还有t = u(t)这一步把t重新赋值了,分析一下还是标准的MD5也就是说对字符串连续两次的MD5加密
相关衍生的接口会有类似的加密,注意辨别!
下面是用标准库进行模拟的加密
const CryptoJS = require("crypto-js")
function use_md5(txt){
return CryptoJS.MD5(txt).toString()
}
data = 'app=CailianpressWeb&category=&hasFirstVipArticle=1&lastTime=1712387250&os=web&rn=20&subscribedColumnIds=&sv=7.7.5' //假如这是数据
res = use_md5(data)
console.log(res)
如果我们需要在python中使用的话可以选择使用js库调用,这样较为简单的代码也可以直接转为python代码。
欢迎各位看官留下宝贵的建议!感谢!