本文章中所有内容仅供学习交流,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关!
近来想深入学习滑块轨迹,没有找到好的学习资料,偶然看到一篇文章有讲到轨迹,这就开始了今天的这篇文章,出于小白的我看到文章就发现文章又过时了。开始就来了debugger,我的个天,学个爬虫为啥这么难~
还是开始我们这次的学习之旅吧!我就不信了,我还搞不定你~
于是找度娘研究了一天时间也没搞的太懂怎么搞,总是不成功,功夫不负有心人,慢慢的有点点明白什么意思了,接下来开始。直接实战,在实战中弥补自已的不足~
网址:aHR0cHM6Ly9iei56enptaC5jbi9pbmRleA==
1、绕过无限debugger:
ctrl+shfit+i 打开chrome浏览器开发工具
一来就出现了无限debugger。我的天,网上查了一天时间,尝试了说的各种方法,对js不是很熟悉的我心里面一万只马在奔腾。突然好像悟出来了什么,上菜。不懂的小白们也只有慢慢根据我这个来干,可能领悟的更快。
var _constructor = constructor; //先接收变量
//重写函数
Function.prototype.constructor = function(s) {
if (s == "debugger"){
console.log(s);
return null;
}
return _constructor(s);
}
var xxx=setInterval
setInterval=function (){
}
打开console
点
久违的正常开发者工具可以运行了。
2、开始分析
清空network,选择推荐,出现一个getDate,向下滑动出现很多带auth_key的请求如图
每一个请求就是一张加载的图片。看来得把auth_key搞定。
开始搜索(ctrl+shift+f)这个关键定auth_key:
打上断点,不能刷新,
遂步分析每个字段是怎么来的,两种方式逆向,一种分析生成的逻辑用python模拟,另一种直接扣js代码,扣代码扣了半天,还是自己功力不行,从此网站看来我的还去学习如下知识点:js的函数调用形式,怎么补环境,像怎么document取得cookie。此次就python模拟:
开始分析:
_0x5e9924 = _0x2e82e1 + ‘-’ + _0x79d357 + ‘-0-’ + _0x14eb0a(_0x1c69e7 + ‘-’ + _0x2e82e1 + ‘-’ + _0x79d357 + ‘-0-TPV4hi7wIeM7DPv35457O8poVyUJRX0o’);
第一个:_0x2e82e1
这个document怎么得到,搞不定,所以扣js也无从下手,先放在一边,我们看看这个函数做了什么,如下图,取消所有断点,在for行打下断点,点运行,出现如下图,每个箭头对应的是做了什么操作,查js相应的功能,
indexof检索cookie的字符串值有没有出现nmumber=,有则返回0,没有该方法返回 -1。substring截取cookie中字段’number=1673712000’的1673712000
明白了此意思,我们取消断点,删除此值
回到
进入_0x2b0593()这个后面的(||逻辑或)
上图标注错误,后面发现加1是下一个月。看了半天猜测从gettime来看是一个从1970-1-1-0-0-0到当年-当月-15-0-0-0的一个秒级时间戳
第二个:_0x79d357
取消所有断点,回到
开启断点,开始
调试,
猜测是md5加密:
第三个:
从substring知道是截取字符串
通过以上,开始写python代码:
def get_number(): # _0x2e82e1
year = datetime.now().year
month = datetime.now().date().month
day = 15
if month < 12:
month = month + 1
else:
month = 1
year = year + 1
date = f"{
year}-{
month}-{
day}"
b = str(date) + " 00:00:00"
return int(time.mktime(time.strptime(b, "%Y-%m-%d %H:%M:%S")))
def get_number_md5(number): # _0x79d357
return hashlib.md5(str(number).encode()).hexdigest()
def get_url_path(url): # _0x1c69e7
return url[21:len(url)]
def get_auth_key(number, number_md5, url_path): # auth_key
temp = hashlib.md5(str(f"{
url_path}-{
number}-{
number_md5}-0-TPV4hi7wIeM7DPv35457O8poVyUJRX0o").encode()).hexdigest()
return f"{
number}-{
number_md5}-0-{
temp}"
如此通过如下就可以得到 url后面的auth_key:
if __name__ == '__main__':
a_1 = get_number()
b_1 = get_number_md5(a_1)
c_1 = get_url_path("https://cdn2.zzzmh.cn/wallpaper/origin/265410565e874f71a09db1d35689f8cd.jpg/thumbs")
d_1 = get_auth_key(a_1, b_1, c_1)
print(a_1)