如何最好地混淆HTML / Javascript / WebGL代码?

时间:2015-10-19 13:33:50

标签: javascript html5 three.js webgl

我有一些HTML / Javascript / WebGL代码,我想混淆。 我的代码包含一个.html文件,几个.js文件和嵌入在.html文件中的GLSL代码。

我找到了可以用来逐个混淆.js文件的工具UglifyJS。 我还找到了可以用来混淆GLSL代码的工具GLSL Compiler

这种方法存在两个问题:

  1. 部分是手动的。我必须剪切和粘贴并编辑。
  2. 由于GLSL编译器不会混淆.js,因此无法更改 GLSL中统一变量的名称。如果我粘贴一个文件也是如此     包含一个函数到UglifyJS它不会改变名称     该函数因为它不知道从哪里调用它。
  3. 是否有任何工具或工具组合可以减少手动和更完整的混淆?

2 个答案:

答案 0 :(得分:1)

对于JS,我一直很喜欢这个剧本:

http://jsutility.pjoneil.net

我有多个JS文件,将其作为批处理脚本运行,它将所有文件合并到一个文件中,对它们进行模糊处理,压缩它们然后压缩它们。它很棒。我已经有超过2mb的javascript压缩到大约350kb使用此加上它的免费!

快速示例,从网站下载代码,然后创建一个大致相同的wsf文件。

<job id="ObfuscateJavascript">

    <script language="VBScript">
        Function WSHInputBox(Message, Title, Value)
            WSHInputBox = InputBox(Message, Title, Value)
        End Function
    </script>

    <reference object="Scripting.FileSystemObject" />
    <script language="JScript" src="JSUtility_BatchCodeC.js" />
    <script language="JScript">

        var vbOKOnly = 0;
        var vbInformation = 64;
        var title = "What Project are you building for?";
        var prompt = "Enter a file name:";
        var WshShell = WScript.CreateObject("WScript.Shell");
        var result = WSHInputBox(prompt, title, "FileName");

        if (typeof result != "undefined") {
            InputFiles.push("File1.js");
            InputFiles.push("File2.js");
            InputFiles.push("File3.js");

            // Obfuscation options
            Obfuscate.Options = {
                DefinedGlobalVars: true, 
                ObjectMembers: false, 
                StringVariables: true, 
                MinimumStringLength: 12, 
                RestructureIfStmts: true
            };

            // Compaction options
            Compact.Options = {
                AddMissingSemicolons: true, 
                LeaveNewLines: false, 
                LeaveNewLineAndComment: false, 
                RemoveUnnecessarySemicolons: true
            };

            // Compression options
            Compress.Options = {
                ISO8859Compatable: true, 
                UTF8Compatible: true
            };

            // File output
            OutputFile = result + ".min.js";

            // Operations to apply to javascript
            Operations = {
                Validate: false, 
                Obfuscate: true, 
                Compact: true, 
                Compress: true, 
                StopOnWarning: false
            };

            JSUtilityBatch();
        }

    </script>
</job>

然后我用这个创建一个bat文件:

Script WSFFileNameYouUsed.wsf
pause

答案 1 :(得分:1)

您可以将GLSL文件保存在外部源中。我知道这应该会增加网站的总加载时间(更多请求),但在我们的情况下,它并不是真正引人注目的。此外,3D应用程序在加载时无论如何都需要下载(并处理!)大量数据。

至于重命名制服我不认为你可以安全地做到这一点而不会破坏一些用例。您可以使用模式匹配,但您必须为您的制服提供非常具体的名称,即使这样,您也必须注意这些新名称不会干扰现有名称。它与UglifyJS类似,不会更改对象内的字段名称。