【原创】一分钟实现蓝墨云秒杀所有资源
本帖最后由 laoxiaodiao 于 2019-7-11 09:21 编辑我们大学英语老师上一年蓝墨云来上英语课,来签签到啥的,签到啥的还可以,我们这种好学生是不会旷课的{:1_918:},但是他一学期就让我们看几百个沙雕视频,还记积分,谁积分高期末成绩高,我的妈呀,这可愁死小宝宝了,在网上搜蓝墨云破解版,下载下来屁用没有,然后在52上搜搜有没有大神已经破解,虽然没有,但是发现了这个帖子,但那个时候还没有学JavaScript,只学了C,但大家都知道C写这些东西很麻烦,而且我C也达不到那个水平,所以我只能乖乖的去刷了几百个视频:'(weeqw(流下了没有技术的泪水),我可是很记仇的,刚学了Python一个星期,打算拿蓝墨云来开刀,废话不多说。
首先之前那个帖子用的是burpsuite来抓包,我这里用的谷歌自带的工具,我重新抓了试试,发给服务器的数据真的没有加密。我试了好久,发现在每次看完视频之后都会给服务器发送一个数据包,数据内容如下
服务器返回的数据为
咦,想一想,那么我不看视频,在登陆之后就直接给服务器发这个数据包,那不就完事了?哈哈哈,说干就干,我试着改了一下资源id(res-id),重新发送出去,卧槽,还真的给老子返回了success,我们来一起分析这个数据,他要发送classid,res-id(翻译过来就是资源id嘛),watchto(翻译过来就是要看到),duration(翻译过来就是进度条嘛),
current_watch_to:(当前看到哪了),再捋一捋,如果要获得classID,那么我们肯定哟要先登录啊,要获得resid,那么我们也得要提前提取出来资源id嘛,
那么我们的破解思路就很清晰啦,
(1)登陆,获取课程id
(2)进入相应课程的资源列表,提取资源id
(3)发送数据包
第一步:登陆
没有验证码,卧槽,太溜了,如果有验证码还得要破验证码,这个搞的太不安全了。
输入账号密码点击登录,抓包
其返回的数据如下
实现登陆代码如下:
import requests
import re
def login():
url1="https://www.mosoteach.cn/web/index.php?c=passport&m=account_login"#登陆的链接
head1={#这个是数据头
"Host":"www.mosoteach.cn",
"Content-Length":"60",
"Connection": "keep-alive",
"Accept": "application/json, text/javascript, */*; q=0.01",
"Origin": "https://www.mosoteach.cn",
"X-Requested-With": "XMLHttpRequest",
"User-Agent": "Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36",
"Content-Type":"application/x-www-form-urlencoded; charset=UTF-8",
"Referer": "https://www.mosoteach.cn/web/index.php?c=passport",
"Accept-Encoding": "gzip, deflate",
"Accept-Language": "zh-CN,zh;q=0.9,en;q=0.8"
}
username=input("请输入账号:")
password=input("请输入密码:")
body="account_name={0}&user_pwd={1}&remember_me=N".format(username,password)#数据包
result1=requests.post(url1,headers=head1,data=body)#发送请求,并将结果赋给result1
cookie=result1.headers["Set-Cookie"]#提取cookie,在下一次发送请求的时候带上这个cookie,服务器才会认识你
#除了上面这个,还要提取aliyungf_tc,teachweb,SERVERID,不要问我为什么提取,他返回给你的数据肯定是有用的,提取保存就行,提取用到了正则表达式
print("获取如下参数")
aliyungf_tc=re.findall(r"aliyungf_tc=(.*?);",cookie)
aliyungf_tc=aliyungf_tc
print("aliyungf_tc=%s"%aliyungf_tc)
teachweb=re.findall(r"teachweb=(.*?);",cookie)
teachweb=teachweb
print("teachweb=%s"%teachweb)
Ser=re.findall(r"SERVERID=(.*?);",cookie)
Ser=Ser
print("serverid=%s"%Ser)
接下来获取课程id,并且选择你要刷的课
你在登陆之后会进入下面这个界面
右边就是课程id了实现代码如下
url2="https://www.mosoteach.cn/web/index.php?c=clazzcourse&m=index"
head2={
"Connection": "keep-alive",
"Accept":"text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3",
"Origin": "https://www.mosoteach.cn",
"X-Requested-With": "XMLHttpRequest",
"User-Agent": "Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36",
"Referer": "https://www.mosoteach.cn/web/index.php?c=passport",
"Accept-Encoding": "gzip, deflate",
"Accept-Language": "zh-CN,zh;q=0.9,en;q=0.8",
"Cookie": "aliyungf_tc={};teachweb={};SERVERID={}".format(aliyungf_tc,teachweb,Ser)
}
result2=requests.post(url=url2,headers=head2)
classid=re.findall("data-id=\"(.*)\"",result2.text)
print("成功获取科目ID:%s"%classid)
classid=input("请输入你要刷的科目ID:")
第二步:获取资源id
点击相应的课程(发送数据包),获取资源id(在服务器返回的数据中提取id)
实现代码如下
head3={
"Connection": "keep-alive",
"Accept":"text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3",
"Origin": "https://www.mosoteach.cn",
"X-Requested-With": "XMLHttpRequest",
"User-Agent": "Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36",
"Accept-Encoding": "gzip, deflate",
"Accept-Language": "zh-CN,zh;q=0.9,en;q=0.8",
"Cookie":"aliyungf_tc={0};teachweb={1};SERVERID={2}".format(aliyungf_tc,teachweb,Ser),
"Refere": "https://www.mosoteach.cn/web/index.php?c=interaction&m=index&clazz_course_id={}".format(classid)
}
url3="https://www.mosoteach.cn/web/index.php?c=res&m=index&clazz_course_id={}".format(classid.replace("'",""))
result3=requests.get(url3,headers=head3)
viedoid=re.findall("data-value=\"(.*)\"",result3.text)#这是用正则表达式提取资源id
第三步:发送已经看完的消息
url4="https://www.mosoteach.cn/web/index.php?c=res&m=save_watch_to"
i =list( range(1,len(viedoid),1))
#print(i)
for k in i:
if len(viedoid)==len(viedoid):#检测所提取的视频id长度是不是等于第一个视频的id长度,因为在提取的过程中后面有几个不是视频id,得把它去掉
head4={
"Connection": "close",
"Content-Length":"141",
"Content-Type":"application/x-www-form-urlencoded; charset=UTF-8",
"Referer":"https://www.mosoteach.cn/web/index.php?c=res&m=index&clazz_course_id={}".format(classid),
"Accept":"application/json, text/javascript, */*; q=0.01",
"Origin": "https://www.mosoteach.cn",
"X-Requested-With": "XMLHttpRequest",
"User-Agent": "Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36",
"Accept-Encoding": "gzip, deflate",
"Accept-Language": "zh-CN,zh;q=0.9,en;q=0.8",
"Cookie":"aliyungf_tc={0};teachweb={1};SERVERID={2}".format(aliyungf_tc,teachweb,Ser)
}
data4="clazz_course_id={}&res_id={}&watch_to=1200&duration=1200¤t_watch_to=0".format(classid,viedoid)#这里的watch_to和duration要设置的大一些,如果设置小了,有些视频长度大于这个数值,你就会看不完
result4=requests.post(url4,headers=head4,data=data4).json()
print("视频%s的结果为:%s"%(viedoid,result4))
else:
pass
login()
至此大功告成,接下来给大家看看效果
我想着先将这个告知蓝墨云的人员的,但一直找不到联系方式,我在那个帖子回复说我用Python搞出来了,有人想让我分享,但那个时候正在考试,没有大把时间来写帖子,我发出来仅供大家学习,不要用于非法用途,我可不负责任哈,在这段时间我也会联系蓝墨云那边,看看让他们修复。我靠,写了一下午,都没吃晚饭,我先吃东西去了,之后再发exe文件 baozitou6 发表于 2019-7-11 00:27
学习资料方便透露下不。想学习下
就在图书馆看了一本关于Python比较基础的书,我也是边翻书边敲的代码,现在在啃疯狂Python讲义,这个论坛里有电子版。但我把书买了,感觉还不错 choo1i3 发表于 2019-7-10 21:29
学一个星期就这么厉害???无敌了楼主,流下了羡慕的泪水
哈哈,学C之后再学Python会觉得不用考虑很多东西,你也可以的,我们一起加油:handshake,我也不是计算机专业,编程是我的爱好:Dweeqw 谢谢分享一下 哇,学一个星期这么厉害啦,写的很不错 热乎呢 围观 可以,学习学习了!! 学一个星期就这么厉害了,厉害厉害 学一个星期就这么厉害???无敌了楼主,流下了羡慕的泪水 6666666666 这么厉害的。。。。厉害了 无敌了,留下了没有技术的泪水