關於JS程式碼混淆,一直有兩種觀點。
一種觀點認為很有用,是JS程式碼保護的重要手段,這是主流觀點。
但也見到少數人稱不管用,是紙老虎,混淆後的程式碼還能讀懂,隨隨便便就能破解。
哪種觀點才是正確的呢?我們透過實驗來證明。
實驗使用
JShaman
平臺,這是一個專業的JS程式碼混淆加密平臺。
測試用程式碼,就使用平臺提供的例程,簡單的幾行:
保護選項,去掉預設的“壓縮程式碼”功能,為方便我們檢視混淆後的程式碼。
一鍵完成混淆,得到保護後的程式碼:
跟前面保護前的4行程式碼相比,很顯然複雜了很多,跟原始程式碼相比差別很大,絕不是隨便就看看出程式碼邏輯和功能的。這還只是使用預設的保護選項,保護等級比較低,因此在程式碼中還有“hello world”字串能被看到。
如果使用更多的保護選項,提高混淆強度,又會如何呢?
多勾選兩個混淆選項:
再次一鍵完成保護,得到:
可以看到,這次得到的保護結果更為複雜。短時間、甚至長時間也不容易讀懂並還原回原有的程式碼邏輯。
實驗到這裡,顯然可以說:JS混淆,不是紙老虎,是真有用。
那麼,混淆後的程式碼,是否可以進行反混淆,還原為原始程式碼呢?
有的人認為可以。實驗繼續進行:
對保護後的程式碼反混淆,通常用esprima、escodegen。
我們準備以下程式碼實現一個反混淆工具
注意在程式碼中,傳入了要進行反混淆的程式碼,即上面我們混淆的結果。
執行,得到反混淆結果:
可以看到,確實條理化了程式碼,但遠遠沒有還原回原本的程式碼,還記的原本的程式碼,對比一下:
而且我們可以思考一下:比如有一個變數名:car,它是一個有字面意義的變數。經混淆後,它會被變成隨字串,比如:_0x12345。在反混淆時,反混淆程式、工具,無論如何也不可能知道它原本的名稱是car。那麼,也就絕對不可能把程式碼完好還原回去。
實驗結果證明:JS混淆,是有效的JS程式碼保護方式!
- 上一篇:劉秋崖冬夜鬥縊鬼
猜你喜歡
- 2021-12-13中國首次承辦!這個大會明年在漢舉辦
- 2021-12-06伐木工變身護林員,森林管護全覆蓋,青海北山林場再現雪豹
- 2021-05-05心理測試:你喜歡下面的哪種花呢?測你在TA心裡是不是重要!
- 2021-04-10如果你用的是華為手機,花1分鐘關掉這5個設定,再用2年都不卡
- 2021-04-08小測試丨感染性疾病藥物治療及處方稽核要點試題