diff --git a/Editor/Emit/DefaultMetadataImporter.cs b/Editor/Emit/DefaultMetadataImporter.cs index 325f7eb..ba71061 100644 --- a/Editor/Emit/DefaultMetadataImporter.cs +++ b/Editor/Emit/DefaultMetadataImporter.cs @@ -25,7 +25,7 @@ namespace Obfuz.Emit _initializeArray = mod.Import(typeof(System.Runtime.CompilerServices.RuntimeHelpers).GetMethod("InitializeArray", new[] { typeof(Array), typeof(RuntimeFieldHandle) })); Assert.IsNotNull(_initializeArray); - Type encryptionService = typeof(EncryptionService); + Type encryptionService = typeof(EncryptionService); _encryptBlock = mod.Import(encryptionService.GetMethod("EncryptBlock", new[] { typeof(byte[]), typeof(int), typeof(int) })); Assert.IsNotNull(_encryptBlock); _decryptBlock = mod.Import(encryptionService.GetMethod("DecryptBlock", new[] { typeof(byte[]), typeof(int), typeof(int) })); diff --git a/Editor/ObfusPasses/SymbolObfus/SymbolRename.cs b/Editor/ObfusPasses/SymbolObfus/SymbolRename.cs index e58e8e7..cbe5139 100644 --- a/Editor/ObfusPasses/SymbolObfus/SymbolRename.cs +++ b/Editor/ObfusPasses/SymbolObfus/SymbolRename.cs @@ -274,11 +274,32 @@ namespace Obfuz.ObfusPasses.SymbolObfus } } + private IEnumerable WalkMemberRefs(ModuleDef mod) + { + foreach (TypeDef type in mod.GetTypes()) + { + foreach (MethodDef method in type.Methods) + { + if (!method.HasBody) + { + continue; + } + foreach (var instr in method.Body.Instructions) + { + if (instr.Operand is MemberRef memberRef) + { + yield return memberRef; + } + } + } + } + } + private void BuildRefFieldMetasMap(Dictionary refFieldMetasMap) { foreach (ModuleDef mod in _obfuscatedAndNotObfuscatedModules) { - foreach (MemberRef memberRef in mod.GetMemberRefs()) + foreach (MemberRef memberRef in WalkMemberRefs(mod)) { if (!memberRef.IsFieldRef) { @@ -370,7 +391,7 @@ namespace Obfuz.ObfusPasses.SymbolObfus { foreach (ModuleDef mod in _obfuscatedAndNotObfuscatedModules) { - foreach (MemberRef memberRef in mod.GetMemberRefs()) + foreach (MemberRef memberRef in WalkMemberRefs(mod)) { if (!memberRef.IsMethodRef) { diff --git a/Runtime/EncryptionScope.cs b/Runtime/EncryptionScope.cs new file mode 100644 index 0000000..fe215ef --- /dev/null +++ b/Runtime/EncryptionScope.cs @@ -0,0 +1,31 @@ +namespace Obfuz +{ + public interface IEncryptionScope + { + + } + + public abstract class EncryptionScopeBase : IEncryptionScope + { + public void ForcePreserveAOT() + { + EncryptionService.Encrypt(0, 0, 0); + } + } + + public struct DefaultDynamicEncryptionScope : IEncryptionScope + { + public void ForcePreserveAOT() + { + EncryptionService.Encrypt(0, 0, 0); + } + } + + public struct DefaultStaticEncryptionScope: IEncryptionScope + { + public void ForcePreserveAOT() + { + EncryptionService.Encrypt(0, 0, 0); + } + } +} diff --git a/Runtime/EncryptionService.cs b/Runtime/EncryptionService.cs index 946df8c..bd6cd98 100644 --- a/Runtime/EncryptionService.cs +++ b/Runtime/EncryptionService.cs @@ -6,7 +6,8 @@ using System.Threading.Tasks; namespace Obfuz { - public static class EncryptionService + + public static class EncryptionService where T : IEncryptionScope { private static IEncryptor _encryptor;