diff --git a/de4dot.code/ObfuscatedFile.cs b/de4dot.code/ObfuscatedFile.cs index f5ea464d..15c38078 100644 --- a/de4dot.code/ObfuscatedFile.cs +++ b/de4dot.code/ObfuscatedFile.cs @@ -558,9 +558,15 @@ namespace de4dot.code { throw; } catch (Exception ex) { - Log.w("Could not deobfuscate method {0:X8}. Hello, E.T.: {1}", // E.T. = exception type + if (!canLoadMethodBody(method)) { + Log.v("Invalid method body. {0:X8}", method.MetadataToken.ToInt32()); + method.Body = new MethodBody(method); + } + else { + Log.w("Could not deobfuscate method {0:X8}. Hello, E.T.: {1}", // E.T. = exception type method.MetadataToken.ToInt32(), ex.GetType()); + } } finally { Log.indentLevel = oldIndentLevel; @@ -571,6 +577,16 @@ namespace de4dot.code { } } + static bool canLoadMethodBody(MethodDefinition method) { + try { + var body = method.Body; + return true; + } + catch { + return false; + } + } + void deobfuscate(MethodDefinition method, BlocksCflowDeobfuscator cflowDeobfuscator, MethodPrinter methodPrinter) { if (!hasNonEmptyBody(method)) return;