Js腳本加密思路解析

Js腳本加密思路解析

純粹的js腳本可以被下載到本地,從而把你辛辛苦苦寫出來的代碼據爲已有,所以網上有很多加密js腳本的方法,然而高手們在研究加密方法的同時也指出,絕對的安全對js代碼來說是不可能的,因爲無論怎麼加密,最終你要把加密後的代碼通過解密過程在客戶端的瀏覽器中運行起來。也就是說加密的過程可以不寫在目標代碼中,而解密過程則必須要寫在代碼中,否則瀏覽器沒辦法執行。

網上有另外一種辦法,就是把js腳本嵌入到asp代碼中,這種辦法是否可行,我沒有驗證,因爲我是phpapache等開源軟件的擁護者,對asp不瞭解。後又從網上查到apache可以支持asp,終因還要裝什麼軟件嫌太麻煩,沒有實施。

經過苦苦思索和苦苦搜索,我終於形成了自己的一套js加密的思路,心中不敢懈怠,趕緊記錄下來,恐怕這個思路被轉瞬間遺忘。

先說加解密過程,如果有一種辦法,能夠使加解密過程依賴於一個外部數據,在不知道外部數據的情況下,即便是知道解密算法的情況下也很難破解,那麼這個算法就是很安全的。這個外部數據也稱爲密鑰,這種加密算法業界應該是很多的。不用那些已經載入史冊的算法,自己現編一個都來得及。

現在重點回到了如何使用一個用戶無法獲取的外部數據的問題上來了。直接在js裏面寫字符串常量,不行,因爲js代碼是可以被客戶端看到的,既能看到算法,也能看到密鑰。那就要考慮從其它腳本語言中傳給js,我第一個想到了phpphp腳本客戶端是無法看到的,如果能從php傳遞一個字符串變量給js,那是再好不過的了,經過查找網絡,說是有不少方法,結果看了之後發現,是用明碼的方式傳遞的,傳是傳了,可以在js代碼中也能看到,這就失去了它做爲密鑰的意義。其它語言我還不怎麼會,暫時就到此爲止,只能從js內部來找問題的解決方案了。

js的文檔中找了許久,發現有一個屬性可以利用,也就是document.file相關的屬性,說具體了也就是文檔的創建和修改時間,這個是用戶無法知道的。當用戶不知道這個密鑰,想要破解這個算法,只能是利用所有可能的密鑰一個一個地試,密界稱之爲暴力破解。想想可以有至少幾百年的秒數的數字讓暴力破解者來嘗試,可想是很安全的。

正當我沾沾自喜時,一個念頭滑過我的腦海,用戶會不會能通過瀏覽器來得知文檔的創建和修改時間呢?我趕緊打開瀏覽器在菜單中找啊找,果然,在文件->屬性菜單中,彈出一個對話框,上面赫然列有當前瀏覽文檔的創建和修改日期。這個方法面臨被斃的危險,後來我實在沒有找到文檔的修改時間,也就是時分秒等數據,這才鬆了口氣,不能用日期,還可以用時間,可以利用一天24小時內的任何一個時間。後來又想一天才上8個小時班,文檔的修改時間肯定在這8個小時內,算了一下,可供暴力破解的數據爲2萬多,不保險,只要編個程序,2萬多密鑰一會兒就能試完,後來又一想,還可以把開發網頁的機器時間調亂,比如調成半夜兩點鐘,這樣可以把網頁的創建時間修改爲半夜的時間,這樣必須要試到的數據又可以增加到24小時的秒數,達到8萬多。達到這種程度,可以對付一般的用戶了,因爲使用一個稍微複雜一點的算法,比如,驗證一個密鑰用1秒鐘時間,那很驗證完所有的密鑰需要一天時間,24個小時,再下下功夫,編一個驗證一個密鑰需要10秒鐘時間的解密算法,那就需要10天來驗證完所有可能的密鑰,恐怕沒幾個人有那份耐心,況且我寫的js代碼也不值得花那很長時間來破解吧,呵呵。話說回來,10秒鐘解析一個密碼,對使用js程序的用戶來說也幾乎是一個極限了,因爲一個網頁從加載到完全打開,用戶沒有耐心去等待那麼長的時間。需要驗證的密鑰多是多了,可還不保險。只能再想其它的辦法。

再之後又找到一種辦法,使用頁面自動轉向的辦法,也就是用戶鍵入一個地址時,加載這個網頁,而這個網頁又加載另外一個網頁,同時,用寫cookie的方式將數據傳給後面加載的網頁。我試了一下,很爽!這樣一來,我可以在第一個網頁中寫上密鑰,然後將這個密鑰傳給後一個網頁。雖然寫在前一個網頁裏,但是用戶沒辦法查看前一個網頁的源碼,因爲在加載第一個頁面時,瞬間轉向了後一個網頁了。正當我準備慶祝時,保持冷靜的一塊大腦區域卻給我敲響了另一個警鐘:如果在IE瀏覽器中禁止執行js腳本的話,那麼也就無法轉向後一個頁面了,那就可以查看第一個頁面的源碼了,密鑰也就暴露無疑了。呵呵,勝利已經在不遠處招喚我了,不用明碼密鑰,那乾脆就再使用一次文檔修改時間吧,兩個頁面的修改時間組合在一起,那就需要8萬多再乘上8萬多這麼多的密鑰需要驗證。

在離勝利最近的地方,我又上網搜索了一下如何能查看網頁的修改時間,以保萬無一失,結果在一個不起眼的角落,有人做出如下結論,在地址欄中打入javascript:alert(document.lastmodified)就可以看到修改時間了,這被稱做在地址欄執行腳本。我又被打了一悶棍!在地址欄上可以執行任何腳本,也就意味着可以查看document的任何信息,包括cookie,我的密鑰也就沒有任何祕密可言了,無奈中還是請出了網絡,在一藏龍臥虎之站找到了屏蔽地址欄腳本的辦法。

到目前爲止,因爲資歷尚淺,沒有遇到敵方(也就是破解方)的消息,暫且把這當做勝利吧!需要清醒地知道,這僅僅是暫時的勝利,真正高手是隱藏在互聯網背後的,他們想看你的js文檔信息,就像看自己的手心手背一樣,不用說我這種雕蟲小技,估計前面所說的用asp嵌入js代碼的方式對他們來說,破解都不是問題。雖然如此,能夠有一個自己的加密js的思路,能夠對付較低級的破解者,還是值得慶賀的。

發佈了56 篇原創文章 · 獲贊 7 · 訪問量 9萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章