支持 MostAdvancedObfuscator
parent
f247719bc1
commit
8314ed4327
|
@ -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;
|
||||||
|
|
|
@ -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);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue