感谢jedihy的投递
新闻来源:原创
今年的四六级成绩已经公布了,99宿舍网对四六级查分系统又进行了改进,增加了姓名验证,这使得批量查询所有人的成绩成为了不可能,所以老版的查分软件都不能使用了,于是vb.net写了一个cet查分助手,用于在忘记密码的情况下查到自己成绩。
新闻来源:原创
今年的四六级成绩已经公布了,99宿舍网对四六级查分系统又进行了改进,增加了姓名验证,这使得批量查询所有人的成绩成为了不可能,所以老版的查分软件都不能使用了,于是vb.net写了一个cet查分助手,用于在忘记密码的情况下查到自己成绩。
今年的四六级成绩已经公布了,99宿舍网对四六级查分系统又进行了改进,增加了姓名验证,这使得批量查询所有人的成绩成为了不可能,所以老版的查分软件都不能使用了,看了cnbeta上的一篇老的文章又对查分网站99sushe进行了下分析。
网站的js文件可以看出今年的查分系统和去年的思路差不多,但是做了一些修改,同样是采用了Ajax来编写脚本,依旧加了Referer的验证,最大的区别在于post时,准考证号和姓名是以比特流在post包尾传递的,以前的那种直接url传参数的方法没用了,我用curl 工具构造相应的 Referer请求和Post方法成功查询了成绩,并用vb.net写了一个cet查分助手,用于在忘记密码的情况下查到自己成绩。
下面是使用curl来构造post包的过程,如果有不明白的可以curl --help查看帮助。 curl --verbose --data "id=你的准考证&name=名字的urlencode" --header "Referer: http://cet.99sushe.com/" "http://cet.99sushe.com/s" --data “***” 是和以前不同的地方,必须通过append二进制流的方法传递数据。 另外表单的action地址也改变了变成http://cet.99sushe.com/s,这个地址如果通过GET方式提交会报404错误。
可以看到post返回的结果中的那一串字符串就是你的成绩和相关信息的序列,gb2312编码的,在写程序的时候要进行一下转换。 下面就是重头戏了,本人编写的小工具,用于在不知道准考证的情况下查询自己的成绩(前提是必须知道本学校某位同学的准考证号),本工具查询效率极高,查询150个考场只用6-7分钟。
下载地址:http://u.115.com/file/e6kv7ruz#cetchecker.exe
使用时,填上准考证号的范围,这个一定能知道的,只要你有认识的同学,问他本校的准考证号是多少,然后参照程序上写的参考信息来设定范围,一般10分钟之内一定出结果。
另外写程序的时候也遇到了一些问题,有关post报文的,我发现发送post报文的内容十分影响结果。
[2011/8/23 8:40:08:655]
POST /s HTTP/1.1
User-Agent: curl/7.19.3 (i586-pc-mingw32msvc) libcurl/7.19.3 zlib/1.2.3
Host: cet.99sushe.com
Accept: */*
Referer: http://cet.99sushe.com/
Content-Length: 36
Content-Type: application/x-www-form-urlencoded
id=420900111210420&name=%D5%C5%C3%CE
[2011/8/23 8:41:45:431]
POST /s HTTP/1.1
Referer: http://cet.99sushe.com/
Host: cet.99sushe.com
Content-Length: 36
Expect: 100-continue
id=420900111206404&name=%C2%ED%CE%C4
第一段报文是curl发送时截获的,第二段报文是我的程序最初的时候发送的。
我就发现如果程序这样写,会导致得到的回应可能包含一些无关字符,像是charact**set之类的,而且返回的成绩信息不完整,导致split字符串的时候出现错误,这个是由于多出的那一句Expect: 100-continue产生的,原因不明。另外程序在进行穷举的时候,如果报文头部的keepalive=true的话,程序一般穷举几十个就会报错,报错内容是协议冲突,后来在网上看了相关文章将keepalive改成false就OK了。
程序没有做成多线程,查询的时候会假死,请耐心等待。
大家可以通过我的微博和我联系。
http://weibo.com/1169056202
QQ:718446
网站的js文件可以看出今年的查分系统和去年的思路差不多,但是做了一些修改,同样是采用了Ajax来编写脚本,依旧加了Referer的验证,最大的区别在于post时,准考证号和姓名是以比特流在post包尾传递的,以前的那种直接url传参数的方法没用了,我用curl 工具构造相应的 Referer请求和Post方法成功查询了成绩,并用vb.net写了一个cet查分助手,用于在忘记密码的情况下查到自己成绩。
下面是使用curl来构造post包的过程,如果有不明白的可以curl --help查看帮助。 curl --verbose --data "id=你的准考证&name=名字的urlencode" --header "Referer: http://cet.99sushe.com/" "http://cet.99sushe.com/s" --data “***” 是和以前不同的地方,必须通过append二进制流的方法传递数据。 另外表单的action地址也改变了变成http://cet.99sushe.com/s,这个地址如果通过GET方式提交会报404错误。
可以看到post返回的结果中的那一串字符串就是你的成绩和相关信息的序列,gb2312编码的,在写程序的时候要进行一下转换。 下面就是重头戏了,本人编写的小工具,用于在不知道准考证的情况下查询自己的成绩(前提是必须知道本学校某位同学的准考证号),本工具查询效率极高,查询150个考场只用6-7分钟。
下载地址:http://u.115.com/file/e6kv7ruz#cetchecker.exe
使用时,填上准考证号的范围,这个一定能知道的,只要你有认识的同学,问他本校的准考证号是多少,然后参照程序上写的参考信息来设定范围,一般10分钟之内一定出结果。
另外写程序的时候也遇到了一些问题,有关post报文的,我发现发送post报文的内容十分影响结果。
[2011/8/23 8:40:08:655]
POST /s HTTP/1.1
User-Agent: curl/7.19.3 (i586-pc-mingw32msvc) libcurl/7.19.3 zlib/1.2.3
Host: cet.99sushe.com
Accept: */*
Referer: http://cet.99sushe.com/
Content-Length: 36
Content-Type: application/x-www-form-urlencoded
id=420900111210420&name=%D5%C5%C3%CE
[2011/8/23 8:41:45:431]
POST /s HTTP/1.1
Referer: http://cet.99sushe.com/
Host: cet.99sushe.com
Content-Length: 36
Expect: 100-continue
id=420900111206404&name=%C2%ED%CE%C4
第一段报文是curl发送时截获的,第二段报文是我的程序最初的时候发送的。
我就发现如果程序这样写,会导致得到的回应可能包含一些无关字符,像是charact**set之类的,而且返回的成绩信息不完整,导致split字符串的时候出现错误,这个是由于多出的那一句Expect: 100-continue产生的,原因不明。另外程序在进行穷举的时候,如果报文头部的keepalive=true的话,程序一般穷举几十个就会报错,报错内容是协议冲突,后来在网上看了相关文章将keepalive改成false就OK了。
程序没有做成多线程,查询的时候会假死,请耐心等待。
大家可以通过我的微博和我联系。
http://weibo.com/1169056202
QQ:718446