声明
本文仅供学习参考,请勿用于其他途径,违者后果自负!
前言
目标网站:aHR0cHM6Ly93d3cuc2hhbmdoYWlyYW5raW5nLmNuL2luc3RpdHV0aW9uL3RzaW5naHVhLXVuaXZlcnNpdHk=
接口信息:aHR0cHM6Ly93d3cuc2hhbmdoYWlyYW5raW5nLmNuL2FwaS92MjAxMC9pbnN0L3RzaW5naHVhLXVuaXZlcnNpdHk=
目标参数:Authorization
参数分析
首先抓包。
数据这个地方没有什么好说的,是明文没有加密。加密点在于请求的headers参数中。
在这里多了一个Authorization参数,看着像base64加密。
解密一下。
确实能够得到结果,但是中间一段还是一段加密,目前看不出来是什么加密,还需要跟栈分析一下。
因为是headers参数加密。所以可以在这里进行hook操作。
var code = function(){
var org = window.XMLHttpRequest.prototype.setRequestHeader;
window.XMLHttpRequest.prototype.setRequestHeader = function(key,value){
if(key=='Authorization'){
debugger;
}
return org.apply(this,arguments);
}
}
注入js脚本后,发现断点没有效果。也就是说hook方法失效了,只能慢慢去分析了。
因为是xhr请求,所以在这里打下一个xhr断点。
刷新页面,已经断下来了。
一个异步的请求,看到可以的堆栈,直接点进去,下断。
在这里看到了interceptors。这是一个拦截器,可以在请求前后进行一系列的操作。猜测可能是在这里进行了封包,所以没有办法hook到。
思路已经明确,不断的F11,直到看到我们需要的包。
跳进了另一个文件中,此时在这里还没有生成加密参数。继续F11步入下一个函数。
知道这个地方,发现了加密生成了。
这不就是我们想要的结果吗。打下断点,进入Ze函数。
参数分别是:
然后经过一系列的操作,最后是字符串的拼接,然后Sha256的加密,最后一个base64的加密,生成了加密参数。
这个过程比较简单,缺什么拿什么就可以。主要是这里的r是什么。需要看一下。
通过调用Ze函数可以知道r=Ge,那么Ge哪里来呢。
Ge是一个空值,但是在console中打印,Ge是有值的。肯定在哪里做了手脚,搜寻一番发现了端倪。
在这里有一个三目运算。这里问好前肯定是个false,然后执行冒号后的结果,在这里将e.data赋值给Ge然后减去时间戳得到差值。
e.data的值也是一个时间戳,但是这个时间戳是请求了上面的url获取的。
所以这是一个小细节,拿到之后再去改一下还原的代码就可以得到结果了。
但是通过本地生成的参数,使用爬虫并没有得到数据,如果有知道原因的大佬可以给我留言。十分感谢!