| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214 |
- #if UNITY_EDITOR
- // System
- using System;
- // Unity
- using UnityEditor;
- using UnityEditor.Callbacks;
- #if UNITY_2018_1_OR_NEWER
- using UnityEditor.Build.Reporting;
- #endif
- #if UNITY_5_6_OR_NEWER
- using UnityEditor.Build;
- #endif
- namespace OPS.Obfuscator
- {
- #if UNITY_2018_2_OR_NEWER
- public class BuildPostProcessor : IPostBuildPlayerScriptDLLs
- #elif UNITY_2018_1_OR_NEWER
- public class BuildPostProcessor : IPostprocessBuildWithReport
- #elif UNITY_5_6_OR_NEWER
- public class BuildPostProcessor : IPostprocessBuild
- #else
- public class BuildPostProcessor
- #endif
- {
- //Defines if an Obfuscation Process took place.
- private static bool hasObfuscated = false;
- //The Main Obfuscation Program
- private static OPS.Obfuscator.Obfuscator obfuscator;
- //Check if unityObjects got obfuscated.
- private static bool unityObjectsAssetsNeedReverting = false;
- //Check if extern assemblys got obfuscated.
- private static bool assemblysNeedReverting = false;
-
- //Revert Unity Assets and external Assemblies, if postprocess got not called or update got cleared!
- [InitializeOnLoad]
- public static class OnInitializeOnLoad
- {
- static OnInitializeOnLoad()
- {
- EditorApplication.update += RestoreUnityObjects;
- EditorApplication.update += RestoreAssemblies;
- }
- }
- //Obfuscate Assemblies after first scene build.
- [PostProcessScene(1)]
- public static void OnPostProcessScene()
- {
- if (!hasObfuscated)
- {
- if (BuildPipeline.isBuildingPlayer && !EditorApplication.isPlayingOrWillChangePlaymode)
- {
- try
- {
- UnityEditor.EditorApplication.LockReloadAssemblies();
- //Load Settings
- var var_Settings = new Setting.Settings();
- var_Settings.LoadSettings();
- #if UNITY_2018_2_OR_NEWER
- var_Settings.IsLaterUnity_2018_2 = true;
- #endif
- //Init
- obfuscator = new Obfuscator(var_Settings);
- //Obfuscate Assemblies
- bool var_NoError = obfuscator.Obfuscate(UnityEditor.EditorUserBuildSettings.activeBuildTarget, new System.Collections.Generic.List<string>());
- if (var_NoError)
- {
- //
- EditorApplication.update += RestoreAssemblies;
- assemblysNeedReverting = true;
- //Obfuscate Assets
- obfuscator.ObfuscateAssets();
- //
- EditorApplication.update += RestoreUnityObjects;
- unityObjectsAssetsNeedReverting = true;
- //Save Assemblies
- obfuscator.Save();
- }
- hasObfuscated = true;
- }
- catch(Exception e)
- {
- UnityEngine.Debug.LogError("[OPS] Error: " + e.ToString());
- }
- finally
- {
- UnityEditor.EditorApplication.UnlockReloadAssemblies();
- }
- }
- }
- }
- public int callbackOrder
- {
- get
- {
- return 1;
- }
- }
- //Revert Unity Assets and external Assemblies.
- #if UNITY_2018_2_OR_NEWER
- public void OnPostBuildPlayerScriptDLLs(BuildReport report)
- #elif UNITY_2018_1_OR_NEWER
- public void OnPostprocessBuild(BuildReport report)
- #elif UNITY_5_6_OR_NEWER
- public void OnPostprocessBuild(BuildTarget _Target, string _PathToBuiltProject)
- #else
- [PostProcessBuildAttribute(1)]
- private static void OnPostprocessBuild(BuildTarget _Target, string _PathToBuiltProject)
- #endif
- {
- if (hasObfuscated)
- {
- if (unityObjectsAssetsNeedReverting)
- {
- RestoreUnityObjects();
- }
- if (assemblysNeedReverting)
- {
- RestoreAssemblies();
- }
- }
- RefreshAll();
- }
- private static void RestoreUnityObjects()
- {
- if (BuildPipeline.isBuildingPlayer == false)
- {
- try
- {
- unityObjectsAssetsNeedReverting = false;
-
- if (obfuscator == null)
- {
- //Load Settings
- var var_Settings = new Setting.Settings();
- var_Settings.LoadSettings();
- #if UNITY_2018_2_OR_NEWER
- var_Settings.IsLaterUnity_2018_2 = true;
- #endif
- obfuscator = new Obfuscator(var_Settings);
- }
- obfuscator.RevertAssets();
- EditorApplication.update -= RestoreUnityObjects;
- }
- catch (Exception e)
- {
- unityObjectsAssetsNeedReverting = true;
- UnityEngine.Debug.LogWarning("[OPS.OBF] " + e.ToString());
- }
- }
- }
- private static void RestoreAssemblies()
- {
- if (BuildPipeline.isBuildingPlayer == false)
- {
- try
- {
- assemblysNeedReverting = false;
- if (obfuscator == null)
- {
- return;
- }
- obfuscator.RestoreTemporaryAssemblies();
- EditorApplication.update -= RestoreAssemblies;
- }
- catch (Exception e)
- {
- assemblysNeedReverting = true;
- UnityEngine.Debug.LogWarning("[OPS.OBF] " + e.ToString());
- }
- }
- }
- public static void ManualRestore()
- {
- RestoreUnityObjects();
- RestoreAssemblies();
- }
- private static void RefreshAll()
- {
- hasObfuscated = false;
- }
- }
- }
- #endif
|