From 0cbe09287dda9de2ea15dc91f0cf2459fb783361 Mon Sep 17 00:00:00 2001 From: walon Date: Fri, 16 May 2025 09:55:04 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E6=B2=A1=E6=9C=89=E9=81=8D?= =?UTF-8?q?=E5=8E=86=E4=BB=A3=E7=A0=81=E4=B8=AD=E7=9A=84MemberRef=EF=BC=8C?= =?UTF-8?q?=E5=AF=BC=E8=87=B4=E9=87=8D=E5=91=BD=E5=90=8D=E5=87=BD=E6=95=B0?= =?UTF-8?q?=E5=92=8C=E4=BB=A3=E7=A0=81=E5=90=8E=E6=9C=AA=E4=BF=AE=E5=A4=8D?= =?UTF-8?q?=E5=87=BD=E6=95=B0=E4=BD=93=E4=B8=AD=E7=9A=84=E6=B3=9B=E5=9E=8B?= =?UTF-8?q?=E7=B1=BB=E7=9A=84=E6=88=90=E5=91=98=E8=B0=83=E7=94=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Editor/Emit/DefaultMetadataImporter.cs | 2 +- .../ObfusPasses/SymbolObfus/SymbolRename.cs | 25 +++++++++++++-- Runtime/EncryptionScope.cs | 31 +++++++++++++++++++ Runtime/EncryptionService.cs | 3 +- 4 files changed, 57 insertions(+), 4 deletions(-) create mode 100644 Runtime/EncryptionScope.cs 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;