瀏覽代碼

外网加密

guodong 3 年之前
父節點
當前提交
12c593deda
共有 22 個文件被更改,包括 184 次插入47 次删除
  1. 21 0
      GameClient/Assets/BuildSetting1.asset
  2. 3 2
      GameClient/Assets/BuildSetting1.asset.meta
  3. 4 6
      GameClient/Assets/Editor/ToolsMenu.cs
  4. 2 2
      GameClient/Assets/Editor/Xasset/BuildSetting.cs
  5. 2 2
      GameClient/Assets/Editor/Xasset/Builds/BuildScript.cs
  6. 31 5
      GameClient/Assets/Editor/Xasset/Builds/BuildTask.cs
  7. 2 2
      GameClient/Assets/Editor/Xasset/MenuItems.cs
  8. 14 1
      GameClient/Assets/Game/Launcher/LauncherConfig.cs
  9. 8 7
      GameClient/Assets/Game/Launcher/Version/VersionController.cs
  10. 0 1
      GameClient/Assets/StreamingAssets/Bundles/Manifest
  11. 1 1
      GameClient/Assets/StreamingAssets/Bundles/Manifest.meta
  12. 1 1
      GameClient/Assets/StreamingAssets/Bundles/Manifest.version
  13. 1 1
      GameClient/Assets/StreamingAssets/Bundles/Manifest.version.meta
  14. 二進制
      GameClient/Assets/StreamingAssets/Bundles/privacypolicy_5177dd9afec4830d784008bb5adc6ade
  15. 0 7
      GameClient/Assets/StreamingAssets/Bundles/privacypolicy_5177dd9afec4830d784008bb5adc6ade.meta
  16. 二進制
      GameClient/Assets/StreamingAssets/Bundles/privacypolicychildren_20d086cd3eb4971e23c338d9a3d885d5
  17. 0 7
      GameClient/Assets/StreamingAssets/Bundles/privacypolicychildren_20d086cd3eb4971e23c338d9a3d885d5.meta
  18. 二進制
      GameClient/Assets/StreamingAssets/Bundles/serviceprotocal_bd8f44b0ae9e2dac4cfbf2ede199c4c8
  19. 79 0
      GameClient/Assets/ThirdParty/Xasset/EncryptHelper.cs
  20. 11 0
      GameClient/Assets/ThirdParty/Xasset/EncryptHelper.cs.meta
  21. 2 1
      GameClient/Assets/ThirdParty/Xasset/Runtime/Loadables/Bundles/DownloadBundle.cs
  22. 2 1
      GameClient/Assets/ThirdParty/Xasset/Runtime/Loadables/Bundles/LocalBundle.cs

+ 21 - 0
GameClient/Assets/BuildSetting1.asset

@@ -0,0 +1,21 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!114 &11400000
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 0}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: e5e55fcd4ab13e0499f04a829427db8b, type: 3}
+  m_Name: BuildSetting1
+  m_EditorClassIdentifier: 
+  dirBundleList:
+  - Assets/Res/Animation/Card
+  - Assets/Res/Animation/DressUp
+  - Assets/Res/Effect/DressUp
+  - Assets/Res/Effect/UI
+  - Assets/ResIn/UI
+  - Assets/Res/Texture

+ 3 - 2
GameClient/Assets/StreamingAssets/Bundles/serviceprotocal_bd8f44b0ae9e2dac4cfbf2ede199c4c8.meta → GameClient/Assets/BuildSetting1.asset.meta

@@ -1,7 +1,8 @@
 fileFormatVersion: 2
-guid: 174fbeff6ffcffb42a82d72dda92e93a
-DefaultImporter:
+guid: 3d6745b5d6c6c494db20611090156808
+NativeFormatImporter:
   externalObjects: {}
+  mainObjectFileID: 0
   userData: 
   assetBundleName: 
   assetBundleVariant: 

+ 4 - 6
GameClient/Assets/Editor/ToolsMenu.cs

