突破喜马拉雅的 xm-sign 验证,爬取有声读物

本文详细介绍了如何通过Python爬虫分析并破解喜马拉雅的xm-sign验证机制。通过断点调试js代码,发现xm-sign由u.getSign()生成,涉及到服务器时间戳、当前时间戳及随机数。经过函数处理后的结果类似MD5编码,验证后成功匹配,揭示了获取xm-sign的关键步骤。
摘要由CSDN通过智能技术生成

首先找到 xm-sign 参数的js代码,断点调试,如下:


可见, xm-sign 的值是由函数u.getSign()生成的,直接进入该函数的内部看看


再次断点调试,可以发现,这里的 t 是喜马拉雅的服务器时间戳,由 time 这个包生成的,地址是:https://www.ximalaya.com/revision/time;而 e 就是现在的时间戳;两个小括号是100以内随机整数;花括号{himalaya-1570715660049}整个被替换成 函数 l(e)的值,进入该函数的内部:


这里传入函数的参数是himalaya-1570715660049;返回值未知,直接复制这个返回值到Console运行看看

发现可以运行,而且返回值像md5编码? 此时最直接的想法就是把"himalaya-1570715660049"这个参数md5试一下

结果是两个值一模一样!到此 xm-sign 的值就出来了

himalaya-服务器时间戳的md5编码+(100以内随机数)+服务器时间戳+(100以内随机数)+现在时间戳


范例代码:

"""
@ 功能:喜马拉雅有声读物下载
@ 作者:虫之吻
@ 时间:2019-10-10
"""
from queue import Queue
import threading
import requests
import hashlib
import random
import time
import re
import os


class XimaLaya(object):
    def __init__(self, page_url):
        self.headers = {
   'User-Agent': 'Mozilla/5.0', 'Host': 'www.ximalaya.com'}
        self.server_time_url = 'https://www.ximalaya.com/revision/time'
        self.requests_url = 'https://www.ximalaya.com/revision/play/album'
        self.page_url = page_url
        self.queue = Queue()

    def get_md5(self, str_time):
        """
        获取md5字段
        """
        return hashlib.md5('himalaya-{}'.format
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值