这是一段曲折的旅程,这是一场与混乱之间的斗争。无论是从最初的登录管理还是到后面的信息检索,都令人为之蹙眉。不合理的排版布局,奇怪的功能函数,无一不让人有着糟糕的感受。本次文章将会和大家一起走进一个已经过时的、臃肿的教务系统——强智科技教务系统南理工定制版。
教务系统不同于我们每日浏览的网站。它不需要华丽的界面来吸引人的眼球,它的工作,只是让前来查询教务信息的人能够畅通无阻地获取自己想要的信息罢了。因而,简洁性是其第一个属性。此外,它还需要保证在某一时间能够承载大量的用户访问以及保证随时随地都可以连通,这就要求其必须保持一定的稳定性,某种意义上,这也和简洁性有关——简介的页面可以加快用户的访问速度以及减少服务器的负担。
而我之所以称其过时且臃肿,是因为其一些设计已经完全地脱离了时代,同时页面代码还存有某些赘余部分,甚至一些区块表格的显示方式又增加了人们的工作量,这显然与其本身的简洁性相冲突。本系列将会从几个常用的功能页面来检视网页代码,来和大家一同分析教务系统。
首先是登录界面。通过Fiddler或者Chrome自带的开发调试工具,我们可以查询到进行登录时的GET请求。我们发现,登陆时的GET连接后附带了USERNAME和PASSWORD两个参数。观察这两个参数的形式,不难发现,USERNAME正是我们提交的学号,而PASSWORD自然也不用说,就是我们登陆用的密码,只不过经过了加密,所以现在是一个32位的十六进制。

那么目标就很明晰了,我们需要找到这个加密算法,来将我们的密码转换为密文。首先自然想到的是登入界面的响应脚本。
然而,检索了整个页面的HTML代码,都没有找到类似的加密算法。
<form action="http://202.119.81.112:9080/njlgdx/xk/Verifyservlet"; method="post" id="Form1" name="Form1" onsubmit="return submitForm1();">
function submitForm1(){
try{
var xh = document.getElementById("Form1").USERNAME;
var pwd = document.getElementById("Form1").PASSWORD;
if(xh.value==""){
alert('用户名不能为空!');
return false;
}
if(pwd.value==""){
alert('密码不能为空!');
return false;
}
var jzmmid = document.getElementById("Form1").jzmmid;
return true;
}catch(e){
alert(e.Message);
return false;
}
}
通过和网络上其他使用强智科技教务系统的高校代码进行对比,发现南理工的登录JS脚本确实没有调用到加密算法。
再次回到Fiddler,我们发现登录的GET之前还有一个验证POST,猜想密码应该是在验证这一步进行了加密。但是具体验证调用了怎样的函数,无从得知,似乎一切的分析到这里就走到了尽头。

进程搁置了几天后,我又一次打开Fiddler准备进行分析。这一次,我准备懂一些歪脑筋。显然,一个32位的十六进制密文和我的原密码长度并不是能很好的进行匹配(我的原密码长度只有10位ASCII),经过测试得到的每一个加密密码都是32位的十六进制,那么这就是一个多对一的加密算法。于是乎脑海中第一个印象就是MD5码。甚至将这个关键词输入进百度都是大量的MD5算法介绍。

将自己的密码输入进在线加密工具中,最后得到的结果和GET的参数一致。问题就这么解决了。

通过本篇的内容,我们已经获得了对其他教务信息分析的入门券,虽然这个券的到来纯粹是意外,不过有时候,幸运和直觉也是能力的一种。
此外,这一个登陆页面还有部分赘余的代码,比如注释后的废弃代码,功能重复的语句等等,大家可以自己分析,看看哪些代码对于这个登录界面是多余的。
还有,南理工教务处的登录界面我一共发现有三个网址/IP,究竟是哪三个?是否还有其他的?这就还请大家自行去发现了。
