diff --git a/de4dot.code/deobfuscators/CliSecure/vm/CilOperandInstructionRestorer.cs b/de4dot.code/deobfuscators/CliSecure/vm/CilOperandInstructionRestorer.cs index 0afea8fa..0963eea4 100644 --- a/de4dot.code/deobfuscators/CliSecure/vm/CilOperandInstructionRestorer.cs +++ b/de4dot.code/deobfuscators/CliSecure/vm/CilOperandInstructionRestorer.cs @@ -30,13 +30,12 @@ namespace de4dot.code.deobfuscators.CliSecure.vm { class CilOperandInstructionRestorer { MethodDefinition method; - // Returns true if something was restored public bool restore(MethodDefinition method) { this.method = method; - bool changed = false; + bool atLeastOneFailed = false; if (method == null || method.Body == null) - return changed; + return atLeastOneFailed; var instrs = method.Body.Instructions; for (int i = 0; i < instrs.Count; i++) { @@ -66,14 +65,15 @@ namespace de4dot.code.deobfuscators.CliSecure.vm { default: continue; } - if (!isValidType(operandType)) + if (!isValidType(operandType)) { + atLeastOneFailed = true; continue; + } instr.Operand = operandType; - changed = true; } - return changed; + return atLeastOneFailed; } bool isValidType(TypeReference type) { diff --git a/de4dot.code/deobfuscators/CliSecure/vm/CsvmToCilMethodConverter.cs b/de4dot.code/deobfuscators/CliSecure/vm/CsvmToCilMethodConverter.cs index 67ff8320..21184851 100644 --- a/de4dot.code/deobfuscators/CliSecure/vm/CsvmToCilMethodConverter.cs +++ b/de4dot.code/deobfuscators/CliSecure/vm/CsvmToCilMethodConverter.cs @@ -49,7 +49,8 @@ namespace de4dot.code.deobfuscators.CliSecure.vm { DotNetUtils.restoreBody(cilMethod, newInstructions, newExceptions); - operandRestorer.restore(cilMethod); + if (operandRestorer.restore(cilMethod)) + Log.w("Failed to restore one or more instruction operands in CSVM method {0:X8}", cilMethod.MetadataToken.ToInt32()); } void fixLocals(IList instrs, IList locals) {