js加密,是前端很常見的需求。
常見的方法是用jshaman、jsjiami.online等進行js代碼混淆加密。
是否有其它的方案呢?比如:我們能否自己開發一種前端瀏覽器語言,取代js(將js代碼,轉化為自己獨特的語言,從而讓他人看不懂),以此實現變相的js代碼加密。
以此思路,下面進行嘗試和研究。
有一個符合這個想法的腳本,名為livescript,也可以在前端執行。
它的代碼形式如下:
執行輸出:
這個小眾的語言,語法與js是有不小差異的。如果大量的這種代碼出現在前端,替代js,實現各種功能,貌似是具備了加密的效果。
例如,這陌生的語法,js程序員看著肯定是一臉懵:
而且,還有方法可以實現javascript與livescript語法轉換:
目前為止,似乎是OK的:將js轉化為livescript,然后再發布。
那么livescript這種語法在瀏覽器中是怎么被執行的呢?
經簡單分析得知,livescript在瀏覽器中執行前,會進行編譯:
其中的output變量看起來有些可疑,在此加一句console.log,輸出,看看它是什么:
執行:
果然如此,livescript編譯是把它自定義的語法轉化成了js代碼(livescript代碼被還原為了js代碼)。
這就解釋的通了,理論也就正確了:js當然是可以被瀏覽器執行的。
livescript腳本最終會被轉化成js代碼。所以,它與aaencode、jjencode、jsf∪ck等類似,可以視作一種編碼。
由于能被輕易還原為js代碼,所以,并不具備很強的加密效果。如果想加密js代碼
,防止代碼被分析、復制、盜用,還是遠遠不及js混淆加密工具的(jshaman、jsjiami.online等正統js混淆加密工具)。
或者有人會說,如果livescript代碼它沒有還原為js,而是直接執行,可能嗎?
可能性比較小,這里可以聯想到wasm(WebAssembly,非指匯編語言)。如果想讓代碼直接被執行,而不是轉成js代碼,就需要有一個“執行器”,瀏覽器是只給js準備了執行器,livescript想直接執行,就得像wasm一樣也開發自己的執行器,這是個巨的大工程了,還得兼容所有js語法、還得長期隨js更新而更新(因為此處的場景要轉js為livescript,這是本文討論的應用點),綜合考慮到這些,這個方案不太可行:自創一種前端語言,替代js,以實現代碼加密不可行。無論是轉為js執行,還是自己寫執行器,都不可行。
特別聲明:以上內容(如有圖片或視頻亦包括在內)為自媒體平臺“網易號”用戶上傳并發布,本平臺僅提供信息存儲服務。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.