有些时候,我们会有一些很大的JS文件代码需要混淆加密,例如:

如何对超大JS文件混淆加密?_js加密

如何对超大JS文件混淆加密?_js混淆_02

这个3.4MB的JS文件,通常来说是不容易一次性完成混淆加密的。因为代码量太大。

在混淆加密JS代码时,要将代码转化成AST(抽象语法树),再对AST进行处理,混淆加密完成后,再重建为JS代码。而像3.4MB大小的文件,代码量可能达到几万行,甚至几十万行,可以想像:进行各种转码、逐行处理,是种什么样的工作量,即使是程序自动处理,也会非常耗时。因此,对这样量极的JS代码进行混淆加密,在线的JS加密工具,是不允许的,不接受这样大的文件,或需要高权限。

如果我们要处理这样大的文件,需要些技巧。

方法一、

这样大的文件,通常不是手写完成的,而是使用各种工具打包、编译生成的。比如可能是webpack将很多文件打包在了一起,或者可能是h5游戏引擎(cocos、白鹭,等等)编译而成。

如果打包或编译前的源码也是JS,那么,可以对未打包前的原始JS代码文件混淆加密,会比较轻松,先混淆加密,然后再打包编译。

方法二、

如果原始代码是非JS语言,比如,可能是TS,那就无法对原始代码混淆了。只能处理这个大的JS文件。

处理方式,也不太复杂。以上面给出的文件为例。

首先,将JS代码格式化(上图中可见,文件是压缩成一行的,如果是未压缩的代码,则不必格式化)。

JS代码格式化可使用:

fairysoftware.com/js_ge_shi_hua.html

上图代码,格式化之后:

如何对超大JS文件混淆加密?_js加密_03

(见图,代码量:约8万行)

然后,进行分块处理。

如何分块呢,比如,先复制一部分代码,可以是一个或多个函数,等。(注:取完整的函数或代码块,保证复制的这部分代码是整体、不会破坏函数体完整性)。

如何对超大JS文件混淆加密?_js加密_04

将这部分代码,复制,并到JShaman网站进行混淆加密:

如何对超大JS文件混淆加密?_js混淆_05

混淆加密之后,将代码贴回文件原位置进行代码替换:

替换后的效果:

如何对超大JS文件混淆加密?_js混淆_06

以此类推,完整体个JS文件代码的混淆加密。

当然,这个过程,也可以写程序自动调用进行,比如:获取每个函数的代码,调用JShaman的Web API进行混淆加密,加密后替换原代码。

如果是企业级的应用,经常有这样处理大JS文件的需要,如此处理可能还是有些繁琐。更直接的方法是使用JShaman的本地部署,是不限文件大小的。