前言:
最近群里有同学问怎么模拟教务网登陆,想起我一开始做的时候的迷茫,故将此分析写下,供各位同学参考。(文章已同步到我的个人博客)
正文:
首先准备必要的工具:fiddler、firefox。
<b>0x01:抓包</b>
以南京林业大学为例:
image.png
请求参数如下:
image.png
<code>txt_asmcdefsddsd</code>是学号,<code>Sel_Type</code>应该是类型,主要是两个参数:<code> dsdsdsdsdxcxdfgfg</code>,<code>fgfggfdgtyuuyyuuckjg</code>,这两个应该都是加过密了。
image.png
这两个请求是请求验证码的。
下一步开始分析
<b>0x02:找加密函数</b>
重新打开到登陆页面
image.png
F12,定位到该form,我们发现:
image.png
密码框在失去焦点和按键弹起时都会触发<code>chkpwd()</code>函数。
image.png
验证码框在点击和获得焦点时会触发<code>showvc()</code>函数,在失去焦点和按键弹起时会触发<code>chkyzm()</code>函数,<code>showvc</code>仅仅是展示验证码不管。
在form标签下有一个onsubmit触发的函数<code>ChkValue()</code>,但是发现这个函数并不涉及加密,不用管。
<b>0x03:分析函数</b>
将该form的对应的js函数复制出来。
function chkpwd(obj) { if(obj.value!='') { var s=md5(document.all.txt_asmcdefsddsd.value+md5(obj.value).substring(0,30).toUpperCase()+'10298').substring(0,30).toUpperCase(); document.all.dsdsdsdsdxcxdfgfg.value=s;} else { document.all.dsdsdsdsdxcxdfgfg.value=obj.value;} }
function chkyzm(obj) { if(obj.value!='') { var s=md5(md5(obj.value.toUpperCase()).substring(0,30).toUpperCase()+'10298').substring(0,30).toUpperCase(); document.all.fgfggfdgtyuuyyuuckjg.value=s;} else { document.all.fgfggfdgtyuuyyuuckjg.value=obj.value.toUpperCase();}}
略乱,美化一下:
function chkpwd(obj) {
if (obj.value != '') {
var s = md5(document.all.txt_asmcdefsddsd.value + md5(obj.value).substring(0, 30).toUpperCase() + '10298').substring(0, 30).toUpperCase();
document.all.dsdsdsdsdxcxdfgfg.value = s;
} else {
document.all.dsdsdsdsdxcxdfgfg.value = obj.value;
}
}
function chkyzm(obj) {
if (obj.value != '') {
var s = md5(md5(obj.value.toUpperCase()).substring(0, 30).toUpperCase() + '10298').substring(0, 30).toUpperCase();
document.all.fgfggfdgtyuuyyuuckjg.value = s;
} else {
document.all.fgfggfdgtyuuyyuuckjg.value = obj.value.toUpperCase();
}
}
先看<code>chkpwd()</code>:
比较简单, 主要流程如下:
1.对于obj的值md5计算,然后取前30位,转换成大写。
2.txt_asmcdefsddsd的值(也就是学号)与计算的结果拼接字符串,尾部加上学校代码,作为新的字符串。
3.最后再计算md5,取前30位转大写
<code>chkyzm()</code>也是类似的,不再赘述。
这里<code>md5()</code>函数来源于引用的md5.js,看了一下,并没有什么坑。
<b>0x04:python实现</b>
知道加密流程之后就可以利用python重写。
计算md5可以使用 hashlib 库。
简单实现如下:
def md5sum(obj):
md5=hashlib.md5(obj.encode('gb2312')).hexdigest()
return md5
实现 chkpwd():
def chkpwd(pwd,stu):
s = md5sum(stu + md5sum(pwd)[:30].upper() + '10298')[:30].upper()
dsdsdsdsdxcxdfgfg = s
return dsdsdsdsdxcxdfgfg
实现 chkyzm():
def chkyzm(yzm):
s = md5sum(md5sum(yzm.upper())[:30].upper() + '10298')[:30].upper()
fgfggfdgtyuuyyuuckjg = s
return fgfggfdgtyuuyyuuckjg
最后构造一个相应的登陆请求即可。
具体实现可以参考我的GitHub上的代码青果教务系统选课助手
推荐一个小工具 将fiddler 和 firefox上的header转成json











网友评论