大學選課系統自動填入驗證碼

JavaScript生活DIY程式語言網路概論資訊安全雜記

大學生涯最後一次搶課結束了,來分享一下歷年搶課的技巧:)

自動填入學號、密碼這個瀏覽器的通常都有選項可以幫我們記憶

所以今天的主題是驗證碼的部份,如何自動填入驗證碼

 

我們學校的選課登入頁長這樣,以前是沒有驗證碼需要填的

但我印象從106學年度起,學校可能是為了舒緩伺服器瞬間的高流量

用驗證碼這種方式來卡一部份的人潮降低伺服器的負載 (什麼歪理,為什麼不升級伺服器配備 ((怒~

沒關係,道高一尺魔高一丈,搶課的時間分秒必爭,我們總得想個辦法秒殺掉驗證碼

於是經過百般研究這個登入頁面後,終於發現驗證碼圖示旁邊的語音播放按鈕藏有玄機


開到原始碼頁,把語音播放觸發的事件找出來看看,是一個叫readyAudio()的function

跳到readyAudio()javascript的部份,發現它會ajax一個叫Handler1.ashx的頁面

從它ajax的callback function來看,它在playlist陣列裡利用回傳的voice湊出六個不知道是什麼的.mp3音檔連結(230行-235行)

因為個數剛好是6,因此我們可以合理懷疑那就是驗證碼數字的音檔檔名,準備拿來播放用的

繼續跳到nextAudio()看看吧

沒錯,果然nextAudio()會播放playlist陣列裡每個連結的音檔

不過既然一個音檔代表一個數字,是不是只要知道剛剛callback function回傳的voice,知道回傳的檔名,就可以推測出驗證碼的數字呢

打開開發者工具的Network分頁,然後按下語音播放看看

恩~ 不出所料ajax了Handler1.ashx這頁

隨後逐一載入六個音檔,並且驗證碼數字從喇叭播放了出來

所以我們的關鍵可以縮小到Handler1.ashx到底回傳了什麼

只要掌握Handler1.ashx回傳的檔名,就可以直接用檔名來填入驗證碼啦

打開Handler1.ashx的preview小分頁

嘿嘿,正是六個驗證碼數字的音檔檔名呢^^

多refresh登入頁幾次,把所有0~9的檔名抓下來存成javascript等等要用

var numHash = {
	"b6589fc6ab0dc82cf12099d1c2d40ab994e8410c": "0",
	"356a192b7913b04c54574d18c28d46e6395428ab": "1",
	"da4b9237bacccdf19c0760cab7aec4a8359010b0": "2",
	"77de68daecd823babbb58edb1c8e14d7106e83bb": "3",
	"1b6453892473a467d07372d45eb05abc2031647a": "4",
	"ac3478d69a3c81fa62e60f5c3696165a4e5e6ac4": "5",
	"c1dfd96eea8cc2b62785275bca38ac261256e278": "6",
	"902ba3cda1883801594b6e1b452790cc53948fda": "7",
	"fe5dbbcea5ce7e2988b8c69bcfdfde8904aabc1f": "8",
	"0ade7c2cf97f75d009975f4d720d1fa6c19f4897": "9"
};

chrome的書籤其實是支援javascript的

利用這點,我們希望做一個書籤,裡面塞我們的javascript語法讓電腦自動幫我們填入驗證碼

以下是自動填入驗證碼的javascript

 
第一部份是我們剛剛手動找到的0-9的音檔檔名

第二部份的ajax是仿造登入頁請求Handler1.ashx拿到要播放的音檔檔名

在ajax成功後,我們會將驗證碼的六個檔名轉置成對應的驗證碼數字,一一串起來

最後回填進txtCONFM這個驗證碼input欄位

javascript: (function() {
	var numHash = {
		"b6589fc6ab0dc82cf12099d1c2d40ab994e8410c": "0",
		"356a192b7913b04c54574d18c28d46e6395428ab": "1",
		"da4b9237bacccdf19c0760cab7aec4a8359010b0": "2",
		"77de68daecd823babbb58edb1c8e14d7106e83bb": "3",
		"1b6453892473a467d07372d45eb05abc2031647a": "4",
		"ac3478d69a3c81fa62e60f5c3696165a4e5e6ac4": "5",
		"c1dfd96eea8cc2b62785275bca38ac261256e278": "6",
		"902ba3cda1883801594b6e1b452790cc53948fda": "7",
		"fe5dbbcea5ce7e2988b8c69bcfdfde8904aabc1f": "8",
		"0ade7c2cf97f75d009975f4d720d1fa6c19f4897": "9"
	};
	$.ajax({
		url: "https://www.xxx.yyy.edu.tw/EleCos/Handler1.ashx",
		type: "post",
		async: false,
		success: function(voice) {
			document.getElementById("txtCONFM").value =
				numHash[voice[0]] +
				numHash[voice[1]] +
				numHash[voice[2]] +
				numHash[voice[3]] +
				numHash[voice[4]] +
				numHash[voice[5]];
		}
	});
})();

為了存進書籤,我們把寫好的javascript壓成一行

javascript: (function(){ var numHash={b6589fc6ab0dc82cf12099d1c2d40ab994e8410c:"0","356a192b7913b04c54574d18c28d46e6395428ab":"1",da4b9237bacccdf19c0760cab7aec4a8359010b0:"2","77de68daecd823babbb58edb1c8e14d7106e83bb":"3","1b6453892473a467d07372d45eb05abc2031647a":"4",ac3478d69a3c81fa62e60f5c3696165a4e5e6ac4:"5",c1dfd96eea8cc2b62785275bca38ac261256e278:"6","902ba3cda1883801594b6e1b452790cc53948fda":"7",fe5dbbcea5ce7e2988b8c69bcfdfde8904aabc1f:"8","0ade7c2cf97f75d009975f4d720d1fa6c19f4897":"9"};$.ajax({url:"https://www.xxx.yyy.edu.tw/EleCos/Handler1.ashx",type:"post",async:false,success:function(voice){document.getElementById("txtCONFM").value=numHash[voice[0]]+numHash[voice[1]]+numHash[voice[2]]+numHash[voice[3]]+numHash[voice[4]]+numHash[voice[5]];}}); })();

加入chrome的書籤,完成~

使用效果

以後再也不用在那邊手打驗證碼,晚人家個幾秒就搶不到課啦

6 Comments

發佈回覆給「Andy Wu」的留言 取消回覆

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *