From e88479f71d8838b227b79221d175f400a4114f84 Mon Sep 17 00:00:00 2001 From: de4dot Date: Fri, 27 Jul 2012 08:02:27 +0200 Subject: [PATCH] Add OtherMethods prop --- de4dot.code/deobfuscators/DeobfuscatorBase.cs | 17 +++++++++++------ de4dot.code/deobfuscators/ProxyCallFixerBase.cs | 4 ++++ 2 files changed, 15 insertions(+), 6 deletions(-) diff --git a/de4dot.code/deobfuscators/DeobfuscatorBase.cs b/de4dot.code/deobfuscators/DeobfuscatorBase.cs index 7a67add7..61d4914d 100644 --- a/de4dot.code/deobfuscators/DeobfuscatorBase.cs +++ b/de4dot.code/deobfuscators/DeobfuscatorBase.cs @@ -472,9 +472,10 @@ namespace de4dot.code.deobfuscators { Log.v("Removing types"); Log.indent(); + var moduleType = DotNetUtils.getModuleType(module); foreach (var info in typesToRemove) { var typeDef = info.obj; - if (typeDef == null) + if (typeDef == null || typeDef == moduleType) continue; bool removed; if (typeDef.IsNested) @@ -663,18 +664,22 @@ namespace de4dot.code.deobfuscators { } } - protected void removeProxyDelegates(ProxyCallFixerBase proxyCallFixer) { - removeProxyDelegates(proxyCallFixer, true); + protected bool removeProxyDelegates(ProxyCallFixerBase proxyCallFixer) { + return removeProxyDelegates(proxyCallFixer, true); } - protected void removeProxyDelegates(ProxyCallFixerBase proxyCallFixer, bool removeCreators) { + protected bool removeProxyDelegates(ProxyCallFixerBase proxyCallFixer, bool removeCreators) { if (proxyCallFixer.Errors != 0) { Log.v("Not removing proxy delegates and creator type since errors were detected."); - return; + return false; } addTypesToBeRemoved(proxyCallFixer.DelegateTypes, "Proxy delegate type"); - if (removeCreators && proxyCallFixer.RemovedDelegateCreatorCalls > 0) + if (removeCreators && proxyCallFixer.RemovedDelegateCreatorCalls > 0) { addTypesToBeRemoved(proxyCallFixer.DelegateCreatorTypes, "Proxy delegate creator type"); + foreach (var tuple in proxyCallFixer.OtherMethods) + addMethodToBeRemoved(tuple.Item1, tuple.Item2); + } + return true; } protected Resource getResource(IEnumerable strings) { diff --git a/de4dot.code/deobfuscators/ProxyCallFixerBase.cs b/de4dot.code/deobfuscators/ProxyCallFixerBase.cs index f81cc1fd..8fb83434 100644 --- a/de4dot.code/deobfuscators/ProxyCallFixerBase.cs +++ b/de4dot.code/deobfuscators/ProxyCallFixerBase.cs @@ -58,6 +58,10 @@ namespace de4dot.code.deobfuscators { } } + public virtual IEnumerable> OtherMethods { + get { return new List>(); } + } + public bool Detected { get { return delegateCreatorMethods.Count != 0; } }