diff --git a/src/Core/Config/ConfigManager.cs b/src/Core/Config/ConfigManager.cs index 819c7b2..79f9471 100644 --- a/src/Core/Config/ConfigManager.cs +++ b/src/Core/Config/ConfigManager.cs @@ -113,10 +113,11 @@ namespace UnityExplorer.Core.Config "The delay on startup before the UI is created.", 1f); - Reflection_Signature_Blacklist = new ConfigElement("Reflection Signature Blacklist", - "Use this to blacklist certain member signatures if they are known to cause a crash or other issues." + - "\r\nSeperate signatures with a semicolon ';'.", - "DEFAULT"); + Reflection_Signature_Blacklist = new ConfigElement("Member Signature Blacklist", + "Use this to blacklist certain member signatures if they are known to cause a crash or other issues.\r\n" + + "Seperate signatures with a semicolon ';'.\r\n" + + "For example, to blacklist Camera.main, you would add 'Camera.main;'", + ""); // Internal configs (panel save data) diff --git a/src/Core/Reflection/Il2CppReflection.cs b/src/Core/Reflection/Il2CppReflection.cs index b7369b3..e5796a4 100644 --- a/src/Core/Reflection/Il2CppReflection.cs +++ b/src/Core/Reflection/Il2CppReflection.cs @@ -515,12 +515,12 @@ namespace UnityExplorer return false; } -#endregion + #endregion #region Il2cpp reflection blacklist - public override string DefaultReflectionBlacklist => string.Join(";", defaultIl2CppBlacklist); + public override string[] DefaultReflectionBlacklist => defaultIl2CppBlacklist.ToArray(); // These methods currently cause a crash in most il2cpp games, // even from doing "GetParameters()" on the MemberInfo. diff --git a/src/Core/Reflection/ReflectionUtility.cs b/src/Core/Reflection/ReflectionUtility.cs index 7709002..f9ded05 100644 --- a/src/Core/Reflection/ReflectionUtility.cs +++ b/src/Core/Reflection/ReflectionUtility.cs @@ -12,7 +12,6 @@ using UnityExplorer.Core.Config; namespace UnityExplorer { - public class ReflectionUtility { public const BF FLAGS = BF.Public | BF.Instance | BF.NonPublic | BF.Static; @@ -434,31 +433,44 @@ namespace UnityExplorer #region Reflection Blacklist - public virtual string DefaultReflectionBlacklist => string.Empty; + public virtual string[] DefaultReflectionBlacklist => new string[0]; public static void LoadBlacklistString(string blacklist) { - if (string.Equals(blacklist, "DEFAULT", StringComparison.InvariantCultureIgnoreCase)) + try { - blacklist = Instance.DefaultReflectionBlacklist; - ConfigManager.Reflection_Signature_Blacklist.Value = blacklist; - ConfigManager.Handler.SaveConfig(); + if (string.IsNullOrEmpty(blacklist) && !Instance.DefaultReflectionBlacklist.Any()) + return; + + try + { + var sigs = blacklist.Split(';'); + foreach (var sig in sigs) + { + var s = sig.Trim(); + if (string.IsNullOrEmpty(s)) + continue; + if (!currentBlacklist.Contains(s)) + currentBlacklist.Add(s); + } + } + catch (Exception ex) + { + ExplorerCore.LogWarning($"Exception parsing blacklist string: {ex.ReflectionExToString()}"); + } + + foreach (var sig in Instance.DefaultReflectionBlacklist) + { + if (!currentBlacklist.Contains(sig)) + currentBlacklist.Add(sig); + } + + Mono.CSharp.IL2CPP.Blacklist.SignatureBlacklist = currentBlacklist; } - - if (string.IsNullOrEmpty(blacklist)) - return; - - var sigs = blacklist.Split(';'); - foreach (var sig in sigs) + catch (Exception ex) { - var s = sig.Trim(); - if (string.IsNullOrEmpty(s)) - continue; - if (!currentBlacklist.Contains(s)) - currentBlacklist.Add(s); + ExplorerCore.LogWarning($"Exception setting up reflection blacklist: {ex.ReflectionExToString()}"); } - - Mono.CSharp.IL2CPP.Blacklist.SignatureBlacklist = currentBlacklist; } public static bool IsBlacklisted(MemberInfo member)