From 4ad3ed76dc41b0291c2b306cc9bde65120f04b0d Mon Sep 17 00:00:00 2001 From: walon Date: Tue, 26 Aug 2025 20:58:09 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=20ConstFieldAllocator?= =?UTF-8?q?=E5=92=8C=20RvaDataAllocator=E7=9A=84encryption=20level?= =?UTF-8?q?=E5=9B=BA=E5=AE=9A=E5=8F=964=E5=AF=BC=E8=87=B4EncryptionVirtual?= =?UTF-8?q?Machine=E7=9A=84Opcode=E4=B8=AA=E6=95=B0=E8=B6=85=E8=BF=87256?= =?UTF-8?q?=E6=97=B6=E6=89=93=E5=8D=B0=E4=BA=86=E5=A4=A7=E9=87=8F"OpCode?= =?UTF-8?q?=20overflow"=E8=AD=A6=E5=91=8A=E6=97=A5=E5=BF=97=E7=9A=84?= =?UTF-8?q?=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Editor/Data/ConstFieldAllocator.cs | 2 +- Editor/Data/RvaDataAllocator.cs | 2 +- Editor/ObfusPasses/CallObfus/DelegateProxyAllocator.cs | 5 ++++- Editor/ObfuscationPassContext.cs | 2 ++ Editor/Utils/EncryptionUtil.cs | 8 ++++++-- 5 files changed, 14 insertions(+), 5 deletions(-) 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 {