今天有這樣一需求,要求能夠查詢盛付通卡的狀態,官網如下 http://www.801335.com/status/index.htm
剛一打開網址,發現兩個輸入框加一個驗證碼,心中一喜不是小 case 驗證碼沒有粘貼也沒怎麼變形手到擒來,三五兩下識別做完了 正確率還不錯,90+%..
驗證碼做發了,開始抓包,一下就懵了,發現他的數據好像被加密了,先上一張圖
回過頭來後,仔細看了下他的界面,發現了貓膩,他卡號和密碼輸入的地方是 flash UesTextInput-1.4.swf 文件名是這個,再看了看,他的 JS代碼發現關鍵的幾行
// 獲取加密Key
var encryptedKey = document.getElementById(swfObjId).GetKey($("#base64Cert").val());
$("#"+keyEleId).val(encryptedKey);
// 獲取加密數據
var encryptedData = document.getElementById(swfObjId).GetValue();
$("#"+dataEleId).val(encryptedData);
原來,他是通過 flash把輸入的文本加密後再賦值給 input 輸入框. 即然知道他的現實,我馬上就有思路了
方案一
C# 調用 flash 的Com組件來實現,通過模擬鍵盤來輸入卡號和密碼來實現加密並批量查. 具體的實現這裡不講了,
程序是跑起來了,但是發現一個問題.在多線程的情況下,flash加密存在一個問題,不能同步,沒辦法,你不同步我給你同步吧,加了一個同步機制,可以了沒問題了 一是一 二是二,但是同步後,查詢的速度下來了,差不多 1-2秒才能查一張卡,奶奶的受不了,還不如我手工查得快,沒辦法是 革命沒有成功,還是繼續
方案二
你不是用的flash加密嗎 你加密碼再厲害還不是在客戶端完成的,只要是在客戶端完成的 我就不信我拿你沒辦法,呵呵, 經過幾年的開發積累,什麼都沒有,有的就是積累的小工具,
flash是吧,把我N年前有的 閃客精靈用上試下
比較古老的一個版本,沒關系,只要能派上有場就行....
歐啦 ,什麼出來了,現在要做的 就是 A3代碼轉成我們可愛 C#代碼,就一切搞定了
其實需要重寫的方法也只有兩個,剛才在上面就是JS調的那兩個
GetKey GetValue 就這兩個,重寫的代碼就不貼了,最後再上張軟件的效果圖
開 10個線程,速度槓槓的.............
--幸福海
博客地址:http://www.cnblogs.com/ningqhai/