首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何最好地混淆HTML/Javascript/WebGL代码?

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

Stack Overflow用户
提问于 2015-10-19 13:33:49
回答 2查看 1.9K关注 1票数 3

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

我已经找到了工具UglifyJS,我可以用它一个一个地混淆.js文件。我还找到了可以用来混淆GLSL代码的工具GLSL编译器

这种方法有两个问题:

  1. 这部分是手工操作。我得剪、粘贴、编辑。
  2. 由于GLSL编译器不混淆.js,所以不能更改GLSL中统一变量的名称。另外,如果我将一个包含函数的文件粘贴到UglifyJS中,它将不会更改函数的名称,因为它不知道从哪里调用函数。

有没有任何工具或工具的组合会给我一个更少的手工和更完整的混淆?

EN

回答 2

Stack Overflow用户

发布于 2015-10-19 13:37:15

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

http://jsutility.pjoneil.net

我有多个JS文件,作为一个批处理脚本运行,它将所有文件合并到一个文件中,混淆它们,压缩它们,然后压缩它们。效果很好。我有超过2mb的javascript压缩到350 2mb左右使用这个加上它的免费!

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

代码语言:javascript
复制
<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文件:

代码语言:javascript
复制
Script WSFFileNameYouUsed.wsf
pause
票数 1
EN

Stack Overflow用户

发布于 2015-10-20 11:36:59

您可以将GLSL文件保存在外部源中。我知道这应该会增加网站的总加载时间(更多的请求),但在我们的情况下,这并不是很明显。此外,3D应用程序需要下载(并处理!)加载时还是有很多数据的。

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33215836

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档