js加密,是前端很常見的需求。
常見的方法是用jshaman、jsjiami.online等進(jìn)行js代碼混淆加密。
是否有其它的方案呢?比如:我們能否自己開發(fā)一種前端瀏覽器語言,取代js(將js代碼,轉(zhuǎn)化為自己獨(dú)特的語言,從而讓他人看不懂),以此實(shí)現(xiàn)變相的js代碼加密。
以此思路,下面進(jìn)行嘗試和研究。
有一個(gè)符合這個(gè)想法的腳本,名為livescript,也可以在前端執(zhí)行。
它的代碼形式如下:
執(zhí)行輸出:
這個(gè)小眾的語言,語法與js是有不小差異的。如果大量的這種代碼出現(xiàn)在前端,替代js,實(shí)現(xiàn)各種功能,貌似是具備了加密的效果。
例如,這陌生的語法,js程序員看著肯定是一臉懵:
而且,還有方法可以實(shí)現(xiàn)javascript與livescript語法轉(zhuǎn)換:
目前為止,似乎是OK的:將js轉(zhuǎn)化為livescript,然后再發(fā)布。
那么livescript這種語法在瀏覽器中是怎么被執(zhí)行的呢?
經(jīng)簡(jiǎn)單分析得知,livescript在瀏覽器中執(zhí)行前,會(huì)進(jìn)行編譯:
其中的output變量看起來有些可疑,在此加一句console.log,輸出,看看它是什么:
執(zhí)行:
果然如此,livescript編譯是把它自定義的語法轉(zhuǎn)化成了js代碼(livescript代碼被還原為了js代碼)。
這就解釋的通了,理論也就正確了:js當(dāng)然是可以被瀏覽器執(zhí)行的。
livescript腳本最終會(huì)被轉(zhuǎn)化成js代碼。所以,它與aaencode、jjencode、jsf∪ck等類似,可以視作一種編碼。
由于能被輕易還原為js代碼,所以,并不具備很強(qiáng)的加密效果。如果想加密js代碼
,防止代碼被分析、復(fù)制、盜用,還是遠(yuǎn)遠(yuǎn)不及js混淆加密工具的(jshaman、jsjiami.online等正統(tǒng)js混淆加密工具)。
或者有人會(huì)說,如果livescript代碼它沒有還原為js,而是直接執(zhí)行,可能嗎?
可能性比較小,這里可以聯(lián)想到wasm(WebAssembly,非指匯編語言)。如果想讓代碼直接被執(zhí)行,而不是轉(zhuǎn)成js代碼,就需要有一個(gè)“執(zhí)行器”,瀏覽器是只給js準(zhǔn)備了執(zhí)行器,livescript想直接執(zhí)行,就得像wasm一樣也開發(fā)自己的執(zhí)行器,這是個(gè)巨的大工程了,還得兼容所有js語法、還得長(zhǎng)期隨js更新而更新(因?yàn)榇颂幍膱?chǎng)景要轉(zhuǎn)js為livescript,這是本文討論的應(yīng)用點(diǎn)),綜合考慮到這些,這個(gè)方案不太可行:自創(chuàng)一種前端語言,替代js,以實(shí)現(xiàn)代碼加密不可行。無論是轉(zhuǎn)為js執(zhí)行,還是自己寫執(zhí)行器,都不可行。
特別聲明:以上內(nèi)容(如有圖片或視頻亦包括在內(nèi))為自媒體平臺(tái)“網(wǎng)易號(hào)”用戶上傳并發(fā)布,本平臺(tái)僅提供信息存儲(chǔ)服務(wù)。
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.