红哥 发表于 2019-6-15 12:15

超星学习通协议分析

本帖最后由 红哥 于 2019-6-15 19:44 编辑

这几天学校又让刷学习通的网课,看了一下,视频挺多,有90多课,于是就想分析一下学习通的视频进度保存的协议,伪造请求发送给服务器,达到视频不用看直接过,话不多说,开始正文:
首先点开视频再返回,fiddler抓包看一下,这里抓到了一个请求:

关键内容如下:
GET /multimedia/log/a/69553433/226af628bb8ff118d743aff040f376b3?otherInfo=nodeId_143057010&playingTime=329&duration=903&akid=null&jobid=1466044408893&clipTime=0_903&clazzId=8502942&objectId=7f1bd7024ea1de627d15b1ac51d2388b&userid=xxxxxx&isdrag=2&enc=32455dcffa4efae69d837ce13327834b&dtype=Video&view=json HTTP/1.1
又抓了一个包:
GET /multimedia/log/a/69553433/226af628bb8ff118d743aff040f376b3?otherInfo=nodeId_143057010&playingTime=330&duration=903&akid=null&jobid=1466044408893&clipTime=0_903&clazzId=8502942&objectId=7f1bd7024ea1de627d15b1ac51d2388b&userid=xxxxxx&isdrag=2&enc=4d4f1c803cf9004d8b3d31f3141ad6e6&dtype=Video&view=json HTTP/1.1
对比一下可以发现变化的部分只有两个一个是playingTime字段另一个是enc字段,这里分析一下playingTime应该是视频进度时间,duration是视频总时间,单位是秒,现在就只剩下一个enc了,这个enc应该是校验字段,接下来就分析一下enc的值是怎么得到的,首先在Androidkiller中打开学习通,搜索enc可能得到太多结果,这里我搜索playingTime,一共搜到了三个结果:

前两个看起来差不多,随便点进一个看看,往上翻了翻,看到一堆字符串拼接:

在jeb中打开看一下:

很明显这里就是拼接字符串的地方,这个v5中储存的就是enc的值,v5中的值来自v1_1,接下来看一下v1_1的值是什么
String v1_1 = com.fanzhou.d.l.b("[" + this.V + "][" + v4 + "][" + this.T.getJobid() + "][" + this.T.getObjectid() + "][" + v1 * 1000 + "][" + "d_yHJ!$pdA~5" + "][" + this.aV * 1000 + "][" + this.aW + "]");
可以看到v1_1就是b方法的返回值,这些this.V这些分别对应下面的那些值,这里就不一一分析了,进入b方法看一下

明显可以看出是md5加密,现在就很明了了,enc的值就是[]+上面那些值加盐值d_yHJ!$pdA~5拼接后的md5的值
至于jobid,objectId这些字段的值抓包分析一下我的课程页面,和课程本身页面 都可以构造url从服务器请求到


接下来分析一下学习通的登陆协议
首先还是抓包分析,这是抓取的数据
POST http://passport2.chaoxing.com/xxt/loginregisternew?token=4faa8662c59590c6f43ae9fe5b002b42&_time=1560511025758&inf_enc=d20cc428ce717f08156ae9e6201b4467 HTTP/1.1
Accept-Language: zh_CN
Cookie:
Content-Length: 727
Content-Type: multipart/form-data; boundary=vj2gwfmP-DxuCIPFN8zUcQ-ZGzXQFa4FJ7pQ
Host: passport2.chaoxing.com
Connection: Keep-Alive
User-Agent: Dalvik/2.1.0 (Linux; U; Android 5.1.1; SM-G9350 Build/LMY48Z) com.chaoxing.mobile/ChaoXingStudy_3_5.21_android_phone_206_1 (SM-G9350; Android 5.1.1; zh_CN)_1969814533

--vj2gwfmP-DxuCIPFN8zUcQ-ZGzXQFa4FJ7pQ
Content-Disposition: form-data; name="uname"
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

zhanghao//这是账号
--vj2gwfmP-DxuCIPFN8zUcQ-ZGzXQFa4FJ7pQ
Content-Disposition: form-data; name="code"
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

mimamima//这是密码
--vj2gwfmP-DxuCIPFN8zUcQ-ZGzXQFa4FJ7pQ
Content-Disposition: form-data; name="loginType"
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

1
--vj2gwfmP-DxuCIPFN8zUcQ-ZGzXQFa4FJ7pQ
Content-Disposition: form-data; name="roleSelect"
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

true
--vj2gwfmP-DxuCIPFN8zUcQ-ZGzXQFa4FJ7pQ--

这里用了multipart/form-data请求,是post的变种,有兴趣的可以去搜一下,这里就不讲了
可以看到,账号密码都是明文,
经过多次抓包发现这个token竟然是不变的,_time是现在的时间,这样就只用分析inf_enc
androidkiller搜索inf_enc

搜索出来两个结果,看着第一个更像一点,在jeb中打开

一开始看到deskey还以为是des加密,没想到点进去还是md5

那现在就只用分析arg3和arg4是什么,先交叉引用看一下

发现有两地方引用了这个方法,随便点进去一个看看,有交叉引用了一下,还是有两地方引用

懒得一个一个看了,这里我又搜索了一下loginregisternew?,这次就只搜到了一个结果

jeb打开

一步一步往下走


进入b方法看一下

这里是一个字符串拼接,就是给token _time赋值
返回上一个方法,进入f方法

接着往下

这里就到了之前找到的关键方法,现在就知道arg3和arg4是什么了
arg3="Z(AfY@XS"
arg4="token="+值+“&_time=”+值
所以inf_enc就是md5("token="+值+“&_time=”+值+"Z(AfY@XS")

下面是我写好的脚本:




ps:因为我只有一门网课,所以抓到的数据都是一门课的数据,没有做多门网课数据的处理,所以有多个网课的同学使用此脚本可能会出现bug
另外,此脚本只能刷视频,不能刷题

地址: https://github.com/jiangyei/fakechaoxing

看到下面有人评论说,可能会被检测异常,或者以后翻旧账,不过我现在是没有异常,以后就不知道了,用与不用看你们自己

q6378561 发表于 2019-6-15 15:24

现在超星学习通是通过log日志来封你号的你,虽然秒视频了 但是post包的时间还是会被检测出来,我就这样被封的...

一叶知夏 发表于 2019-6-15 17:33

秒视频会被封的

xiao1193687 发表于 2019-6-15 12:40

有用,,,,,顶一下

niebaohua 发表于 2019-6-15 12:43

楼主优秀

aipaicxq 发表于 2019-6-15 12:51

楼楼太棒了

w15439 发表于 2019-6-15 13:06

不会提示异常么?

红哥 发表于 2019-6-15 13:20

w15439 发表于 2019-6-15 13:06
不会提示异常么?

刷了十几课了,没有提示异常

likereading 发表于 2019-6-15 14:11

佩服,谢谢分享经验

XyJoe7 发表于 2019-6-15 14:31

那每个视频对应的三道题还在吗?

hunteraa 发表于 2019-6-15 14:33

这个东西我是用不到了

q993423309 发表于 2019-6-15 14:41

厉害了,楼主
页: [1] 2 3 4
查看完整版本: 超星学习通协议分析