diff --git a/Editor/Data/ConstFieldAllocator.cs b/Editor/Data/ConstFieldAllocator.cs index 90f889d..eb9750c 100644 --- a/Editor/Data/ConstFieldAllocator.cs +++ b/Editor/Data/ConstFieldAllocator.cs @@ -172,7 +172,7 @@ namespace Obfuz.Data { ConstFieldInfo constInfo = _field2Fields[field]; IRandom localRandom = _randomCreator(HashUtil.ComputePrimitiveOrStringOrBytesHashCode(constInfo.value)); - int ops = EncryptionUtil.GenerateEncryptionOpCodes(localRandom, _encryptor, 4); + int ops = EncryptionUtil.GenerateEncryptionOpCodes(localRandom, _encryptor, EncryptionScopeInfo.MaxEncryptionLevel, false); int salt = localRandom.NextInt(); switch (constInfo.value) { diff --git a/Editor/Data/RvaDataAllocator.cs b/Editor/Data/RvaDataAllocator.cs index 729dd2e..565a402 100644 --- a/Editor/Data/RvaDataAllocator.cs +++ b/Editor/Data/RvaDataAllocator.cs @@ -238,7 +238,7 @@ namespace Obfuz.Data int verifyIntValue = 0x12345678; EncryptionScopeInfo encryptionScope = this.EncryptionScope; IRandom verifyRandom = encryptionScope.localRandomCreator(verifyIntValue); - int verifyOps = EncryptionUtil.GenerateEncryptionOpCodes(verifyRandom, encryptionScope.encryptor, 4); + int verifyOps = EncryptionUtil.GenerateEncryptionOpCodes(verifyRandom, encryptionScope.encryptor, EncryptionScopeInfo.MaxEncryptionLevel, false); int verifySalt = verifyRandom.NextInt(); int encryptedVerifyIntValue = encryptionScope.encryptor.Encrypt(verifyIntValue, verifyOps, verifySalt); diff --git a/Editor/ObfusPasses/CallObfus/DelegateProxyAllocator.cs b/Editor/ObfusPasses/CallObfus/DelegateProxyAllocator.cs index 0c6fc7c..541a8e1 100644 --- a/Editor/ObfusPasses/CallObfus/DelegateProxyAllocator.cs +++ b/Editor/ObfusPasses/CallObfus/DelegateProxyAllocator.cs @@ -2,6 +2,7 @@ using dnlib.DotNet.Emit; using Obfuz.Data; using Obfuz.Emit; +using Obfuz.Settings; using Obfuz.Utils; using System; using System.Collections.Generic; @@ -44,6 +45,7 @@ namespace Obfuz.ObfusPasses.CallObfus public MethodDef proxyMethod; } private readonly Dictionary _callMethods = new Dictionary(); + private CallObfuscationSettingsFacade _settings; public DelegateProxyAllocator() { @@ -53,6 +55,7 @@ namespace Obfuz.ObfusPasses.CallObfus public override void Init() { _delegateInstanceHolderType = CreateDelegateInstanceHolderTypeDef(); + _settings = CallObfusPass.CurrentSettings; } private string AllocateDelegateTypeName(MethodSig delegateInvokeSig) @@ -241,7 +244,7 @@ namespace Obfuz.ObfusPasses.CallObfus ins.Add(Instruction.Create(OpCodes.Dup)); IRandom localRandom = encryptionScope.localRandomCreator(HashUtil.ComputePrimitiveOrStringOrBytesHashCode(ci.key1)); - int ops = EncryptionUtil.GenerateEncryptionOpCodes(localRandom, encryptionScope.encryptor, 4); + int ops = EncryptionUtil.GenerateEncryptionOpCodes(localRandom, encryptionScope.encryptor, _settings.obfuscationLevel); int salt = localRandom.NextInt(); int encryptedValue = encryptionScope.encryptor.Encrypt(ci.index, ops, salt); diff --git a/Editor/ObfuscationPassContext.cs b/Editor/ObfuscationPassContext.cs index 156cf88..86c803e 100644 --- a/Editor/ObfuscationPassContext.cs +++ b/Editor/ObfuscationPassContext.cs @@ -9,6 +9,8 @@ namespace Obfuz public class EncryptionScopeInfo { + public const int MaxEncryptionLevel = 4; + public readonly IEncryptor encryptor; public readonly RandomCreator localRandomCreator; diff --git a/Editor/Utils/EncryptionUtil.cs b/Editor/Utils/EncryptionUtil.cs index d2f956f..cd892d2 100644 --- a/Editor/Utils/EncryptionUtil.cs +++ b/Editor/Utils/EncryptionUtil.cs @@ -16,7 +16,7 @@ namespace Obfuz.Utils return count; } - public static int GenerateEncryptionOpCodes(IRandom random, IEncryptor encryptor, int encryptionLevel) + public static int GenerateEncryptionOpCodes(IRandom random, IEncryptor encryptor, int encryptionLevel, bool logWarningWhenExceedMaxOps = true) { if (encryptionLevel <= 0 || encryptionLevel > 4) { @@ -32,7 +32,11 @@ namespace Obfuz.Utils newOps |= (uint)op; if (newOps > uint.MaxValue) { - Debug.LogWarning($"OpCode overflow. encryptionLevel:{encryptionLevel}, vmOpCodeCount:{vmOpCodeCount}"); + if (logWarningWhenExceedMaxOps) + { + Debug.LogWarning($"OpCode overflow. encryptionLevel:{encryptionLevel}, vmOpCodeCount:{vmOpCodeCount}"); + } + break; } else {