diff --git a/Editor/Emit/DefaultMetadataImporter.cs b/Editor/Emit/DefaultMetadataImporter.cs index d8a27fa..db59b47 100644 --- a/Editor/Emit/DefaultMetadataImporter.cs +++ b/Editor/Emit/DefaultMetadataImporter.cs @@ -172,7 +172,7 @@ namespace Obfuz.Emit Assert.IsNotNull(_multiplyFloat, "ExprUtility.Multiply(float, float) not found"); _multiplyDouble = mod.Import(exprUtilityType.GetMethod("Multiply", new[] { typeof(double), typeof(double) })); Assert.IsNotNull(_multiplyDouble, "ExprUtility.Multiply(double, double) not found"); - _divideInt = mod.Import(exprUtilityType.GetMethod("Divide", new[] {typeof(int), typeof(int) })); + _divideInt = mod.Import(exprUtilityType.GetMethod("Divide", new[] { typeof(int), typeof(int) })); Assert.IsNotNull(_divideInt, "ExprUtility.Divide(int, int) not found"); _divideLong = mod.Import(exprUtilityType.GetMethod("Divide", new[] { typeof(long), typeof(long) })); Assert.IsNotNull(_divideLong); diff --git a/Editor/Emit/EvalStackCalculator.cs b/Editor/Emit/EvalStackCalculator.cs index 05d553a..960a152 100644 --- a/Editor/Emit/EvalStackCalculator.cs +++ b/Editor/Emit/EvalStackCalculator.cs @@ -1,6 +1,5 @@ using dnlib.DotNet; using dnlib.DotNet.Emit; -using dnlib.DotNet.Writer; using Obfuz.Utils; using System; using System.Collections.Generic; @@ -153,7 +152,7 @@ namespace Obfuz.Emit datas.Add(type); } - private EvalDataType CalcBasicBinOpRetType(List datas, EvalDataType op1, EvalDataType op2) + private EvalDataType CalcBasicBinOpRetType(List datas, EvalDataType op1, EvalDataType op2) { switch (op1) { @@ -174,7 +173,7 @@ namespace Obfuz.Emit case EvalDataType.Int32: return EvalDataType.Int64; case EvalDataType.Int64: case EvalDataType.I: - return EvalDataType.Int64; + return EvalDataType.Int64; default: throw new Exception($"Unsupported operand type: {op2} for {op1} in binary operation."); } } diff --git a/Editor/EncryptionVM/Instructions/MultipleInstruction.cs b/Editor/EncryptionVM/Instructions/MultipleInstruction.cs index af9b2eb..cfc0df3 100644 --- a/Editor/EncryptionVM/Instructions/MultipleInstruction.cs +++ b/Editor/EncryptionVM/Instructions/MultipleInstruction.cs @@ -1,6 +1,5 @@ using NUnit.Framework; using Obfuz.Utils; -using System; using System.Collections.Generic; namespace Obfuz.EncryptionVM.Instructions diff --git a/Editor/ObfusPasses/BasicBlockObfuscationPassBase.cs b/Editor/ObfusPasses/BasicBlockObfuscationPassBase.cs index 5d56cad..2b7deb3 100644 --- a/Editor/ObfusPasses/BasicBlockObfuscationPassBase.cs +++ b/Editor/ObfusPasses/BasicBlockObfuscationPassBase.cs @@ -2,7 +2,6 @@ using dnlib.DotNet.Emit; using Obfuz.Emit; using System.Collections.Generic; -using System.Linq; namespace Obfuz.ObfusPasses { diff --git a/Editor/ObfusPasses/CallObfus/CallProxyAllocator.cs b/Editor/ObfusPasses/CallObfus/CallProxyAllocator.cs index 8d76844..b779997 100644 --- a/Editor/ObfusPasses/CallObfus/CallProxyAllocator.cs +++ b/Editor/ObfusPasses/CallObfus/CallProxyAllocator.cs @@ -237,7 +237,7 @@ namespace Obfuz.ObfusPasses.CallObfus salt = salt, encryptedIndex = encryptedIndex, }; - methodDispatcher.methods.Add(new CallInfo { id = $"{method}{(callVir ? "" : "v")}", method = method, callVir = callVir }); + methodDispatcher.methods.Add(new CallInfo { id = $"{method}{(callVir ? "" : "v")}", method = method, callVir = callVir }); _methodProxys.Add(key, proxyInfo); } return new ProxyCallMethodData(proxyInfo.proxyMethod, proxyInfo.encryptedOps, proxyInfo.salt, proxyInfo.encryptedIndex, proxyInfo.index); diff --git a/Editor/ObfusPasses/EvalStackObfus/ConfigurableObfuscationPolicy.cs b/Editor/ObfusPasses/EvalStackObfus/ConfigurableObfuscationPolicy.cs index 34feb5a..e2fbfc7 100644 --- a/Editor/ObfusPasses/EvalStackObfus/ConfigurableObfuscationPolicy.cs +++ b/Editor/ObfusPasses/EvalStackObfus/ConfigurableObfuscationPolicy.cs @@ -1,12 +1,9 @@ using dnlib.DotNet; using Obfuz.Conf; using Obfuz.Settings; -using Obfuz.Utils; using System; using System.Collections.Generic; -using System.Linq; using System.Xml; -using UnityEditor.VersionControl; namespace Obfuz.ObfusPasses.EvalStackObfus { diff --git a/Editor/ObfusPasses/EvalStackObfus/EvalStackObfusPass.cs b/Editor/ObfusPasses/EvalStackObfus/EvalStackObfusPass.cs index 8c6b506..7e28149 100644 --- a/Editor/ObfusPasses/EvalStackObfus/EvalStackObfusPass.cs +++ b/Editor/ObfusPasses/EvalStackObfus/EvalStackObfusPass.cs @@ -4,12 +4,7 @@ using Obfuz.Data; using Obfuz.Emit; using Obfuz.Settings; using Obfuz.Utils; -using System; using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using UnityEngine; namespace Obfuz.ObfusPasses.EvalStackObfus { diff --git a/Editor/ObfusPasses/EvalStackObfus/IObfuscator.cs b/Editor/ObfusPasses/EvalStackObfus/IObfuscator.cs index 02bed58..79f8ff0 100644 --- a/Editor/ObfusPasses/EvalStackObfus/IObfuscator.cs +++ b/Editor/ObfusPasses/EvalStackObfus/IObfuscator.cs @@ -1,6 +1,4 @@ -using dnlib.DotNet; -using dnlib.DotNet.Emit; -using Obfuz.Emit; +using dnlib.DotNet.Emit; using System.Collections.Generic; namespace Obfuz.ObfusPasses.EvalStackObfus diff --git a/Editor/ObfusPasses/ExprObfus/ConfigurableObfuscationPolicy.cs b/Editor/ObfusPasses/ExprObfus/ConfigurableObfuscationPolicy.cs index 7db422f..6628341 100644 --- a/Editor/ObfusPasses/ExprObfus/ConfigurableObfuscationPolicy.cs +++ b/Editor/ObfusPasses/ExprObfus/ConfigurableObfuscationPolicy.cs @@ -1,12 +1,9 @@ using dnlib.DotNet; using Obfuz.Conf; using Obfuz.Settings; -using Obfuz.Utils; using System; using System.Collections.Generic; -using System.Linq; using System.Xml; -using UnityEditor.VersionControl; namespace Obfuz.ObfusPasses.ExprObfus { diff --git a/Editor/ObfusPasses/ExprObfus/ExprObfusPass.cs b/Editor/ObfusPasses/ExprObfus/ExprObfusPass.cs index 661fb9a..ac27992 100644 --- a/Editor/ObfusPasses/ExprObfus/ExprObfusPass.cs +++ b/Editor/ObfusPasses/ExprObfus/ExprObfusPass.cs @@ -6,8 +6,6 @@ using Obfuz.ObfusPasses.ExprObfus.Obfuscators; using Obfuz.Settings; using Obfuz.Utils; using System.Collections.Generic; -using System.Linq; -using UnityEngine; namespace Obfuz.ObfusPasses.ExprObfus { @@ -72,7 +70,7 @@ namespace Obfuz.ObfusPasses.ExprObfus return _obfuscationPolicy.NeedObfuscate(method); } - protected bool TryObfuscateInstruction(IObfuscator obfuscator, InstructionParameterInfo pi, Instruction inst, List outputInstructions, ObfusMethodContext ctx) + protected bool TryObfuscateInstruction(IObfuscator obfuscator, InstructionParameterInfo pi, Instruction inst, List outputInstructions, ObfusMethodContext ctx) { //Debug.Log($"Obfuscating instruction: {inst} in method: {ctx.method.FullName}"); IRandom localRandom = ctx.localRandom; diff --git a/Editor/ObfusPasses/ExprObfus/IObfuscator.cs b/Editor/ObfusPasses/ExprObfus/IObfuscator.cs index f43485b..605f643 100644 --- a/Editor/ObfusPasses/ExprObfus/IObfuscator.cs +++ b/Editor/ObfusPasses/ExprObfus/IObfuscator.cs @@ -1,5 +1,4 @@ -using dnlib.DotNet; -using dnlib.DotNet.Emit; +using dnlib.DotNet.Emit; using Obfuz.Emit; using System.Collections.Generic; diff --git a/Editor/ObfusPasses/ExprObfus/Obfuscators/AdvancedObfuscator.cs b/Editor/ObfusPasses/ExprObfus/Obfuscators/AdvancedObfuscator.cs index 50d5d50..bd2f2a1 100644 --- a/Editor/ObfusPasses/ExprObfus/Obfuscators/AdvancedObfuscator.cs +++ b/Editor/ObfusPasses/ExprObfus/Obfuscators/AdvancedObfuscator.cs @@ -1,13 +1,8 @@ using dnlib.DotNet.Emit; -using dnlib.DotNet; -using Obfuz.Emit; -using System.Collections.Generic; -using Obfuz.Utils; using Obfuz.Data; -using UnityEngine; -using UnityEngine.Assertions; -using JetBrains.Annotations; -using System; +using Obfuz.Emit; +using Obfuz.Utils; +using System.Collections.Generic; namespace Obfuz.ObfusPasses.ExprObfus.Obfuscators { @@ -104,12 +99,12 @@ namespace Obfuz.ObfusPasses.ExprObfus.Obfuscators public override bool ObfuscateBinBitwiseOp(Instruction inst, EvalDataType op1, EvalDataType op2, EvalDataType ret, List outputInsts, ObfusMethodContext ctx) { - return GenerateIdentityTransformForArgument(inst, op2, outputInsts, ctx) || base.ObfuscateBinBitwiseOp(inst, op1 , op2, ret, outputInsts, ctx); + return GenerateIdentityTransformForArgument(inst, op2, outputInsts, ctx) || base.ObfuscateBinBitwiseOp(inst, op1, op2, ret, outputInsts, ctx); } public override bool ObfuscateBitShiftOp(Instruction inst, EvalDataType op1, EvalDataType op2, EvalDataType ret, List outputInsts, ObfusMethodContext ctx) { - return GenerateIdentityTransformForArgument(inst, op2, outputInsts, ctx) || base.ObfuscateBitShiftOp(inst, op1, op2 , ret, outputInsts, ctx); + return GenerateIdentityTransformForArgument(inst, op2, outputInsts, ctx) || base.ObfuscateBitShiftOp(inst, op1, op2, ret, outputInsts, ctx); } } } diff --git a/Editor/ObfusPasses/ExprObfus/Obfuscators/BasicObfuscator.cs b/Editor/ObfusPasses/ExprObfus/Obfuscators/BasicObfuscator.cs index 8332a41..5d55289 100644 --- a/Editor/ObfusPasses/ExprObfus/Obfuscators/BasicObfuscator.cs +++ b/Editor/ObfusPasses/ExprObfus/Obfuscators/BasicObfuscator.cs @@ -1,12 +1,7 @@ using dnlib.DotNet; using dnlib.DotNet.Emit; using Obfuz.Emit; -using System; using System.Collections.Generic; -using System.Linq; -using System.Runtime.InteropServices; -using System.Text; -using System.Threading.Tasks; using UnityEngine; namespace Obfuz.ObfusPasses.ExprObfus.Obfuscators diff --git a/Editor/ObfusPasses/ExprObfus/Obfuscators/MostAdvancedObfuscator.cs b/Editor/ObfusPasses/ExprObfus/Obfuscators/MostAdvancedObfuscator.cs index abf885e..1ff1a70 100644 --- a/Editor/ObfusPasses/ExprObfus/Obfuscators/MostAdvancedObfuscator.cs +++ b/Editor/ObfusPasses/ExprObfus/Obfuscators/MostAdvancedObfuscator.cs @@ -68,7 +68,7 @@ namespace Obfuz.ObfusPasses.ExprObfus.Obfuscators public override bool ObfuscateBitShiftOp(Instruction inst, EvalDataType op1, EvalDataType op2, EvalDataType ret, List outputInsts, ObfusMethodContext ctx) { - if (!base.ObfuscateBitShiftOp(inst, op1, op2, ret,outputInsts, ctx)) + if (!base.ObfuscateBitShiftOp(inst, op1, op2, ret, outputInsts, ctx)) { return false; } diff --git a/Editor/ObfusPasses/Instinct/InstinctPass.cs b/Editor/ObfusPasses/Instinct/InstinctPass.cs index 52f172c..5422671 100644 --- a/Editor/ObfusPasses/Instinct/InstinctPass.cs +++ b/Editor/ObfusPasses/Instinct/InstinctPass.cs @@ -1,12 +1,9 @@ using dnlib.DotNet; using dnlib.DotNet.Emit; using Obfuz.Editor; -using Obfuz.Emit; -using Obfuz.Settings; using System; using System.Collections.Generic; using System.Linq; -using System.Net.Security; using System.Text; using UnityEngine.Assertions; @@ -40,7 +37,7 @@ namespace Obfuz.ObfusPasses.Instinct private string GetTypeName(TypeSig type) { type = type.RemovePinnedAndModifiers(); - switch(type.ElementType) + switch (type.ElementType) { case ElementType.Class: case ElementType.ValueType: diff --git a/Editor/ObfusPasses/InstructionObfuscationPassBase.cs b/Editor/ObfusPasses/InstructionObfuscationPassBase.cs index 0121c93..424c0d2 100644 --- a/Editor/ObfusPasses/InstructionObfuscationPassBase.cs +++ b/Editor/ObfusPasses/InstructionObfuscationPassBase.cs @@ -1,7 +1,6 @@ using dnlib.DotNet; using dnlib.DotNet.Emit; using System.Collections.Generic; -using System.Linq; namespace Obfuz.ObfusPasses { diff --git a/Editor/ObfusPasses/SymbolObfus/NameMakers/NameMakerBase.cs b/Editor/ObfusPasses/SymbolObfus/NameMakers/NameMakerBase.cs index 2241f31..1cd72c9 100644 --- a/Editor/ObfusPasses/SymbolObfus/NameMakers/NameMakerBase.cs +++ b/Editor/ObfusPasses/SymbolObfus/NameMakers/NameMakerBase.cs @@ -1,6 +1,5 @@ using dnlib.DotNet; using System.Collections.Generic; -using System.Linq; using UnityEngine.Assertions; namespace Obfuz.ObfusPasses.SymbolObfus.NameMakers diff --git a/Editor/ObfusPasses/SymbolObfus/Policies/SystemRenamePolicy.cs b/Editor/ObfusPasses/SymbolObfus/Policies/SystemRenamePolicy.cs index f2ba1bb..ed0f7bf 100644 --- a/Editor/ObfusPasses/SymbolObfus/Policies/SystemRenamePolicy.cs +++ b/Editor/ObfusPasses/SymbolObfus/Policies/SystemRenamePolicy.cs @@ -2,7 +2,6 @@ using Obfuz.Editor; using Obfuz.Utils; using System.Collections.Generic; -using System.Linq; namespace Obfuz.ObfusPasses.SymbolObfus.Policies { diff --git a/Editor/ObfusPasses/SymbolObfus/ReflectionCompatibilityDetector.cs b/Editor/ObfusPasses/SymbolObfus/ReflectionCompatibilityDetector.cs index 08aae89..8d644bb 100644 --- a/Editor/ObfusPasses/SymbolObfus/ReflectionCompatibilityDetector.cs +++ b/Editor/ObfusPasses/SymbolObfus/ReflectionCompatibilityDetector.cs @@ -3,8 +3,6 @@ using dnlib.DotNet.Emit; using System; using System.Collections.Generic; using System.Linq; -using System.Text; -using System.Threading.Tasks; using UnityEngine; namespace Obfuz.ObfusPasses.SymbolObfus diff --git a/Editor/ObfusPasses/SymbolObfus/VirtualMethodGroupCalculator.cs b/Editor/ObfusPasses/SymbolObfus/VirtualMethodGroupCalculator.cs index cf66df1..ac6b454 100644 --- a/Editor/ObfusPasses/SymbolObfus/VirtualMethodGroupCalculator.cs +++ b/Editor/ObfusPasses/SymbolObfus/VirtualMethodGroupCalculator.cs @@ -114,7 +114,7 @@ namespace Obfuz.ObfusPasses.SymbolObfus { return IsVarType(t1) || IsVarType(t2); } - + switch (t1.ElementType) { case ElementType.Void: diff --git a/Editor/ObfuscatorBuilder.cs b/Editor/ObfuscatorBuilder.cs index fea5fef..c654c58 100644 --- a/Editor/ObfuscatorBuilder.cs +++ b/Editor/ObfuscatorBuilder.cs @@ -2,6 +2,7 @@ using Obfuz.ObfusPasses; using Obfuz.ObfusPasses.CallObfus; using Obfuz.ObfusPasses.ConstEncrypt; +using Obfuz.ObfusPasses.ControlFlowObfus; using Obfuz.ObfusPasses.EvalStackObfus; using Obfuz.ObfusPasses.ExprObfus; using Obfuz.ObfusPasses.FieldEncrypt; @@ -186,6 +187,10 @@ namespace Obfuz { builder.AddPass(new CallObfusPass(settings.callObfusSettings.ToFacade())); } + if (obfuscationPasses.HasFlag(ObfuscationPassType.ControlFlowObfus)) + { + builder.AddPass(new ControlFlowObfusPass(settings.controlFlowObfuscationSettings.ToFacade())); + } if (obfuscationPasses.HasFlag(ObfuscationPassType.SymbolObfus)) { builder.AddPass(new SymbolObfusPass(settings.symbolObfusSettings.ToFacade())); diff --git a/Editor/Settings/ObfuzSettings.cs b/Editor/Settings/ObfuzSettings.cs index d81c0eb..a58a0e2 100644 --- a/Editor/Settings/ObfuzSettings.cs +++ b/Editor/Settings/ObfuzSettings.cs @@ -40,6 +40,9 @@ namespace Obfuz.Settings [Tooltip("expression obfuscation settings")] public ExprObfuscationSettings exprObfusSettings; + [Tooltip("control flow obfuscation settings")] + public ControlFlowObfuscationSettings controlFlowObfuscationSettings; + public string ObfuzRootDir => $"Library/Obfuz"; public string GetObfuscatedAssemblyOutputPath(BuildTarget target) diff --git a/Editor/Settings/ObfuzSettingsProvider.cs b/Editor/Settings/ObfuzSettingsProvider.cs index f487032..ba6eede 100644 --- a/Editor/Settings/ObfuzSettingsProvider.cs +++ b/Editor/Settings/ObfuzSettingsProvider.cs @@ -36,6 +36,7 @@ namespace Obfuz.Settings private SerializedProperty _fieldEncryptSettings; private SerializedProperty _callObfusSettings; private SerializedProperty _exprObfusSettings; + private SerializedProperty _controlFlowObfusSettings; public ObfuzSettingsProvider() : base("Project/Obfuz", SettingsScope.Project) { @@ -70,6 +71,7 @@ namespace Obfuz.Settings _exprObfusSettings = _serializedObject.FindProperty("exprObfusSettings"); _fieldEncryptSettings = _serializedObject.FindProperty("fieldEncryptSettings"); _callObfusSettings = _serializedObject.FindProperty("callObfusSettings"); + _controlFlowObfusSettings = _serializedObject.FindProperty("controlFlowObfuscationSettings"); } public override void OnGUI(string searchContext) @@ -94,6 +96,7 @@ namespace Obfuz.Settings EditorGUILayout.PropertyField(_exprObfusSettings); EditorGUILayout.PropertyField(_fieldEncryptSettings); EditorGUILayout.PropertyField(_callObfusSettings); + EditorGUILayout.PropertyField(_controlFlowObfusSettings); if (EditorGUI.EndChangeCheck()) diff --git a/Editor/Utils/ConstObfusUtil.cs b/Editor/Utils/ConstObfusUtil.cs index c489228..8178e45 100644 --- a/Editor/Utils/ConstObfusUtil.cs +++ b/Editor/Utils/ConstObfusUtil.cs @@ -1,11 +1,7 @@ -using dnlib.DotNet.Emit; -using dnlib.DotNet; +using dnlib.DotNet; +using dnlib.DotNet.Emit; using Obfuz.Data; -using System; using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; namespace Obfuz.Utils { diff --git a/Editor/Utils/DisableTypeDefFindCacheScope.cs b/Editor/Utils/DisableTypeDefFindCacheScope.cs index 4a01aa6..30ccef2 100644 --- a/Editor/Utils/DisableTypeDefFindCacheScope.cs +++ b/Editor/Utils/DisableTypeDefFindCacheScope.cs @@ -1,9 +1,5 @@ using dnlib.DotNet; using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; namespace Obfuz.Utils { diff --git a/Editor/Utils/MathUtil.cs b/Editor/Utils/MathUtil.cs index a08ff70..1a12808 100644 --- a/Editor/Utils/MathUtil.cs +++ b/Editor/Utils/MathUtil.cs @@ -1,8 +1,4 @@ using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; namespace Obfuz.Utils { diff --git a/Runtime/ObfuscationInstincts.cs b/Runtime/ObfuscationInstincts.cs index 8faa0ce..45641f0 100644 --- a/Runtime/ObfuscationInstincts.cs +++ b/Runtime/ObfuscationInstincts.cs @@ -1,10 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace Obfuz +namespace Obfuz { public static class ObfuscationInstincts { diff --git a/Runtime/ObfuscationTypeMapper.cs b/Runtime/ObfuscationTypeMapper.cs index c279cdb..a85927c 100644 --- a/Runtime/ObfuscationTypeMapper.cs +++ b/Runtime/ObfuscationTypeMapper.cs @@ -1,10 +1,6 @@ using System; using System.Collections.Generic; -using System.Diagnostics; -using System.Linq; using System.Reflection; -using System.Text; -using System.Threading.Tasks; namespace Obfuz {