Python 爬虫进阶必备 | 某公共资源交易平台加密参数与数据解密逻辑分析
第一时间关注Python技术干货!
图源:极简壁纸
今日网站
aHR0cHM6Ly9nZ3p{删掉我}5ZncuZmouZ292LmNuL3dlYi9pb{防撞}mRleC5odG1sPyMv{删掉我}YnVzaW5lc3MvbGlzdA==
抓包分析
打开网站,随便设置一个查询条件,可以在 Chrome 的网络选项卡中抓到如下样式的请求包
需要分析的参数如下
请求头参数:protal-sign
以及加密查询结果Data
的解密逻辑
加密参数的定位与分析
先看请求头的部分,这里的protal-sign
是网站在请求头中添加的
一般像这样xhr
请求用xhr断点
是比较好的选择
同样的也可以通过hook window.XMLHttpRequest.prototype.setRequestHeader
来定位
var setRequestHeader_ = window.XMLHttpRequest.prototype.setRequestHeader;
window.XMLHttpRequest.prototype.setRequestHeader = function(key,value){
console.log(key)
if(key.indexOf("portal-sign") !== -1){
debugger;
}
return setRequestHeader_.apply(this,arguments);
}
}
但是!这个站它不一般,他不走寻常路,用上面两种方法都不如直接检索来的快
直接检索portal-sign
,找到下面的位置
这个时候分析的重心就转移到get_Sign
方法了
单步进去,可以看到先是循环遍历了传入的参数
然后将遍历结果传入s(e)
并且和r["d"]
进行了拼接
先看这里的s
方法,结果如下
很明显s
方法就是将传入的参数拼接起来,这里的r[d]
是一串字符串
可以理解为加盐,防止加密的结果被撞库,拼接盐值之后的结果经过了u
和转小写之后就返回了
所以这里的u
就是关键的加密方法了,不过这里的u
也比较简单,单步进去就可以看到了
解密方法的定位与分析
上面进行了加密参数逻辑的定位和分析,现在还剩一个返回值Data
的解密
这种返回值加密,按照开发的逻辑来说是在xhr
请求之后回调解密方法,所以要在xhr
中方法找到回调的位置打上断点
像下面这样
而像上一部分的请求参数分析,因为请求需要带上参数在请求发出的时候参数已经生成好了,所以我们进入xhr
断点的时候,是从断点位置往上翻堆栈分析之前的逻辑
现在重新加载是否能找到解密的逻辑,加载断点之后单步进入o
方法
一直单步可以看到如下位置的代码
很明显的aes
解密方法,拿出key
还有iv
就可以直接进行还原了
简单测试一下
以上就是今天的全部内容了。
我是没有更新就在摸鱼的咸鱼
收到请回复~
我们下次再见。
对了,看完记得一键三连,这个对我真的很重要。