diff --git a/de4dot.code/ObfuscatedFile.cs b/de4dot.code/ObfuscatedFile.cs index 62f247c7..230251d7 100644 --- a/de4dot.code/ObfuscatedFile.cs +++ b/de4dot.code/ObfuscatedFile.cs @@ -557,8 +557,10 @@ static void SplitMethodDesc(string methodDesc, out string type, out string name, } public void DeobfuscateEnd() { - foreach (var m in inlineCandidate) { - m.Value.DeclaringType?.Remove(m.Value); + if (options.ControlFlowDeobfuscation) { + foreach (var m in inlineCandidate) { + m.Value.DeclaringType?.Remove(m.Value); + } } DeobfuscateCleanUp(); @@ -643,13 +645,14 @@ void Deobfuscate(MethodDef method, BlocksCflowDeobfuscator cflowDeobfuscator, Me return; var rewritten = false; - for (var i = 0; i < method.Body.Instructions.Count; i++) { - var instr = method.Body.Instructions[i]; + foreach (var instr in method.Body.Instructions) { if (instr.OpCode == OpCodes.Call) { var targetMethod = (IMethod?)instr.Operand; if (targetMethod is null) continue; if (inlineCandidate.TryGetValue(targetMethod.ResolveMethodDef()?.FullName ?? targetMethod.FullName, out var methodToInline)) { - instr.Operand = methodToInline.Body.Instructions[methodToInline.Parameters.Count].Operand; + var realCall = methodToInline.Body.Instructions[methodToInline.Parameters.Count]; + instr.OpCode = realCall.OpCode; + instr.Operand = realCall.Operand; rewritten = true; } }