From ceca5718ba9431f47ce58f4af7b8583a8eec59b5 Mon Sep 17 00:00:00 2001 From: de4dot Date: Wed, 26 Oct 2011 23:00:01 +0200 Subject: [PATCH] Remove encrypted resources and call to methods decrypter --- .../deobfuscators/dotNET_Reactor/BooleanDecrypter.cs | 4 ++++ .../deobfuscators/dotNET_Reactor/Deobfuscator.cs | 11 +++++++++++ .../deobfuscators/dotNET_Reactor/EncryptedResource.cs | 4 ++++ .../deobfuscators/dotNET_Reactor/MethodsDecrypter.cs | 8 ++++++++ .../deobfuscators/dotNET_Reactor/StringDecrypter.cs | 4 ++++ 5 files changed, 31 insertions(+) diff --git a/de4dot.code/deobfuscators/dotNET_Reactor/BooleanDecrypter.cs b/de4dot.code/deobfuscators/dotNET_Reactor/BooleanDecrypter.cs index c8f235dc..dad95c24 100644 --- a/de4dot.code/deobfuscators/dotNET_Reactor/BooleanDecrypter.cs +++ b/de4dot.code/deobfuscators/dotNET_Reactor/BooleanDecrypter.cs @@ -36,6 +36,10 @@ namespace de4dot.deobfuscators.dotNET_Reactor { get { return encryptedResource.ResourceDecrypterMethod; } } + public EmbeddedResource BooleansResource { + get { return encryptedResource.EncryptedDataResource; } + } + public BooleanDecrypter(ModuleDefinition module) { this.module = module; this.encryptedResource = new EncryptedResource(module); diff --git a/de4dot.code/deobfuscators/dotNET_Reactor/Deobfuscator.cs b/de4dot.code/deobfuscators/dotNET_Reactor/Deobfuscator.cs index feb769db..78a8c769 100644 --- a/de4dot.code/deobfuscators/dotNET_Reactor/Deobfuscator.cs +++ b/de4dot.code/deobfuscators/dotNET_Reactor/Deobfuscator.cs @@ -163,6 +163,17 @@ namespace de4dot.deobfuscators.dotNET_Reactor { }); } DeobfuscatedFile.stringDecryptersAdded(); + + if (Operations.DecryptStrings != OpDecryptString.None) + addResourceToBeRemoved(stringDecrypter.StringsResource, "Encrypted strings"); + if (options.DecryptMethods) { + addResourceToBeRemoved(methodsDecrypter.MethodsResource, "Encrypted methods"); + addCctorInitCallToBeRemoved(methodsDecrypter.MethodsDecrypterMethod); + } + if (options.DecryptBools) + addResourceToBeRemoved(booleanDecrypter.BooleansResource, "Encrypted booleans"); + if (Operations.DecryptStrings != OpDecryptString.None && options.DecryptMethods && options.DecryptBools) + addTypeToBeRemoved(methodsDecrypter.MethodsDecrypterMethod.DeclaringType, "Decrypter type"); } public override bool deobfuscateOther(Blocks blocks) { diff --git a/de4dot.code/deobfuscators/dotNET_Reactor/EncryptedResource.cs b/de4dot.code/deobfuscators/dotNET_Reactor/EncryptedResource.cs index 0b662185..443acec3 100644 --- a/de4dot.code/deobfuscators/dotNET_Reactor/EncryptedResource.cs +++ b/de4dot.code/deobfuscators/dotNET_Reactor/EncryptedResource.cs @@ -38,6 +38,10 @@ namespace de4dot.deobfuscators.dotNET_Reactor { set { resourceDecrypterMethod = value; } } + public EmbeddedResource EncryptedDataResource { + get { return encryptedDataResource; } + } + public EncryptedResource(ModuleDefinition module) { this.module = module; } diff --git a/de4dot.code/deobfuscators/dotNET_Reactor/MethodsDecrypter.cs b/de4dot.code/deobfuscators/dotNET_Reactor/MethodsDecrypter.cs index 7e223f5f..65cf73a8 100644 --- a/de4dot.code/deobfuscators/dotNET_Reactor/MethodsDecrypter.cs +++ b/de4dot.code/deobfuscators/dotNET_Reactor/MethodsDecrypter.cs @@ -35,6 +35,14 @@ namespace de4dot.deobfuscators.dotNET_Reactor { get { return encryptedResource.ResourceDecrypterMethod != null; } } + public MethodDefinition MethodsDecrypterMethod { + get { return encryptedResource.ResourceDecrypterMethod; } + } + + public EmbeddedResource MethodsResource { + get { return encryptedResource.EncryptedDataResource; } + } + public MethodsDecrypter(ModuleDefinition module) { this.module = module; this.encryptedResource = new EncryptedResource(module); diff --git a/de4dot.code/deobfuscators/dotNET_Reactor/StringDecrypter.cs b/de4dot.code/deobfuscators/dotNET_Reactor/StringDecrypter.cs index 55838f48..33a2e5c6 100644 --- a/de4dot.code/deobfuscators/dotNET_Reactor/StringDecrypter.cs +++ b/de4dot.code/deobfuscators/dotNET_Reactor/StringDecrypter.cs @@ -49,6 +49,10 @@ namespace de4dot.deobfuscators.dotNET_Reactor { get { return encryptedResource.ResourceDecrypterMethod != null; } } + public EmbeddedResource StringsResource { + get { return encryptedResource.EncryptedDataResource; } + } + public IEnumerable DecrypterInfos { get { return decrypterInfos; } }