内容仅供交流学习!请勿用于非法用途!
打算做个数据看板,能够看到B站某个up的视频信息,因此做个逆向,也依此进行学习。
访问主页,并根据视频的标题进行搜索以找到接口。
只有一个搜索结果,看接口返回的数据也能确认是由这里返回的数据。
分析刷新页面进行两次请求,分析其中改动的参数。
其中很明显的是wts是时间戳,w_rid是其中一个加密参数;其中的dm_img_inter和w_webid的后半部分也是在变化的,但经过我测试发现他们不通过mid(这里的mid就是B站的uid)进行加密,也就是说目前将这两个参数写死的话也能获取到不同的UP主的视频信息,故在此先不分析这两个参数,将重点放到w_rid上面(罗永浩有过一句话——又不是不能用)。
我们直接进行全局搜索,搜w_rid:
搜索出的结果也不多,我们将每个结果打上断点,刷新页面,逐个查看断点信息,很快能够定位到我们所要的数据是由这个地方生成的
此时再仔细看一下里面的参数,我能可以发现w_rid的值和MD5的标准加密算法很像,也能发现i的值每次都是不变的,h的值就是其他的请求参数按一定顺序由“&”拼接起来,上面也说过了,另外两个变动的参数并不由mid进行生成,可以暂时写死,然后再把里面的h值和i值取过来放到md5标准加密算法进行一遍加密试试,再输出一遍C(h + i),对比两个值能发现两个值是一样的,也印证了C函数其实就是MD5加密算法;
所以我们就可以直接看出w_rid的生成了,甚至都不用去扣js代码,当然更完整的话可以再将dm_img_inter和w_webid的值继续进行逆向解析(我这里就暂时不深入解析了)
到这里其实就可以生成一个可供使用的代码了:
1 | import hashlib |
运行结果:
经过测试,修改uid也是可以成功获取数据的,到这里w_rid的逆向逻辑已经出来了,为啥不使用js直接把代码扣过来,而要自己分析逻辑进行实现?因为我在导入execjs模块的时候报错了!!!艸,就直接分析逻辑进行实现了。