河南科技大學學生快速查分--Python工具

前言

每次查成績都要點來點去很麻煩,特別是期末這段時間,着實有丶不太方便。
所以寫了一個一條命令查成績的小工具;
沒什麼技術含量,只是方便了點,各位大佬們看看就好;
莫對俺下手【/互聯網暴力】
在這裏插入圖片描述

完整代碼可以在
Github:https://github.com/hausa-han/HAUST_auto_get_score
Gitee(訪問較快):https://gitee.com/hausa/HAUST_auto_get_score
找到。
在這裏插入圖片描述

分析與開發過程

從對教務系統的第一次訪問開始抓包分析:
在這裏插入圖片描述
請求方式是GET,獲得了一個SessionId,此後每一次請求都需要SessionId,因此需要模擬這一過程,將cookie中的SessionId保存下來:

import requests

def getcookie():
    print('正在進行第一次請求,以獲取Cookies')
    url = 'http://jxglxt2.haust.edu.cn/'
    cookies = requests.get(url).cookies
    #由於這時的Cookies是RequestsCookieJar類型,所以要進行轉換:
    cookies = requests.utils.dict_from_cookiejar(cookies)
    print('Cookies獲取成功:' + cookies['ASP.NET_SessionId'] + '\n')
    return cookies['ASP.NET_SessionId']
    
getcookie()

運行:
在這裏插入圖片描述
之後在網頁上進行登錄操作,並對登錄時的包進行抓包,可以看到:
在這裏插入圖片描述
所有的POST參數中,__VIEWSTATE__VIEWSTATEGENERATOR參數是固定的;Sel_Type參數是用戶類型,即STU;txt_sdsdfdsfryuiighgdf參數是學號;很明顯sdfdfdhgwerewt參數即是加密後的密碼,其他參數均爲空。接下來來分析密碼的加密過程。
進行JS調試:
在Sources欄,展開直到發現一個叫md5.js的文件,md5是一種加密方式。看名字,猜測是加密密碼的腳本文件,在md5函數處打斷點,開始動態分析。
在這裏插入圖片描述
在輸入密碼時中斷,不斷跟進函數調用過程(F10),發現這樣一段代碼:
在這裏插入圖片描述

 var s=md5(yhm+md5(obj.value).substring(0,30).toUpperCase()+schoolcode).substring(0,30).toUpperCase();
 document.all.sdfdfdhgwerewt.value=s;

可以看到,下面一行對sdfdfdhgwerewt參數的值進行了設置,值爲上面加密過程得出的結果。分析可知,上面一句對密碼的加密過程爲:第一次MD5加密:用戶輸入的密碼的md5的32位大寫,取其前30位,然後將:學號、第一次加密結果、學校編碼拼接到一起進行第二次md5加密,並取結果的32位大寫的前30位。
我們用python模擬這樣的加密過程,並將結果與這裏的結果對照:

import hashlib

def encodepasswd(stuID, passwd):
    print("正在加密密碼")
    a = hashlib.md5()
    a.update(passwd.encode(encoding='utf-8'))
    str = a.hexdigest()
    str = stuID + str[:-2] + '10464'
    b = hashlib.md5()
    str = str.upper()
    b.update(str.encode(encoding='utf-8'))
    str = b.hexdigest()
    str = str.upper()
    print("加密完成:" + str[:-2] + '\n')
    return str[:-2]
    
encodepasswd('191404050107', 'hausa')

在這裏插入圖片描述
是一致的,所以加密過程解決。
之後將加密後的參數與其他所有參數拼接到一起,進行一次login嘗試:
(在這裏卡了好久,最後發現這裏有一個小坑,這個包之前有兩個完全一樣的請求發出,但是返回的__VIEWSTATE不一樣,就這裏,耗了至少5個小時)
在這裏插入圖片描述
P.S.這裏是部分代碼,完整代碼參考上面的倉庫地址。

登錄後,即可用相同的方法對獲取成績的過程進行分析和模擬,並最終調整,寫出最終程序。
在這裏插入圖片描述

程序運行效果:

第一次使用需要輸入學號和密碼,若教務系統正常運行,則會在當前目錄生成一個score.jfif圖片文件,其中即爲成績:
在這裏插入圖片描述
從第二次使用開始,會自動讀取加密存儲的賬號密碼,2~4秒內實現查成績操作:

在這裏插入圖片描述
在這裏插入圖片描述
因爲教務系統過一段時間後就會清除已登錄的cookie(主要是我懶。。),所以沒有實現Logout,有興趣的小夥伴可以來實現一下,加強程序的安全性。

有問題歡迎在下方評論嗷~~(不會吧不會吧,連查成績多點幾下都懶得點的我,不會真的在評論區跟各位大佬討論吧,不會吧不會吧,不會真的有人想邀請我去爬山,還要照相吧?不會吧不會吧?)
在這裏插入圖片描述
今天就這麼多話了,晚安,瑪卡巴卡。
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章