2015-10-19 91 views
2

我有一些我想混淆的HTML/Javascript/WebGL代碼。 我的代碼由一個.html文件,幾個.js文件和嵌入在.html文件中的GLSL代碼組成。如何最好地混淆HTML/Javascript/WebGL代碼?

我找到了工具UglifyJS,我可以用它來逐個混淆.js文件。 我還發現了可用於混淆GLSL代碼的工具GLSL Compiler

有兩個問題的方法:

  1. 這部分是手工。我必須剪切並粘貼和編輯。
  2. 由於GLSL編譯器不會混淆.js,因此它不能更改GLSL中統一變量的名稱 。另外,如果我將一個包含函數的文件 粘貼到UglifyJS中,它將不會更改該函數的名稱 ,因爲它不知道它從哪裏調用。

是否有任何工具或工具的組合會給我一個較少的手動和更完整的混淆?

回答

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> 

然後,我創建一個批處理文件與此:

Script WSFFileNameYouUsed.wsf 
pause 
1

你可以保持GLSL文件外部來源。我知道這應該會增加網站的總載入時間(更多請求),但在我們的情況下並不是很明顯。此外,3D應用程序在加載時需要下載(並處理!)大量的數據。

至於重命名制服,我不認爲你可以安全地做到這一點,而不會中斷一些用例。你可以使用模式匹配,但是你必須給你的制服指定非常具體的名字,即使這樣你也必須注意那些新名字不會干擾現有的名字。它與UglifyJS類似,不會更改對象內部字段的名稱。