From b1f5fe92befdcb725e2a641a362af6d2969a166b Mon Sep 17 00:00:00 2001 From: de4dot Date: Thu, 24 May 2012 16:42:04 +0200 Subject: [PATCH] Clear invalid method bodies --- de4dot.code/ObfuscatedFile.cs | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) 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;