Make sure string decrypter methods aren't detected as inlined methods

This commit is contained in:
de4dot 2012-05-03 09:51:26 +02:00
parent 870dab5b90
commit 83dc4226c1
2 changed files with 7 additions and 3 deletions

View File

@ -268,7 +268,7 @@ done:
void removeInlinedMethods() {
if (!options.InlineMethods || !options.RemoveInlinedMethods)
return;
removeInlinedMethods(DsInlinedMethodsFinder.find(module));
removeInlinedMethods(DsInlinedMethodsFinder.find(module, staticStringInliner.Methods));
}
public override IEnumerable<int> getStringDecrypterMethods() {

View File

@ -22,12 +22,16 @@ using Mono.Cecil;
namespace de4dot.code.deobfuscators.DeepSea {
static class DsInlinedMethodsFinder {
public static List<MethodDefinition> find(ModuleDefinition module) {
public static List<MethodDefinition> find(ModuleDefinition module, IEnumerable<MethodDefinition> notInlinedMethods) {
var notInlinedMethodsDict = new Dictionary<MethodDefinition, bool>();
foreach (var method in notInlinedMethods)
notInlinedMethodsDict[method] = true;
var inlinedMethods = new List<MethodDefinition>();
foreach (var type in module.GetTypes()) {
foreach (var method in type.Methods) {
if (DsMethodCallInliner.canInline(method))
if (!notInlinedMethodsDict.ContainsKey(method) && DsMethodCallInliner.canInline(method))
inlinedMethods.Add(method);
}
}