中公教育CTS视频下载

需要的工具

  1. wireshark
  2. python

分析过程

通过远程桌面连接到客户的桌面,发现这个软件是使用QT进行开发,遵循了能看就基本上是可以确定能够下载的原则,使用Fiddler这样轻量级的软件是可以的,只是CTS不支持使用代理,搭建proxifier全局代理的话,时间成本有点大,所以直接上了wireshark,根据抓取数据包,可以看到请求时遵循HTTP协议的,那就基本肯定是没有使用流的形式,地址结尾是mp4,直接下载是没有办法下载的,猫腻应该就是在请求头信息了,通过Postman加上了模拟的请求,可以得到正确的响应,那就直接使用python写一个自动化的脚本,根据分析请求头和地址变换,可以锁定一个目录的数据,因此每次只能下载一个文件夹下的,由于时间关系就没有进行深入分析。

过程

  1. 打开wireshark,选择有线网卡,这时候就已经开始抓包了。
  2. 设置过滤器,内容为HTTP,也就是说,只看HTTP协议的记录
    Snipaste_2021-04-24_23-38-18.png
  3. 打开CTS,找到视频库,找到你想下载的阶段以及天数,注意,加入你现在已经打开了第一天的目录,这个时候停止wireshark抓包,不然疯狂抓包,影响性能,尤其是自动下载的时候。
  4. 找到Info列下面,有list字样的记录,并且双击这个。复制最下面的FULL request URI.{右键--复制--!值}
    22.png
  5. 把刚刚复制的文本粘贴到任意位置,在地址中,找到uid=,把uid=后面的数据复制到conf.json中的uid值里,到&结尾,conf.json中有样例。同理sign也是这样操作的,详情看如下图所示。
    333.png
    6.还剩下authKey,这个需要打开一个视频,通过视频的封包信息,找到authKey,如下图所示。最好是打开视频后就立刻关闭视频。这个时候wireshark中Info列下有VIDEO字样的那条记录,双击那条记录。同样复制最下面的FULL request URI.{右键--复制--!值}
    444444.png
  6. 同样,复制到任意位置,找到authKey字段,复制到conf.json中的authKey值里。如下图所示
    555.png
  7. 这时候,就要修改其他字段了。level就是第几个阶段,也就是目录,dir就是第几天,如果说,视频库中存在三级目录,这时候需要在任意一个值后面拼接[/目录]。对应表如下图所示。
    666.png
  8. 这个时候,打开run.bat 或者 offcnCTSDownloader.py 目的就是让python对代码进行解析运行。

当程序运行结束,找到你定义的保存路径,这时就能看到下载完成的视频了。

异常分析

{"info":"WRONG_KEY"}

一般都是你的sign有问题,重新抓一下,实在不行就全部的过程走一遍,把上面的uid,sign,authKey,level,dir,全部的检查一遍,有的讲师习惯加上其他字符,所以不要忽视level这个字段,
例如

"level": "第三阶段",
"dir": "day12-视频",
和
"level": "第二阶段",
"dir": "day12",

警告

注意,图示中的zzz和zzzz可以存在,只是在下载过程中复制的一个参考,但是上面的key,也就是左面的不要动,只改后面就行

警告

注意,每换一天,就要重新抓一次目录

警告

写完过滤器之后敲回车啊,要不然过滤器不生效

conf.json解释

uid: 这个相当于学号,改一次就行,往后都是一样的。
sign: 这个每换一次文件夹,就会更改一次,所以这个包一定要抓。
authKey: 这个一般情况下是抓一次就行,后面就不需要认证,如果程序运行中,能够列出目录,但是无法下载,就要改这个字段了。
level: 也就是视频库中的第一级目录
dir: 视频库中的二级目录
download: 这个是下载位置
clazz: 也就是你的班级编号

下载

exe 是编译后的,可以直接打开
py是源代码,感觉需要优化,可以自己优化一下
bat 是启动器,报错的话,能显示不会闪退。
CTS下载助手.rar

评论 4

  1. 挺胸的男孩
    py文件有问题吧
    1. zmx
      检查一下python版本和依赖信息,或者是看一下报错信息吧,因为时间过去也好久了,当时给同学写的一个脚本,现在可能已经不适用了。
  2. 勇敢且无畏
    现在还能用吗
    1. zmx
      不清楚,前一阵子有反馈说无法使用,但是经过修改后还是可以下载的。
提交后需要审核才会公开。