【问题标题】:How do I best obfuscate HTML/Javascript/WebGL code? [closed]如何最好地混淆 HTML/Javascript/WebGL 代码? [关闭]
【发布时间】:2016-01-17 21:12:51
【问题描述】:

我有一些 HTML/Javascript/WebGL 代码想要混淆。 我的代码由一个 .html 文件、几个 .js 文件和嵌入在 .html 文件中的 GLSL 代码组成。

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

这种方法有两个问题:

  1. 它部分是手动的。我必须剪切、粘贴和编辑。
  2. 由于 GLSL 编译器不会混淆 .js,因此无法更改 GLSL 中统一变量的名称。另外,如果我粘贴一个文件 包含一个函数到 UglifyJS 它不会改变名称 该函数,因为它不知道从哪里调用它。

是否有任何工具或工具组合可以减少手动和更完整的混淆?

【问题讨论】:

    标签: javascript html three.js webgl


    【解决方案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
    

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-11-21
        • 2010-10-20
        • 2018-08-01
        • 1970-01-01
        • 2011-02-02
        • 2013-10-01
        • 2011-10-26
        相关资源
        最近更新 更多