From 8314ed4327217d0a6c3747db084896f980bcaed2 Mon Sep 17 00:00:00 2001 From: walon Date: Fri, 20 Jun 2025 18:58:54 +0800 Subject: [PATCH] =?UTF-8?q?=E6=94=AF=E6=8C=81=20MostAdvancedObfuscator?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Obfuscators/AdvancedObfuscator.cs | 2 +- .../Obfuscators/MostAdvancedObfuscator.cs | 55 ++++++++++++++++++- 2 files changed, 55 insertions(+), 2 deletions(-) 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); + } } }