调整表达式混淆顺序,改到EvalStackObfus之前

dev
walon 2025-06-21 11:43:04 +08:00
parent 338d2acf05
commit 1f9aac59ee
3 changed files with 32 additions and 10 deletions

View File

@ -72,7 +72,7 @@ namespace Obfuz.ObfusPasses.EvalStackObfus
protected override void ObfuscateData(MethodDef method) protected override void ObfuscateData(MethodDef method)
{ {
Debug.Log($"Obfuscating method: {method.FullName} with EvalStackObfusPass"); //Debug.Log($"Obfuscating method: {method.FullName} with EvalStackObfusPass");
IList<Instruction> instructions = method.Body.Instructions; IList<Instruction> instructions = method.Body.Instructions;
var outputInstructions = new List<Instruction>(); var outputInstructions = new List<Instruction>();
var totalFinalInstructions = new List<Instruction>(); var totalFinalInstructions = new List<Instruction>();

View File

@ -1,6 +1,7 @@
using dnlib.DotNet.Emit; using dnlib.DotNet.Emit;
using Obfuz.Emit; using Obfuz.Emit;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq;
namespace Obfuz.ObfusPasses.ExprObfus.Obfuscators namespace Obfuz.ObfusPasses.ExprObfus.Obfuscators
{ {
@ -10,7 +11,11 @@ namespace Obfuz.ObfusPasses.ExprObfus.Obfuscators
public override bool ObfuscateBasicUnaryOp(Instruction inst, EvalDataType op, EvalDataType ret, List<Instruction> outputInsts, ObfusMethodContext ctx) public override bool ObfuscateBasicUnaryOp(Instruction inst, EvalDataType op, EvalDataType ret, List<Instruction> outputInsts, ObfusMethodContext ctx)
{ {
if (!GenerateIdentityTransformForArgument(inst, op, outputInsts, ctx)) if (!base.ObfuscateBasicUnaryOp(inst, op, ret, outputInsts, ctx))
{
return false;
}
if (outputInsts.Last().OpCode.Code != inst.OpCode.Code)
{ {
return false; return false;
} }
@ -20,7 +25,11 @@ namespace Obfuz.ObfusPasses.ExprObfus.Obfuscators
public override bool ObfuscateBasicBinOp(Instruction inst, EvalDataType op1, EvalDataType op2, EvalDataType ret, List<Instruction> outputInsts, ObfusMethodContext ctx) public override bool ObfuscateBasicBinOp(Instruction inst, EvalDataType op1, EvalDataType op2, EvalDataType ret, List<Instruction> outputInsts, ObfusMethodContext ctx)
{ {
if (!GenerateIdentityTransformForArgument(inst, op2, outputInsts, ctx)) if (!base.ObfuscateBasicBinOp(inst, op1, op2, ret, outputInsts, ctx))
{
return false;
}
if (outputInsts.Last().OpCode.Code != inst.OpCode.Code)
{ {
return false; return false;
} }
@ -30,7 +39,12 @@ namespace Obfuz.ObfusPasses.ExprObfus.Obfuscators
public override bool ObfuscateUnaryBitwiseOp(Instruction inst, EvalDataType op, EvalDataType ret, List<Instruction> outputInsts, ObfusMethodContext ctx) public override bool ObfuscateUnaryBitwiseOp(Instruction inst, EvalDataType op, EvalDataType ret, List<Instruction> outputInsts, ObfusMethodContext ctx)
{ {
if (!GenerateIdentityTransformForArgument(inst, op, outputInsts, ctx)) if (!base.ObfuscateUnaryBitwiseOp(inst, op, ret, outputInsts, ctx))
{
return false;
}
if (outputInsts.Last().OpCode.Code != inst.OpCode.Code)
{ {
return false; return false;
} }
@ -40,7 +54,11 @@ namespace Obfuz.ObfusPasses.ExprObfus.Obfuscators
public override bool ObfuscateBinBitwiseOp(Instruction inst, EvalDataType op1, EvalDataType op2, EvalDataType ret, List<Instruction> outputInsts, ObfusMethodContext ctx) public override bool ObfuscateBinBitwiseOp(Instruction inst, EvalDataType op1, EvalDataType op2, EvalDataType ret, List<Instruction> outputInsts, ObfusMethodContext ctx)
{ {
if (!GenerateIdentityTransformForArgument(inst, op2, outputInsts, ctx)) if (!base.ObfuscateBinBitwiseOp(inst, op1, op2, ret, outputInsts, ctx))
{
return false;
}
if (outputInsts.Last().OpCode.Code != inst.OpCode.Code)
{ {
return false; return false;
} }
@ -50,7 +68,11 @@ namespace Obfuz.ObfusPasses.ExprObfus.Obfuscators
public override bool ObfuscateBitShiftOp(Instruction inst, EvalDataType op1, EvalDataType op2, EvalDataType ret, List<Instruction> outputInsts, ObfusMethodContext ctx) public override bool ObfuscateBitShiftOp(Instruction inst, EvalDataType op1, EvalDataType op2, EvalDataType ret, List<Instruction> outputInsts, ObfusMethodContext ctx)
{ {
if (!GenerateIdentityTransformForArgument(inst, op2, outputInsts, ctx)) if (!base.ObfuscateBitShiftOp(inst, op1, op2, ret,outputInsts, ctx))
{
return false;
}
if (outputInsts.Last().OpCode.Code != inst.OpCode.Code)
{ {
return false; return false;
} }

View File

@ -170,6 +170,10 @@ namespace Obfuz
{ {
builder.AddPass(new ConstEncryptPass(settings.constEncryptSettings.ToFacade())); builder.AddPass(new ConstEncryptPass(settings.constEncryptSettings.ToFacade()));
} }
if (obfuscationPasses.HasFlag(ObfuscationPassType.ExprObfus))
{
builder.AddPass(new ExprObfusPass(settings.exprObfusSettings.ToFacade()));
}
if (obfuscationPasses.HasFlag(ObfuscationPassType.EvalStackObfus)) if (obfuscationPasses.HasFlag(ObfuscationPassType.EvalStackObfus))
{ {
builder.AddPass(new EvalStackObfusPass(settings.evalStackObfusSettings.ToFacade())); builder.AddPass(new EvalStackObfusPass(settings.evalStackObfusSettings.ToFacade()));
@ -178,10 +182,6 @@ namespace Obfuz
{ {
builder.AddPass(new FieldEncryptPass(settings.fieldEncryptSettings.ToFacade())); builder.AddPass(new FieldEncryptPass(settings.fieldEncryptSettings.ToFacade()));
} }
if (obfuscationPasses.HasFlag(ObfuscationPassType.ExprObfus))
{
builder.AddPass(new ExprObfusPass(settings.exprObfusSettings.ToFacade()));
}
if (obfuscationPasses.HasFlag(ObfuscationPassType.CallObfus)) if (obfuscationPasses.HasFlag(ObfuscationPassType.CallObfus))
{ {
builder.AddPass(new CallObfusPass(settings.callObfusSettings.ToFacade())); builder.AddPass(new CallObfusPass(settings.callObfusSettings.ToFacade()));