using Obfuz; using Obfuz.EncryptionVM; using System; using System.Collections; using System.Collections.Generic; using System.IO; using System.Linq; using System.Reflection; using UnityEngine; public class Bootstrap : MonoBehaviour { // [ObfuzIgnore]指示Obfuz不要混淆这个函数 // 初始化EncryptionService后被混淆的代码才能正常运行, // 因此尽可能地早地初始化它。 [ObfuzIgnore] [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.AfterAssembliesLoaded)] private static void SetUpStaticSecretKey() { Debug.Log("SetUpStaticSecret begin"); EncryptionService.Encryptor = new GeneratedEncryptionVirtualMachine(Resources.Load("Obfuz/defaultStaticSecretKey").bytes); Debug.Log("SetUpStaticSecret end"); } private static void SetUpDynamicSecret() { EncryptionService.Encryptor = new GeneratedEncryptionVirtualMachine(Resources.Load("Obfuz/defaultDynamicSecretKey").bytes); // 设置其他动态EncryptionScope的Encryptor // ... } // Start is called before the first frame update void Start() { // 在完成热更之后,加载热更DLL之前,加载Obfuz的动态密钥 SetUpDynamicSecret(); #if UNITY_EDITOR Assembly ass = AppDomain.CurrentDomain.GetAssemblies().First(ass => ass.GetName().Name == "HotUpdate"); #else Assembly ass = Assembly.Load(File.ReadAllBytes($"{Application.streamingAssetsPath}/HotUpdate.dll.bytes")); #endif Type entry = ass.GetType("Entry"); this.gameObject.AddComponent(entry); } }