支持 MostAdvancedObfuscator

dev
walon 2025-06-20 18:58:54 +08:00
parent f247719bc1
commit 8314ed4327
2 changed files with 55 additions and 2 deletions

View File

@ -155,7 +155,7 @@ namespace Obfuz.ObfusPasses.ExprObfus.Obfuscators
//} //}
private bool GenerateIdentityTransformForArgument(Instruction inst, EvalDataType op, List<Instruction> outputInsts, ObfusMethodContext ctx) protected bool GenerateIdentityTransformForArgument(Instruction inst, EvalDataType op, List<Instruction> outputInsts, ObfusMethodContext ctx)
{ {
IRandom random = ctx.localRandom; IRandom random = ctx.localRandom;
ModuleConstFieldAllocator constFieldAllocator = ctx.constFieldAllocator; ModuleConstFieldAllocator constFieldAllocator = ctx.constFieldAllocator;

View File

@ -1,8 +1,61 @@
using Obfuz.Emit; using dnlib.DotNet.Emit;
using Obfuz.Emit;
using System.Collections.Generic;
namespace Obfuz.ObfusPasses.ExprObfus.Obfuscators namespace Obfuz.ObfusPasses.ExprObfus.Obfuscators
{ {
class MostAdvancedObfuscator : AdvancedObfuscator class MostAdvancedObfuscator : AdvancedObfuscator
{ {
private readonly BasicObfuscator _basicObfuscator = new BasicObfuscator();
public override bool ObfuscateBasicUnaryOp(Instruction inst, EvalDataType op, EvalDataType ret, List<Instruction> 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<Instruction> 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<Instruction> 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<Instruction> 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<Instruction> 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);
}
} }
} }