有些時(shí)候,我們會有一些很大的JS文件代碼需要混淆加密,例如:
這個3.4MB的JS文件,通常來說是不容易一次性完成混淆加密的。因?yàn)榇a量太大。
在混淆加密JS代碼時(shí),要將代碼轉(zhuǎn)化成AST(抽象語法樹),再對AST進(jìn)行處理,混淆加密完成后,再重建為JS代碼。而像3.4MB大小的文件,代碼量可能達(dá)到幾萬行,甚至幾十萬行,可以想像:進(jìn)行各種轉(zhuǎn)碼、逐行處理,是種什么樣的工作量,即使是程序自動處理,也會非常耗時(shí)。因此,對這樣量極的JS代碼進(jìn)行混淆加密,在線的JS加密工具,是不允許的,不接受這樣大的文件,或需要高權(quán)限。
如果我們要處理這樣大的文件,需要些技巧。
方法一、
這樣大的文件,通常不是手寫完成的,而是使用各種工具打包、編譯生成的。比如可能是webpack將很多文件打包在了一起,或者可能是h5游戲引擎(cocos、白鷺,等等)編譯而成。
如果打包或編譯前的源碼也是JS,那么,可以對未打包前的原始JS代碼文件混淆加密,會比較輕松,先混淆加密,然后再打包編譯。
方法二、
如果原始代碼是非JS語言,比如,可能是TS,那就無法對原始代碼混淆了。只能處理這個大的JS文件。
處理方式,也不太復(fù)雜。以上面給出的文件為例。
首先,將JS代碼格式化(上圖中可見,文件是壓縮成一行的,如果是未壓縮的代碼,則不必格式化)。
JS代碼格式化可使用:
JS格式化工具:格式化、美化JS(JavaScript)代碼
fairysoftware.com/js_ge_shi_hua.html
上圖代碼,格式化之后:
(見圖,代碼量:約8萬行)
然后,進(jìn)行分塊處理。
如何分塊呢,比如,先復(fù)制一部分代碼,可以是一個或多個函數(shù),等。(注:取完整的函數(shù)或代碼塊,保證復(fù)制的這部分代碼是整體、不會破壞函數(shù)體完整性)。
將這部分代碼,復(fù)制,并到JShaman網(wǎng)站進(jìn)行混淆加密:
JS加密、JS混淆 - JShaman:專業(yè)JS代碼混淆加密平臺
www.jshaman.com/
混淆加密之后,將代碼貼回文件原位置進(jìn)行代碼替換:
替換后的效果:
以此類推,完整體個JS文件代碼的混淆加密。
當(dāng)然,這個過程,也可以寫程序自動調(diào)用進(jìn)行,比如:獲取每個函數(shù)的代碼,調(diào)用JShaman的Web API進(jìn)行混淆加密,加密后替換原代碼。
如果是企業(yè)級的應(yīng)用,經(jīng)常有這樣處理大JS文件的需要,如此處理可能還是有些繁瑣。更直接的方法是使用JShaman的本地部署,是不限文件大小的。
特別聲明:以上內(nèi)容(如有圖片或視頻亦包括在內(nèi))為自媒體平臺“網(wǎng)易號”用戶上傳并發(fā)布,本平臺僅提供信息存儲服務(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.