第二卷 第68章 破解遊戲(中)
這類遊戲一般都是從簡單到複雜的,類似於單機遊戲那種關卡闖蕩,不過這裡要用到的是計算機知識,其中涉及到的內容有很多,例如網絡知識,破解知識,黑客知識等等。
第一關非常簡單,許毅想都沒想就點擊右鍵,然後查看網頁的源代碼。果然,裡面有這麼一句「哈哈,被你發現了。不過下次可就沒那麼容易了。這一關的過關密碼是BD.」許毅看到原來這幾個字設定的字體顏色是和背景色一樣。他用鼠標將網頁中的內容反選,果然可以看到這幾個字。
這一關的確非常簡單,只要拿著鼠標隨便選擇就能碰巧看到了。看來是出題者為了調動闖關者的積極性而設的,當然,只是針對那些剛剛開始學習相關知識的菜鳥們。
順利進入第二關。網頁的內容和前面差不多,肯定不會像第一關那麼簡單了,許毅還是下意識地想查看源代碼,畢竟從網頁直接看不出什麼,要想突破只能從源代碼入手。點擊右鍵之後,彈出一個對話框:「^_^ 加油,繼續努力!」。
原來是將右鍵給屏蔽掉了。這種方法在早期有很多人使用,很多比較小氣的站長不願意來訪者將網頁中的內容複製保存下來,於是便用這種方法來為難那些不懂技術的來訪者,通常情況下,大部分人都是抱著比較隨意的態度,你不讓複製就不複製了,不會非得把上面的內容抓下來不可。
這個關卡當然難不倒許毅,只能攔攔菜鳥而已,許毅有N種方法可以破解。這個效果主要是用一種名為JavaScript的動態腳本實現的(注意:此語言和傳說中的Java語言沒有任何親戚關係,號稱被誤解最為嚴重的編程語言)。當訪問者點擊鼠標右鍵的時候,它就會第一時間得知(捕獲),然後按照程序員編寫的預定程序功能來響應這個「事件」,例如點擊右鍵什麼反應都沒有、彈出對話框等功能。
那麼,怎樣才能破解呢?對了,就是讓這個腳本語言失效,讓它不起作用。
網頁瀏覽器(如IE)內部集成了一個腳本語言的解釋功能,只要將這個功能給禁用掉,那網頁中的腳本程序就成了擺設,什麼效果都不會有。而這個功能是很容易就可以禁用掉的,只要在簡單的勾掉其中的一個功能選項而已。
不過對許毅來說,這個方法還是相對比較麻煩,等看完源代碼之後又要把設置還原。因為如果禁用掉這個功能,以後網頁中的一些動態效果都沒有了。許毅用的方法是直接在地址欄中的網址前面敲入一個命令「view-source:」,這個命令也是瀏覽器本身認識的命令,意思就是「查看源文件」,執行「view-source:http://***」之後,裡面的源代碼就顯示出來了。
還有一個比較簡單的方法,那就是直接用瀏覽器工具欄上的查看「源文件」功能。除此之外,還可以用其他軟件打開,例如windows系統中的記事本,寫字板之類的,直接把網址填入要打開對話框的地址內,都可以。如果不怕麻煩,那就直接用下載軟件將這個頁面下載下來再看。
許毅很順利地看到了第二關網頁的源代碼,大致瀏覽了一下,發現了一段比較可疑的編碼,許毅推斷過關密碼應該隱藏在其中。
這段編碼內容為:「%B9%A7%CF%B2%B9%FD%B9%D8%A3%A1%B1%BE%B9%D8%C3%DC%C2%EB%CA%C7%45%32」
第二關還有點難度,許毅呵呵一笑。看到這個段奇怪的編碼他就知道怎麼破解了。看這它們的形式,很顯然是URL編碼,也就是網址轉換的時候的編碼。在上網的時候,經常可以看到這樣的編碼,是瀏覽器用來打包表格輸入的一種格式,這種情形在用搜索引擎搜東西的時候最常見,搜索的內容通常都會轉換成這種形式呈現在瀏覽器的地址欄中(至於為什麼要這樣以後再解釋)。
URL編碼其實就是字符ASCII碼(美國國家信息交換標準代碼)的十六進制,不過稍微有些變動,需要在前面加上「%」。比如反斜槓「」,它的ASCII碼是92,而92的十六進制是5C,所以它的URL編碼就是%5C.漢字的編碼也是同樣的原理,如「胡」的ASCII碼是17670,十六進制碼是BAFA,則它的URL編碼是「%BA%FA」,由於一個漢字佔兩個字節,所以中間多了個「%」。
平時通常用不上URL編碼,因為IE會自動將輸入到地址欄的非數字字母轉換為URL編碼,只有程序員在編寫某些相關功能的程序的時候才需要用到其中的原理,當然,身為一個黑客,這個編碼是需要掌握的,有些入侵行為就需要用到這個知識(如:SQL注入)。
這點小知識許毅早就掌握得滾瓜爛熟,他乾脆調出編譯器,當場編寫了一個URL編碼轉換器,反正知道原理,編寫起來不用花多少時間,而且,以後也用得上。
將那段編碼複製到自己剛剛編寫的小程序中,轉換成了幾個漢字:「恭喜過關!本關密碼是E2」。
許毅微笑起來,雖然題目沒什麼難度,但這樣過關的感覺還是不錯,第二關的難度明顯比第一關要大上很多,估計會難倒一片菜鳥。第三關的難度怎樣呢?許毅還真有點期待了,希望能夠讓自己頭痛一下,最近正在研究密碼學呢。
填入第二關的密碼,順利進入第三關。步驟有些大同小異,還是得查看源代碼,不過這次的源代碼看上去比較混亂,不像前兩關那樣,一眼看去,就能發現密碼大概在某個部位。第三關的頁面裡面有很多用來干擾的代碼,主要是一些腳本代碼。這就要求闖關者對網頁編程比較熟悉,能夠讀懂這些代碼,至少應該知道那些代碼應該會完成哪些功能,哪些代碼有用,而哪些代碼只是起干擾作用。
許毅很快找到了目標,在驗證的時候出現了一段密文,許毅一看,知道用的是JScript.Encode加密,只要用相應的解密功能就能搞定,這對別人來說也許是個難題,但許毅自然能夠輕易搞定,他很順利地進入第四關,他想看看到底有多少關,並且想早一點看到最後一關。
第二卷 第69章 破解遊戲(下)
進入第四關,許毅找了老半天,實在是沒找到哪個地方是突破口,源代碼是檢查了一遍又一遍,正懷疑線索可能並不在源代碼中的時候,他終於發現了奇怪之處。
在源代碼中有這麼一句:
<SCRIPT SRC=「JavaScript」></SCRIPT>
疑點就在這裡了,這段代碼看上去好像沒什麼問題,可是卻沒什麼具體的作用。通常情況下,腳本代碼都是夾在<SCRIPT>和</SCRIPT>之間的,但這個其中卻沒有任何代碼。這還不是主要的,關鍵在於,如果網頁腳本語言要使用JavaScript語言的話,正確格式應該為:
<SCRIPT Language=「JavaScript」></SCRIPT>
或者,將腳本獨立出來,直接放到另外一個文件中,然後進行引用。則語法為:
<SCRIPT SRC=「文件名」></SCRIPT>
也就是說,上面那個是引用了一個文件了,而文件名正好是JavaScript,出題者這麼出,正好是利用它們之間的相似之處,如果對這兩個概念不清楚,還真不能發現其中的疑點,當然,這麼一句無關緊要的代碼隱藏在大量代碼中,如果不細心也是發現不了的。
許毅按照上面的地址,將那個文件打開,果然裡面有東西,準確的說裡面是一句密文,許毅知道自己找對了。
就這麼一句密文,不知道加密算法也是沒有任何辦法的。加密算法何其多,任許毅如何厲害,單憑一句密文也是不能破解的,這個不比軟件破解,這只是一個過關密碼,也不能根據上下文來推斷,各種情況都是有可能的。
既然這是闖關遊戲,那肯定還有其他什麼線索,這點是可以肯定的。於是,許毅又回到網頁源代碼上,仔細閱讀起來,在其中,發現了一小段和加密有關的代碼,不過這段代碼實際上是沒有起作用的,並沒有得到執行,唯一的作用那就是干擾了。其中用的加密方式是base64加密,許毅感覺到自己又一次抓住了過關的鑰匙。
許毅再次查看了一下密文的特點,更加肯定這正是用base64加密算法加密的密文了。
Base64是互聯網上用的比較多的一種算法,它是為了解決郵件傳輸中的加密和二進制數據(聲音、圖形圖像等)傳輸問題而產生的。也就是說,這個算法和郵件聯繫緊密,幾乎所有的電子郵件軟件都把它作為默認的二進制編碼,它已經成了現今電子郵件編碼的代名詞。
它的主要思想是將輸入的字符串或數據編碼成只含有{『A』-『Z』, 『a』-『z』, 『0』-『9』, 『+』, 『/』}這64個可打印字符的串,故稱為「Base64」(基於64個字符)。它構造簡單,速度快,但安全性就一般了,因為這是一種可逆的加密算法,也就是說只要知道密文,就可以將明文很輕易地恢復過來。
在PHP編程中,裡面就內置了這樣的加密函數,所以許毅很輕易地就將密文破解了,得到了進入第五關的密碼。
來到第五關的頁面,這次倒乾脆,直接給出了一個16位的密文,另外還有一段提示,說密碼是6位純數字。16位的密文,許毅立刻就想到了MD5加密,再聯繫題目給出的提示,許毅大致猜測自己的推斷應該是不錯了,不然也不會給出這麼一個提示。
看到這個,許毅有些無奈了,他估計這關卡也許就到頂了。因為MD5加密算法是不可逆的,許毅要想破解,就只能是暴力破解了,編寫一個軟件對6位數字進行窮舉,肯定可以將密文跑出來。
既然是MD5,前面自然還有MDX(X<5),不過自從MD5算法91年誕生,此後十幾年,並沒有出現能夠取代它的MD6,可見其安全性之高。當然,它並不是沒有瑕疵,但這已經不影響它廣泛應用了。Unix系統中用戶的密碼就是以MD5經加密後存儲在文件系統中。當用戶登錄的時候,系統把用戶輸入的密碼計算成MD5值,然後再去和保存在文件系統中的MD5值進行比較,進而確定輸入的密碼是否正確。通過這樣的步驟,系統在並不知道用戶密碼的明碼的情況下就可以確定用戶登錄系統的合法性。這不但可以避免用戶的密碼被具有系統管理員權限的用戶知道,而且還在一定程度上增加了密碼被破解的難度。
現在許毅手中並沒有能夠跑密碼的工具,所以他也就不急著繼續,加上此刻時間已晚,他也就睡下了。
第二天,許毅找到周松一問,果然如許毅所料總共的關卡只有五關。這個破解遊戲公佈以後,大家紛紛向其發起了衝擊,可惜的是大部分人連第二關都闖不過去。紛紛在論壇抱怨,關卡難度太大,打擊人的信心云云。
這些題目的難度說大也不大,說小也不小,需要的知識並不多,總得來說技術含量不高,但要想順利闖過去,確實需要一些能力。
通過周松,許毅得知,這些題目並不是他出的,而是出自一個網名為「石頭」的朋友之手。許毅問了一下,連周松都只能闖過三關,在第四關難住了。那石頭是黑客學院的技術組顧問,對黑客學院的發展起了不小的作用。
「這個方法不錯,值得大力推廣。」寓教於樂,這一直是許毅比較推崇的一種教學方式,「不過這幾個題目出得還是不怎麼科學,前後跨越比較大,得一步一步來。」
接著,許毅給出了幾點自己的建議。由於黑客學院是黑客類的,破解方面肯定不會太過專業,可以再設計一些黑客闖關遊戲,不過難度不能太大,關卡多一點,每一關涉及一些黑客知識,過關之後可以給出上一關的講解,即將上一關所涉及到的知識都公佈出來,這樣還可以查漏補缺。
等時機成熟之後,還可以將這個活動擴大,形成賽事,獲勝者給予一些必要的獎勵。
至於破解方面,許毅決定專門分出一個板塊,重點研究加密解密技術,培養這方面的專才。
對許毅的建議,周松絲毫不敢怠慢,全部採納。不過卻有些為難,畢竟如果經常要組織這樣的活動的話,需要不少精力,而且最關鍵的是那些闖關的題目。最後還是許毅答應負責設計一部分關卡,密解密板在初期也多照顧照顧。
就這樣,幾年之後的中國黑客界內最具影響力的大賽--「中國黑客攻防大賽」--和中國最大的破解組織--「中國破解聯盟」--的雛形形成了。 |