@@ -64,7 +64,7 @@ namespace GFGEditor
         public static void BuildBundlesRes()
         {
             EditorUtility.DisplayProgressBar("进度", "正在更新至内网", 1);
-            VEngine.Editor.Builds.BuildScript.BuildCustomBundles(new string[] { "Res", "ResIn" });
+            VEngine.Editor.Builds.BuildScript.BuildCustomBundles(new string[] { "Res", "ResIn" }, "BuildSetting");
             EditorUtility.ClearProgressBar();
             if (CommitWhenRelease)
             {
@@ -264,13 +264,11 @@ namespace GFGEditor
         [MenuItem("Tools/BuildTest/发布临时版本", false, (int)TOOL_MENU_PRIORITY.BuildBundlesRes)]
         public static void BuildBundlesResTemp()
         {
-            VEngine.Utility.buildPath = "Bundles_temp";
-            ImportArtResTool.ResRootDirNameDressUp = "正式资源-demo1";
+            //VEngine.Utility.buildPath = "Bundles_temp";
             EditorUtility.DisplayProgressBar("进度", "正在发布临时版本", 1);
-            VEngine.Editor.Builds.BuildScript.BuildCustomBundles(new string[] { "Res", "ResIn" });
+            VEngine.Editor.Builds.BuildScript.BuildCustomBundles(new string[] { "Res", "ResIn" }, "BuildSetting1");
             EditorUtility.ClearProgressBar();
-            VEngine.Utility.buildPath = "Bundles";
-            ImportArtResTool.ResRootDirNameDressUp = "正式资源";
+            //VEngine.Utility.buildPath = "Bundles";
         }
 
         [MenuItem("Tools/BuildTest/Copy To StreamingAssets Temp")]

+ 2 - 2
GameClient/Assets/Editor/Xasset/BuildSetting.cs

@@ -9,9 +9,9 @@ namespace GFGEditor
     {
         public List<string> dirBundleList;
 
-        public static BuildSetting GetBuildSetting()
+        public static BuildSetting GetBuildSetting(string setName)
         {
-            return VEngine.Editor.Builds.Settings.LoadAsset<BuildSetting>("Assets/BuildSetting.asset");
+            return VEngine.Editor.Builds.Settings.LoadAsset<BuildSetting>($"Assets/{setName}.asset");
         }
     }
 }

+ 2 - 2
GameClient/Assets/Editor/Xasset/Builds/BuildScript.cs

@@ -24,12 +24,12 @@ namespace VEngine.Editor.Builds
             BuildBundles(new BuildTask());
         }
 
-        public static void BuildCustomBundles(string[] resRootDirNames)
+        public static void BuildCustomBundles(string[] resRootDirNames, string settingName)
         {
             var task = new BuildTask();
             if (preprocessBuildBundles != null) preprocessBuildBundles(task);
 
-            task.BuildCustomBundles(resRootDirNames);
+            task.BuildCustomBundles(resRootDirNames, settingName);
             if (postprocessBuildBundles != null) postprocessBuildBundles(task);
         }
 

+ 31 - 5
GameClient/Assets/Editor/Xasset/Builds/BuildTask.cs

@@ -74,21 +74,21 @@ namespace VEngine.Editor.Builds
             FinishBuild();
         }
 
-        public void BuildCustomBundles(string[] resRootDirNames)
+        public void BuildCustomBundles(string[] resRootDirNames, string setName)
         {
             foreach(var resRootDirName in resRootDirNames)
             {
-                CreateBundles(resRootDirName);
+                CreateBundles(resRootDirName, setName);
             }
             CheckAssets();
             EditorUtility.ClearProgressBar();
             FinishBuild();
         }
 
