Discrete Thoughts


刷课学导论

上个星期发现一个选课系统的漏洞,虽然我自己刷上的三门课都是靠人品的,但是在帮女朋友刷课的过程中,为了摆脱繁重的纯粹体力劳动,我研究了选课系统传递信息的机制,并建立一个容易理解的理论,很多人根据我的理论都能够自己实现刷课,对此我很欣慰,当然这种东西容易一传十,十传百,于是终于,在今天,选课系统进化了,根据Ryan的报道,一批刷课人的名单被公布了出来。为了纪念这些被公布的刷课狂人,在此发表刷课学导论(the first course in attacking the course selection system)。

下面就是见证奇迹的时刻!

我们来阐述一下最新的选课系统的验证码机制:这个验证行为是在本地完成的,也就是说下载到本机的网页包含一个java脚本,通过这个脚本自动检测验证码是否填写正确,随后这个脚本向服务器发送一个补选的指令。有一定网络编程的知识的同学知道,用户与服务器进行信息交流的方式可以通过表单完成,这事php编程里比较初级的,当然还有更初级的,就是通过http地址传输,以北京大学选课系统为例,如果我们要选择数学模型这个课程,当单击补选的链接的时候,java脚本自动检测验证码是否正确,然后访问

http://162.105.131.79/elective2008/edu/pku/stu/elective/controller/supplement/electSupplement.do?index=0&seq=BKC00130200AT0000056

这个网址,其中index后面那个参数是可选列表里课程的序数,从前往后以此从零开始递增,后面seq参数就是课程的一个代码。

根据这个理论,我们就可以自己编写刷课的程序,简单地说,我们只要根据不同的课程更改上面的地址,最后不断访问这个地址就可以了。index参数是容易获得的,只要会数数就可以了,而seq参数,对于待刷新的课程,只要查看刷新的链接指向的java脚本中的参数就可以了。最后一步,我们有多种手段可以完成,比如对于Windows用户,我们可以边写作业边按F5。更高级地,我们可以通过按键精灵等软件帮助刷新网页。作为理论的实际应用,我们这里就不多举更多的例子了,下面是课外题:

  1. 对于MacOS用户,如何编写一个程序来实现单科的刷课?(Hint:可以使用Automator)
  2. 对于Windows用户或MacOS用户,分别将单科的情况推广到多科的情况,并给出解决方案。
  3. 对于进化后的选课系统,回答以上两个问题。

注:问题3是开放的,至今还没有理论基础。

comments powered by Disqus
← prev next →