diff --git a/de4dot.code/deobfuscators/Agile_NET/Deobfuscator.cs b/de4dot.code/deobfuscators/Agile_NET/Deobfuscator.cs index a3f011fd..011af735 100644 --- a/de4dot.code/deobfuscators/Agile_NET/Deobfuscator.cs +++ b/de4dot.code/deobfuscators/Agile_NET/Deobfuscator.cs @@ -271,8 +271,12 @@ namespace de4dot.code.deobfuscators.Agile_NET { } if (options.RestoreVmCode) { - csvm.restore(); - addResourceToBeRemoved(csvm.Resource, "CSVM data resource"); + if (csvm.restore()) + addResourceToBeRemoved(csvm.Resource, "CSVM data resource"); + else { + Logger.e("Couldn't restore VM methods"); + preserveTokensAndTypes(); + } } } diff --git a/de4dot.code/deobfuscators/Agile_NET/vm/Csvm.cs b/de4dot.code/deobfuscators/Agile_NET/vm/Csvm.cs index 8699f08f..238a5fd9 100644 --- a/de4dot.code/deobfuscators/Agile_NET/vm/Csvm.cs +++ b/de4dot.code/deobfuscators/Agile_NET/vm/Csvm.cs @@ -78,13 +78,17 @@ namespace de4dot.code.deobfuscators.Agile_NET.vm { return DotNetUtils.getResource(module, "_CSVM") as EmbeddedResource; } - public void restore() { + public bool restore() { if (!Detected) - return; + return true; int oldIndent = Logger.Instance.IndentLevel; try { restore2(); + return true; + } + catch { + return false; } finally { Logger.Instance.IndentLevel = oldIndent;