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

How do I best obfuscate HTML/Javascript/WebGL code?

本文关键字:Javascript WebGL 代码 HTML 何最好      更新时间:2023-09-26

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

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

这种方法有两个问题:

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

是否有工具或工具组合可以让我减少手工操作和更完整的混淆?

对于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

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

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