吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1810|回复: 8
收起左侧

[讨论] X习通 自动学习实现思路

  [复制链接]
榆生丶大牛 发表于 2022-11-10 13:36
本帖最后由 榆生丶大牛 于 2022-11-10 14:21 编辑

构建登录请求

先抓包登录接口

发现密码和账户是加密过的 如下图

image-20221109235216553.png

通过调用堆栈 发现是AES加密  如下图

密匙直接看到是 u2oh6Vu^HWe4_AES

其实偏移也是这个

image-20221109235518622.png

网上抄袭的AES加密的代码  修改了一下直接拿来用了

import base64
from Crypto.Cipher import AES

AESKEY = 'u2oh6Vu^HWe4_AES'  # 请修改 一定是 16位的字符串
AESIV = 'u2oh6Vu^HWe4_AES'  # 和KEY保持一致即可

class AESTool:
    def __init__(self):
        self.key = AESKEY.encode('utf-8')
        self.iv = AESIV.encode('utf-8')

    def pkcs7padding(self, text):
        """
        明文使用PKCS7填充
        """
        bs = 16
        length = len(text)
        bytes_length = len(text.encode('utf-8'))
        padding_size = length if (bytes_length == length) else bytes_length
        padding = bs - padding_size % bs
        padding_text = chr(padding) * padding
        self.coding = chr(padding)
        return text + padding_text

    def aes_encrypt(self, content):
        """
        AES加密
        """
        cipher = AES.new(self.key, AES.MODE_CBC, self.iv)
        # 处理明文
        content_padding = self.pkcs7padding(content)
        # 加密
        encrypt_bytes = cipher.encrypt(content_padding.encode('utf-8'))
        # 重新编码
        result = str(base64.b64encode(encrypt_bytes), encoding='utf-8')
        return result

    def aes_decrypt(self, content):
        """
        AES解密
        """
        cipher = AES.new(self.key, AES.MODE_CBC, self.iv)
        content = base64.b64decode(content)
        text = cipher.decrypt(content).decode('utf-8')
        return self.pkcs7padding(text)

构建视频播放请求

视频播放抓包如下图
image-20221109235921135.png

参数的来源和作用 一个一个分析的话过于繁琐

这里直接跟你们简单说下作用和来源把吧

"clazzId": "61611875", # 视频有关 通过课程列表获取
"playingTime": "82",# 已播放时长  跟
"duration":"400"  #发送请求时 视频播放到的时长
"clipTime": "0_400" # 视频的总时长
"objectId": "7bdeb5431692e53faea60f183cbb0411", # 当前播放的视频的信息 来源是服务器返回
"otherInfo": "nodeId_637889344-cpi_208839772-rt_d-ds_d-ff_1-be_0_0-vt_1-v_6-enc_d7f81a4d4319155dadd3a1586d45a8e8", # 根据播放的视频变化而变化  服务器返回   
"courseId": "227801601", #视频有关 当前播放的课程ID
"jobid": "1629619820783362", # 跟视频有关
"userid": "200830620",# 跟登录的账号有关
"isdrag": "3",#  3 代表点击暂停 2代表点击播放 0代表心跳包  4代表视频播放结束
"view": "pc",# 固定                     
"enc": "c41bca3032d64e562ef3f51b9988ac64",  # 把对应的值替换进这个字符串进行md5加密 '[clazzId][userid][jobid][objectId][duration*1000][d_yHJ!$pdA~5][视频的总时长*1000][clipTime]'
"rt": "0.9", #这个参数 会根据播放内容的详细类型变动   如视频又分为 MP4 mov 音频又分为MP3
"dtype": "Video",#这个参数会根据任务节点是视频还是音频又或者是文档  变换
"_t": "1667034959960" # 时间戳

综上所述,实现自动播放大致有下面几个步骤

  1. 先发送登录请求 获取Cookie  下面的这几个Cookie是关键Cookie  缺失的话无法请求到数据

    # 关键cookie
    "_uid": "200830620",  # 用户ID
    "_d": "1667037792758", # 时间戳
    # 服务器返回
    "vc3": "OKt0tYz42iQ%2Fbf1WhXi9zWJFKkH8UCYm86eodZDD19zVLObi4ureRg1THs37Qcyh7hZvJtfHCOW1D0HdArENGvpZ73joesKVDPoxVF9hPrD4BmsdCSmt6wTQjNjI6%2FfRebtQNbtR%2FyPnBicoFHMeU5DUN7%2BoYA%2BQA5t2BctLVWs%3De12778ffce0f0fb992da4f65185d815d",
    # 视频ID 可有可无
    "videojs_id": "7849012"
    "k8s" 这个cookie 在输入验证码时不可缺失
  2. 再去遍历课程列表  拿到课程ID(courseId) 任务节点ID(jobid)  构建请求 得到对应的视频ID  如otherInfo、objectId、clipTime

  3. 通过第二部得到的视频参数 ,构建视频播放时的请求,设计时间间隔定时发送即可    注:视频的心跳包 是60s一次  

分享下成品代码,写的不好,请笑纳
链接:https://pan.baidu.com/s/1Wd40Sp-DsagGybpRHAaZPQ?pwd=52pj
提取码:52pj

免费评分

参与人数 2热心值 +2 收起 理由
yangshu + 1 用心讨论,共获提升!
搬砖孩子要毕业 + 1 谢谢@Thanks!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

famdo818 发表于 2022-11-10 14:34
感谢分享,论坛有你真好
garyid 发表于 2022-11-10 14:52
Nice6666 发表于 2022-11-10 15:36
qq734928657 发表于 2022-11-10 16:26
楼主 能不能给教程一个自动答题的 思路
Yingz520 发表于 2022-11-10 20:57
感谢楼主分享!马上学习下。
wapython 发表于 2022-11-10 22:05
哈哈哈,可以试试
czy12 发表于 2022-11-11 09:42
66666666666666
poseidon1748 发表于 2022-11-11 14:24

感谢楼主分享!马上学习下。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-25 07:13

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表