diff --git a/Editor/ObfusPasses/ExprObfus/Obfuscators/AdvancedObfuscator.cs b/Editor/ObfusPasses/ExprObfus/Obfuscators/AdvancedObfuscator.cs index 5bf2814..3528145 100644 --- a/Editor/ObfusPasses/ExprObfus/Obfuscators/AdvancedObfuscator.cs +++ b/Editor/ObfusPasses/ExprObfus/Obfuscators/AdvancedObfuscator.cs @@ -155,7 +155,7 @@ namespace Obfuz.ObfusPasses.ExprObfus.Obfuscators //} - private bool GenerateIdentityTransformForArgument(Instruction inst, EvalDataType op, List outputInsts, ObfusMethodContext ctx) + protected bool GenerateIdentityTransformForArgument(Instruction inst, EvalDataType op, List outputInsts, ObfusMethodContext ctx) { IRandom random = ctx.localRandom; ModuleConstFieldAllocator constFieldAllocator = ctx.constFieldAllocator; diff --git a/Editor/ObfusPasses/ExprObfus/Obfuscators/MostAdvancedObfuscator.cs b/Editor/ObfusPasses/ExprObfus/Obfuscators/MostAdvancedObfuscator.cs index a3d0c72..abbb107 100644 --- a/Editor/ObfusPasses/ExprObfus/Obfuscators/MostAdvancedObfuscator.cs +++ b/Editor/ObfusPasses/ExprObfus/Obfuscators/MostAdvancedObfuscator.cs @@ -1,8 +1,61 @@ -using Obfuz.Emit; +using dnlib.DotNet.Emit; +using Obfuz.Emit; +using System.Collections.Generic; namespace Obfuz.ObfusPasses.ExprObfus.Obfuscators { class MostAdvancedObfuscator : AdvancedObfuscator { + private readonly BasicObfuscator _basicObfuscator = new BasicObfuscator(); + + public override bool ObfuscateBasicUnaryOp(Instruction inst, EvalDataType op, EvalDataType ret, List outputInsts, ObfusMethodContext ctx) + { + if (!GenerateIdentityTransformForArgument(inst, op, outputInsts, ctx)) + { + return false; + } + outputInsts.RemoveAt(outputInsts.Count - 1); + return _basicObfuscator.ObfuscateBasicUnaryOp(inst, op, ret, outputInsts, ctx); + } + + public override bool ObfuscateBasicBinOp(Instruction inst, EvalDataType op1, EvalDataType op2, EvalDataType ret, List outputInsts, ObfusMethodContext ctx) + { + if (!GenerateIdentityTransformForArgument(inst, op2, outputInsts, ctx)) + { + return false; + } + outputInsts.RemoveAt(outputInsts.Count - 1); + return _basicObfuscator.ObfuscateBasicBinOp(inst, op1, op2, ret, outputInsts, ctx); + } + + public override bool ObfuscateUnaryBitwiseOp(Instruction inst, EvalDataType op, EvalDataType ret, List outputInsts, ObfusMethodContext ctx) + { + if (!GenerateIdentityTransformForArgument(inst, op, outputInsts, ctx)) + { + return false; + } + outputInsts.RemoveAt(outputInsts.Count - 1); + return _basicObfuscator.ObfuscateUnaryBitwiseOp(inst, op, ret, outputInsts, ctx); + } + + public override bool ObfuscateBinBitwiseOp(Instruction inst, EvalDataType op1, EvalDataType op2, EvalDataType ret, List outputInsts, ObfusMethodContext ctx) + { + if (!GenerateIdentityTransformForArgument(inst, op2, outputInsts, ctx)) + { + return false; + } + outputInsts.RemoveAt(outputInsts.Count - 1); + return _basicObfuscator.ObfuscateBinBitwiseOp(inst, op1, op2, ret, outputInsts, ctx); + } + + public override bool ObfuscateBitShiftOp(Instruction inst, EvalDataType op1, EvalDataType op2, EvalDataType ret, List outputInsts, ObfusMethodContext ctx) + { + if (!GenerateIdentityTransformForArgument(inst, op2, outputInsts, ctx)) + { + return false; + } + outputInsts.RemoveAt(outputInsts.Count - 1); + return _basicObfuscator.ObfuscateBitShiftOp(inst, op1, op2, ret, outputInsts, ctx); + } } }