-        private void CreateBundles(string resRootDirName)
+        private void CreateBundles(string resRootDirName, string setName)
         {
             var path = Path.Combine(Application.dataPath, resRootDirName);
-            var buildSetting = GFGEditor.BuildSetting.GetBuildSetting();
+            var buildSetting = GFGEditor.BuildSetting.GetBuildSetting(setName);
             var dirBundleList = buildSetting.dirBundleList;
             var excludeDirs = buildSetting.dirBundleList.GetRange(0, buildSetting.dirBundleList.Count);
             excludeDirs.AddRange(EXCLUDE_DIRS);
@@ -203,11 +203,37 @@ namespace VEngine.Editor.Builds
                 Debug.LogErrorFormat("Failed to build {0}.", name);
                 return;
             }
-
+            if(!string.IsNullOrEmpty(GFGGame.LauncherConfig.resKey))
+            {
+                CreateEncryptAssets(outputPath, outputPath, manifest, GFGGame.LauncherConfig.resKey);
+            }
             AfterBuildBundles(bundles, manifest);
         }
 
 
+        /// <summary>
+        /// 创建加密的AssetBundle
+        /// </summary>
+        public static void CreateEncryptAssets(string bundlePackagePath, string encryptAssetPath, AssetBundleManifest manifest, string secretKey)
+        {
+            string[] assetBundles = manifest.GetAllAssetBundles();
+            foreach (string assetBundle in assetBundles)
+            {
+                string bundlePath = Path.Combine(bundlePackagePath, assetBundle);
+                byte[] encryptBytes = EncryptHelper.CreateEncryptData(bundlePath, secretKey);
+                if (!Directory.Exists(encryptAssetPath))
+                {
+                    Directory.CreateDirectory(encryptAssetPath);
+                }
+                using (FileStream fs = new FileStream(Path.Combine(bundlePackagePath, assetBundle), FileMode.OpenOrCreate))
+                {
+                    fs.SetLength(0);
+                    fs.Write(encryptBytes, 0, encryptBytes.Length);
+                }
+            }
+        }
+
+
         private string GetOriginBundle(string assetBundle)
         {
             var pos = assetBundle.LastIndexOf("_", StringComparison.Ordinal) + 1;

+ 2 - 2
GameClient/Assets/Editor/Xasset/MenuItems.cs

@@ -25,13 +25,13 @@ namespace VEngine.Editor
         [MenuItem("XAssets/Versions/Build Bundles Res Init")]
         public static void BuildBundlesResIn() 
         {
-            BuildScript.BuildCustomBundles(new string[] { "ResIn/Txt" });
+            BuildScript.BuildCustomBundles(new string[] { "ResIn/Txt" }, "BuildSetting");
         }
 
         [MenuItem("XAssets/Versions/Build Bundles All")]
         public static void BuildBundlesRes()
         {
-            BuildScript.BuildCustomBundles(new string[] { "Res", "ResIn" });
+            BuildScript.BuildCustomBundles(new string[] { "Res", "ResIn" }, "BuildSetting");
         }
 
         [MenuItem("XAssets/Versions/Build Player")]

+ 14 - 1
GameClient/Assets/Game/Launcher/LauncherConfig.cs

@@ -22,8 +22,20 @@ namespace GFGGame
         public static int platformId = 1;
         public static string logKey;
         public static string logApiUrl;
+        public static string resKey
+        {
+            get
+            {
+#if LOCAL
+                return null;
+#else
+
+                return "dfs";
+#endif
+            }
+        }
 
-        //public static string CDN_ROOT = "http://10.108.64.58/";
+        //public static string CDN_ROOT = "http://10.108.64.127/";
         public static bool ILRuntimeMode;
 
         public static void Init()
@@ -59,6 +71,7 @@ namespace GFGGame
         {
             var result = JsonMapper.ToObject<Result>(data);
             CDN_ROOT = result.cdnRoot;
+            CDN_ROOT = "http://10.108.64.127/";
             loginApiUrl = result.loginApiUrl;
             logApiUrl = result.logApiUrl;
             logKey = result.logKey;

+ 8 - 7
GameClient/Assets/Game/Launcher/Version/VersionController.cs

@@ -20,17 +20,18 @@ namespace GFGGame
 
         public IEnumerator InitVersion()
         {
+            EncryptHelper.resKey = LauncherConfig.resKey;
             LogServerHelperHttp.SendNodeLog((int)LogNode.StartCheckVersion);
             Versions.DownloadURL = LauncherConfig.CDN_ROOT;
             var operation = Versions.InitializeAsync(LauncherConfig.CDN_ROOT);
             yield return operation;
-            VEngine.Logger.I("Initialize: {0}", operation.status);
-            VEngine.Logger.I("API Version: {0}", Versions.APIVersion);
-            VEngine.Logger.I("AppVersion: {0}", Versions.Manifest.appVersion);
-            VEngine.Logger.I("Manifests Version: {0}", Versions.ManifestsVersion);
-            VEngine.Logger.I("PlayerDataPath: {0}", Versions.PlayerDataPath);
-            VEngine.Logger.I("DownloadDataPath: {0}", Versions.DownloadDataPath);
-            VEngine.Logger.I("DownloadURL: {0}", Versions.DownloadURL);
+            //VEngine.Logger.I("Initialize: {0}", operation.status);
+            //VEngine.Logger.I("API Version: {0}", Versions.APIVersion);
+            //VEngine.Logger.I("AppVersion: {0}", Versions.Manifest.appVersion);
+            //VEngine.Logger.I("Manifests Version: {0}", Versions.ManifestsVersion);
+            //VEngine.Logger.I("PlayerDataPath: {0}", Versions.PlayerDataPath);
+            //VEngine.Logger.I("DownloadDataPath: {0}", Versions.DownloadDataPath);
+            //VEngine.Logger.I("DownloadURL: {0}", Versions.DownloadURL);
             StartUpdateManifest();
         }
 

文件差異過大導致無法顯示
+ 0 - 1
GameClient/Assets/StreamingAssets/Bundles/Manifest


+ 1 - 1
GameClient/Assets/StreamingAssets/Bundles/Manifest.meta

@@ -1,5 +1,5 @@
 fileFormatVersion: 2
-guid: 41e7cc5ed12d3e74a983a5cee20ab9ea
+guid: 8223e86226b53db4886b4c5aa9ec2ff8
 DefaultImporter:
   externalObjects: {}
   userData: 

+ 1 - 1
GameClient/Assets/StreamingAssets/Bundles/Manifest.version

@@ -1 +1 @@
-{"crc":210833782,"size":667,"version":1,"appVersion":"1.1"}
+{"crc":1906326163,"size":293107,"version":1,"appVersion":"1.1"}

+ 1 - 1
GameClient/Assets/StreamingAssets/Bundles/Manifest.version.meta

@@ -1,5 +1,5 @@
 fileFormatVersion: 2
-guid: 8a8df87b947dc294fbc022e436dea5fb
+guid: 66fab78ae9fc0aa48b87d1aa53b4fe5c
 DefaultImporter:
   externalObjects: {}
   userData: 

二進制
GameClient/Assets/StreamingAssets/Bundles/privacypolicy_5177dd9afec4830d784008bb5adc6ade


+ 0 - 7
GameClient/Assets/StreamingAssets/Bundles/privacypolicy_5177dd9afec4830d784008bb5adc6ade.meta

@@ -1,7 +0,0 @@
-fileFormatVersion: 2
-guid: f6da49fa24212574cb6a6ad5400f80fd
-DefaultImporter:
-  externalObjects: {}
-  userData: 
-  assetBundleName: 
-  assetBundleVariant: 

二進制
GameClient/Assets/StreamingAssets/Bundles/privacypolicychildren_20d086cd3eb4971e23c338d9a3d885d5


+ 0 - 7
GameClient/Assets/StreamingAssets/Bundles/privacypolicychildren_20d086cd3eb4971e23c338d9a3d885d5.meta

@@ -1,7 +0,0 @@
-fileFormatVersion: 2
-guid: 5d760be993a60744bb2980e7b11f3531
-DefaultImporter:
-  externalObjects: {}
-  userData: 
-  assetBundleName: 
-  assetBundleVariant: 

二進制
GameClient/Assets/StreamingAssets/Bundles/serviceprotocal_bd8f44b0ae9e2dac4cfbf2ede199c4c8


+ 79 - 0
GameClient/Assets/ThirdParty/Xasset/EncryptHelper.cs

@@ -0,0 +1,79 @@
+using System.Collections;
+using System.IO;
+using ET;
+using UnityEngine;
+using UnityEngine.Networking;
+
+namespace VEngine
+{
+
+    public class EncryptHelper
+    {
+        public static string resKey;
+
+        private static char[] _resKeyChars;
+        public static char[] resKeyChars
+        {
+            get
+            {
+                if(_resKeyChars == null && !string.IsNullOrEmpty(resKey))
+                {
+                    _resKeyChars = resKey.ToCharArray();
+                }
+                return _resKeyChars;
+            }
+        }
+        /// <summary>
+        /// 创建加密过的数据
+        /// </summary>
+        public static byte[] CreateEncryptData(string filePath, string secretKey)
+        {
+            byte[] encryptData;
+            char[] key = secretKey.ToCharArray();
+            using (FileStream fs = new FileStream(filePath, FileMode.Open))
+            {
+                encryptData = new byte[fs.Length];
+                fs.Read(encryptData, 0, encryptData.Length);
+                for (int i = 0; i < encryptData.Length; i++)
+                {
+                    encryptData[i] = (byte)(encryptData[i] ^ key[i % key.Length]);
+                }
+            }
+            return encryptData;
+        }
+
+        /// <summary>
+        /// 获取解密的数据(无密钥的情况下直接获取数据)
+        /// </summary>
+        internal static byte[] GetDecryptData(string filePath, char[] secretKey = null)
+        {
+            byte[] encryptData;
+            using (UnityWebRequest webRequest = UnityWebRequest.Get(filePath))
+            {
+                webRequest.SendWebRequest();
+                while (!webRequest.isDone) { }
+#if UNITY_2020_1_OR_NEWER
+                if (webRequest.result == UnityWebRequest.Result.Success)
+#else
+                if (string.IsNullOrEmpty(webRequest.error))
+#endif
+                {
+                    encryptData = webRequest.downloadHandler.data;
+                    if (secretKey != null)
+                    {
+                        for (int i = 0; i < encryptData.Length; i++)
+                        {
+                            encryptData[i] = (byte)(encryptData[i] ^ secretKey[i % secretKey.Length]);
+                        }
+                    }
+                }
+                else
+                {
+                    encryptData = null;
+                }
+            }
+            return encryptData;
+        }
+    }
+    
+}

+ 11 - 0
GameClient/Assets/ThirdParty/Xasset/EncryptHelper.cs.meta

@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: d7fe4256865f27a448c2c27c42717ba9
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 2 - 1
GameClient/Assets/ThirdParty/Xasset/Runtime/Loadables/Bundles/DownloadBundle.cs

@@ -24,7 +24,8 @@ namespace VEngine
 
             if (assetBundle != null) return;
 
-            request = AssetBundle.LoadFromFileAsync(obj.info.savePath);
+            var encrpytData = EncryptHelper.GetDecryptData(obj.info.savePath, EncryptHelper.resKeyChars);
+            request = AssetBundle.LoadFromMemoryAsync(encrpytData);
             Versions.SetBundlePathOrURl(info.nameWithAppendHash, obj.info.savePath);
         }
 

+ 2 - 1
GameClient/Assets/ThirdParty/Xasset/Runtime/Loadables/Bundles/LocalBundle.cs

@@ -8,7 +8,8 @@ namespace VEngine
 
         protected override void OnLoad()
         {
-            request = AssetBundle.LoadFromFileAsync(pathOrURL);
+            var encrpytData = EncryptHelper.GetDecryptData(pathOrURL, EncryptHelper.resKeyChars);
+            request = AssetBundle.LoadFromMemoryAsync(encrpytData);
         }
 
         public override void LoadImmediate()

部分文件因文件數量過多而無法顯示