过份在意一些人,过份在乎一些事,倒不如顺其自然、以最佳的心态面对。
1、接口分析
一、前言 临时碰到的一个数据平台网站,需要考察下平台的数据质量,顺带看了下加密方式,很适合新手的一个项目,文章这里记录下加密分析情况。 二、目标网站aHR0cHM6Ly9rcy5ocmRqeXVuLmNvbS8/Iy9yYW5rbGlzdOKAiw==
三、查找加密参数
点击XHR,刷新页面,点击ks的请求查看响应,确定是要查找的接口。
查看post请求的参数 很明显,提交的数据当中有两处加密sign和token,timestamp请求时间肯定是变化的。 接下来验证其他几个参数是否变化,继续刷新当前页面,观察新的ks接口。对比两处接口请求数据,发现变化的加密参数为sign,因为涉及到扫码登录,可以大胆猜测同一个账号,token不变。
2、加密分析
查找加密js代码位置方式:分别搜索所有的请求参数,对比找到同时存在的js文件。
一、参数搜索 点击右上方红框按钮,点击Search,开始搜索。 这里不再对参数一一搜索截图,当搜索到tenant这个参数时,出现了唯一的js文件,点击进入。显示三处位置
截图到这里已经可以看到sign加密的逻辑了。
sign由M(e, t)得到,而M()的返回又调用K(),K()传入的参数是有e、t、X对应的转化后的值加上参数名称拼接而成。
1422行断点,刷新页面,可以看到e、t的值,接下来重点查找X的值,鼠标移动到X位置,查看值并记录。结束断点,再次刷新页面,查看X的值,发现X没有变化,为固定值。
参数部分完美解决,接下来看下K()。
鼠标移动到K上,点击跳转,进入到如下图所示的函数体里,继续32349行断点,点击执行,可以看到n就是上面我们构造的参数,加密方式已经很明显了,sha256加密。
3、验证加密
一、构造参数 随意找一个ks的接口,复制里面的参数,构造成sha256加密前的类型 构造如下,encrypt_data为需要加密的数据x = 'kbn%&)@<?FGkfs8sdf4Vg1 *+;`kf5ndl$'param = '{"no":"ks0304","data":{"days":1,"rankType":2,"liveDay":"2020-07-30"}}'timestamp = '1596179631839'# 需要加密参数encrypt_data = "param=" + param + "×tamp=" + timestamp + "&tenant=1&salt=" + x
二、构造参数加密
用python实现sha256加密,如下图
加密后结果与需要验证的sign一致,加密完成。
最后再说下param的值是根据你要获取的内容来变化的。
比如选择直播带货榜单或者快币收入榜,或者选择日榜和周榜,得到的param都是不一样的,自己构建一个字典,问题就解决了。
对你有帮助,请扫码关注!感谢!
公众号:逆向旅行
微信号:fzcoder888888
定期分享Python进阶技术,爬虫