From ad6c6401b929f0eea3edc624c506661e725fc150 Mon Sep 17 00:00:00 2001 From: de4dot Date: Sat, 7 Jul 2012 07:11:32 +0200 Subject: [PATCH] Support VS2008 --- AssemblyServer-x64/AssemblyServer-x64.csproj | 2 ++ blocks/DotNetUtils.cs | 6 +++++- blocks/MemberRefInstance.cs | 18 +++++++++++++++--- blocks/MemberReferenceHelper.cs | 6 +++++- blocks/ScopeBlock.cs | 6 +++++- blocks/cflow/MethodCallInlinerBase.cs | 18 +++++++++++++++--- de4dot-x64/de4dot-x64.csproj | 2 ++ de4dot.code/NameRegexes.cs | 6 +++++- de4dot.code/Option.cs | 6 +++++- de4dot.code/deobfuscators/ArrayFinder.cs | 6 +++++- .../deobfuscators/Babel_NET/InflaterCreator.cs | 6 +++++- de4dot.code/deobfuscators/DeobfuscatorBase.cs | 6 +++++- .../deobfuscators/DeobfuscatorInfoBase.cs | 6 +++++- de4dot.code/deobfuscators/IDeobfuscatedFile.cs | 2 +- .../deobfuscators/MPRESS/Deobfuscator.cs | 6 +++++- .../SmartAssembly/Deobfuscator.cs | 2 +- de4dot.code/deobfuscators/TypesRestorer.cs | 6 +++++- .../dotNET_Reactor/v4/Deobfuscator.cs | 2 +- .../dotNET_Reactor/v4/EncryptedResource.cs | 6 +++++- de4dot.code/renamer/NameCreators.cs | 16 ++++++++++++---- de4dot.code/renamer/TypeInfo.cs | 6 +++++- de4dot.cui/FilesDeobfuscator.cs | 10 +++++++--- de4dot.cui/Program.cs | 6 +++++- 23 files changed, 126 insertions(+), 30 deletions(-) diff --git a/AssemblyServer-x64/AssemblyServer-x64.csproj b/AssemblyServer-x64/AssemblyServer-x64.csproj index ec8b78ec..5037e636 100644 --- a/AssemblyServer-x64/AssemblyServer-x64.csproj +++ b/AssemblyServer-x64/AssemblyServer-x64.csproj @@ -24,6 +24,7 @@ DEBUG;TRACE prompt 4 + true x64 @@ -34,6 +35,7 @@ prompt 4 true + true diff --git a/blocks/DotNetUtils.cs b/blocks/DotNetUtils.cs index 03462a8b..4d136dd9 100644 --- a/blocks/DotNetUtils.cs +++ b/blocks/DotNetUtils.cs @@ -362,7 +362,11 @@ namespace de4dot.blocks { return null; } - public static IEnumerable findMethods(IEnumerable methods, string returnType, string[] argsTypes, bool isStatic = true) { + public static IEnumerable findMethods(IEnumerable methods, string returnType, string[] argsTypes) { + return findMethods(methods, returnType, argsTypes, true); + } + + public static IEnumerable findMethods(IEnumerable methods, string returnType, string[] argsTypes, bool isStatic) { foreach (var method in methods) { if (!method.HasBody || method.CallingConvention != MethodCallingConvention.Default) continue; diff --git a/blocks/MemberRefInstance.cs b/blocks/MemberRefInstance.cs index f459ec54..751ff272 100644 --- a/blocks/MemberRefInstance.cs +++ b/blocks/MemberRefInstance.cs @@ -31,7 +31,11 @@ namespace de4dot.blocks { IGenericInstance gim; bool modified; - public static TypeReference make(TypeReference typeReference, GenericInstanceType git, IGenericInstance gim = null) { + public static TypeReference make(TypeReference typeReference, GenericInstanceType git) { + return make(typeReference, git, null); + } + + public static TypeReference make(TypeReference typeReference, GenericInstanceType git, IGenericInstance gim) { if (git == null && gim == null) return typeReference; return new TypeReferenceInstance(typeReference, git, gim).makeInstance(); @@ -88,7 +92,11 @@ namespace de4dot.blocks { IGenericInstance gim; bool modified; - public MultiTypeRefInstance(GenericInstanceType git, IGenericInstance gim = null) { + public MultiTypeRefInstance(GenericInstanceType git) + : this(git, null) { + } + + public MultiTypeRefInstance(GenericInstanceType git, IGenericInstance gim) { this.git = git; this.gim = gim; } @@ -112,7 +120,11 @@ namespace de4dot.blocks { public class MethodReferenceInstance : MultiTypeRefInstance { MethodReference methodReference; - public static MethodReference make(MethodReference methodReference, GenericInstanceType git, IGenericInstance gim = null) { + public static MethodReference make(MethodReference methodReference, GenericInstanceType git) { + return make(methodReference, git, null); + } + + public static MethodReference make(MethodReference methodReference, GenericInstanceType git, IGenericInstance gim) { if (git == null && gim == null) return methodReference; return new MethodReferenceInstance(methodReference, git, gim).makeInstance(); diff --git a/blocks/MemberReferenceHelper.cs b/blocks/MemberReferenceHelper.cs index 794a41c7..7a33691a 100644 --- a/blocks/MemberReferenceHelper.cs +++ b/blocks/MemberReferenceHelper.cs @@ -815,7 +815,11 @@ namespace de4dot.blocks { throw new ApplicationException(string.Format("Unknown MemberReference type: {0}", type)); } - public static bool verifyType(TypeReference typeReference, string assembly, string type, string extra = "") { + public static bool verifyType(TypeReference typeReference, string assembly, string type) { + return verifyType(typeReference, assembly, type, ""); + } + + public static bool verifyType(TypeReference typeReference, string assembly, string type, string extra) { return typeReference != null && MemberReferenceHelper.getCanonicalizedTypeRefName(typeReference.GetElementType()) == "[" + assembly + "]" + type && typeReference.FullName == type + extra; diff --git a/blocks/ScopeBlock.cs b/blocks/ScopeBlock.cs index 3f00f31f..af30eedc 100644 --- a/blocks/ScopeBlock.cs +++ b/blocks/ScopeBlock.cs @@ -71,7 +71,11 @@ namespace de4dot.blocks { } } - List findBlocks(Func blockChecker = null) { + List findBlocks() { + return findBlocks(null); + } + + List findBlocks(Func blockChecker) { var blocks = new List(); foreach (var bb in getBaseBlocks()) { Block block = bb as Block; diff --git a/blocks/cflow/MethodCallInlinerBase.cs b/blocks/cflow/MethodCallInlinerBase.cs index 17f5de53..b8d20296 100644 --- a/blocks/cflow/MethodCallInlinerBase.cs +++ b/blocks/cflow/MethodCallInlinerBase.cs @@ -80,7 +80,11 @@ namespace de4dot.blocks.cflow { return true; } - protected bool inlineOtherMethod(int patchIndex, MethodDefinition methodToInline, Instruction instr, int instrIndex, int popLastArgs = 0) { + protected bool inlineOtherMethod(int patchIndex, MethodDefinition methodToInline, Instruction instr, int instrIndex) { + return inlineOtherMethod(patchIndex, methodToInline, instr, instrIndex, 0); + } + + protected bool inlineOtherMethod(int patchIndex, MethodDefinition methodToInline, Instruction instr, int instrIndex, int popLastArgs) { return patchMethod(methodToInline, tryInlineOtherMethod(patchIndex, methodToInline, instr, instrIndex, popLastArgs)); } @@ -95,7 +99,11 @@ namespace de4dot.blocks.cflow { return true; } - protected InstructionPatcher tryInlineOtherMethod(int patchIndex, MethodDefinition methodToInline, Instruction instr, int instrIndex, int popLastArgs = 0) { + protected InstructionPatcher tryInlineOtherMethod(int patchIndex, MethodDefinition methodToInline, Instruction instr, int instrIndex) { + return tryInlineOtherMethod(patchIndex, methodToInline, instr, instrIndex, 0); + } + + protected InstructionPatcher tryInlineOtherMethod(int patchIndex, MethodDefinition methodToInline, Instruction instr, int instrIndex, int popLastArgs) { int loadIndex = 0; int methodArgsCount = DotNetUtils.getArgsCount(methodToInline); bool foundLdarga = false; @@ -183,7 +191,11 @@ namespace de4dot.blocks.cflow { return instr != null && instr.OpCode.Code == Code.Ret; } - protected bool checkSameMethods(MethodReference method, MethodDefinition methodToInline, int ignoreLastMethodToInlineArgs = 0) { + protected bool checkSameMethods(MethodReference method, MethodDefinition methodToInline) { + return checkSameMethods(method, methodToInline, 0); + } + + protected bool checkSameMethods(MethodReference method, MethodDefinition methodToInline, int ignoreLastMethodToInlineArgs) { var methodToInlineArgs = DotNetUtils.getArgs(methodToInline); var methodArgs = DotNetUtils.getArgs(method); if (methodToInlineArgs.Count - ignoreLastMethodToInlineArgs != methodArgs.Count) diff --git a/de4dot-x64/de4dot-x64.csproj b/de4dot-x64/de4dot-x64.csproj index 59053ba9..3d2b4e02 100644 --- a/de4dot-x64/de4dot-x64.csproj +++ b/de4dot-x64/de4dot-x64.csproj @@ -24,6 +24,7 @@ DEBUG;TRACE prompt 4 + true x64 @@ -34,6 +35,7 @@ prompt 4 true + true diff --git a/de4dot.code/NameRegexes.cs b/de4dot.code/NameRegexes.cs index eb72641e..f5526586 100644 --- a/de4dot.code/NameRegexes.cs +++ b/de4dot.code/NameRegexes.cs @@ -55,7 +55,11 @@ namespace de4dot.code { public bool DefaultValue { get; set; } public const char regexSeparatorChar = '&'; - public NameRegexes(string regex = "") { + public NameRegexes() + : this("") { + } + + public NameRegexes(string regex) { set(regex); } diff --git a/de4dot.code/Option.cs b/de4dot.code/Option.cs index 09c472e2..81654ce1 100644 --- a/de4dot.code/Option.cs +++ b/de4dot.code/Option.cs @@ -214,7 +214,11 @@ namespace de4dot.code { get { return false; } } - public NoArgOption(string shortName, string longName, string description, Action action = null) + public NoArgOption(string shortName, string longName, string description) + : this(shortName, longName, description, null) { + } + + public NoArgOption(string shortName, string longName, string description, Action action) : base(shortName, longName, description) { this.action = action; } diff --git a/de4dot.code/deobfuscators/ArrayFinder.cs b/de4dot.code/deobfuscators/ArrayFinder.cs index 2d413143..e15ddbc0 100644 --- a/de4dot.code/deobfuscators/ArrayFinder.cs +++ b/de4dot.code/deobfuscators/ArrayFinder.cs @@ -25,7 +25,11 @@ using de4dot.blocks.cflow; namespace de4dot.code.deobfuscators { static class ArrayFinder { - public static List getArrays(MethodDefinition method, TypeReference arrayElemntType = null) { + public static List getArrays(MethodDefinition method) { + return getArrays(method, null); + } + + public static List getArrays(MethodDefinition method, TypeReference arrayElemntType) { var arrays = new List(); var instrs = method.Body.Instructions; for (int i = 0; i < instrs.Count; i++) { diff --git a/de4dot.code/deobfuscators/Babel_NET/InflaterCreator.cs b/de4dot.code/deobfuscators/Babel_NET/InflaterCreator.cs index c4cb9a9d..704f8b89 100644 --- a/de4dot.code/deobfuscators/Babel_NET/InflaterCreator.cs +++ b/de4dot.code/deobfuscators/Babel_NET/InflaterCreator.cs @@ -40,7 +40,11 @@ namespace de4dot.code.deobfuscators.Babel_NET { return new BabelInflater(noHeader, magic.Value); } - static Inflater createNormal(bool noHeader, string errorMessage = null) { + static Inflater createNormal(bool noHeader) { + return createNormal(noHeader, null); + } + + static Inflater createNormal(bool noHeader, string errorMessage) { if (errorMessage != null) Log.w("{0}", errorMessage); return new Inflater(noHeader); diff --git a/de4dot.code/deobfuscators/DeobfuscatorBase.cs b/de4dot.code/deobfuscators/DeobfuscatorBase.cs index 8358a16b..888b92ce 100644 --- a/de4dot.code/deobfuscators/DeobfuscatorBase.cs +++ b/de4dot.code/deobfuscators/DeobfuscatorBase.cs @@ -663,7 +663,11 @@ namespace de4dot.code.deobfuscators { } } - protected void removeProxyDelegates(ProxyCallFixerBase proxyCallFixer, bool removeCreators = true) { + protected void removeProxyDelegates(ProxyCallFixerBase proxyCallFixer) { + removeProxyDelegates(proxyCallFixer, true); + } + + protected void removeProxyDelegates(ProxyCallFixerBase proxyCallFixer, bool removeCreators) { if (proxyCallFixer.Errors != 0) { Log.v("Not removing proxy delegates and creator type since errors were detected."); return; diff --git a/de4dot.code/deobfuscators/DeobfuscatorInfoBase.cs b/de4dot.code/deobfuscators/DeobfuscatorInfoBase.cs index 710901b0..dba23b54 100644 --- a/de4dot.code/deobfuscators/DeobfuscatorInfoBase.cs +++ b/de4dot.code/deobfuscators/DeobfuscatorInfoBase.cs @@ -23,7 +23,11 @@ namespace de4dot.code.deobfuscators { public abstract class DeobfuscatorInfoBase : IDeobfuscatorInfo { protected NameRegexOption validNameRegex; - public DeobfuscatorInfoBase(string nameRegex = null) { + public DeobfuscatorInfoBase() + : this(null) { + } + + public DeobfuscatorInfoBase(string nameRegex) { validNameRegex = new NameRegexOption(null, makeArgName("name"), "Valid name regex pattern", nameRegex ?? DeobfuscatorBase.DEFAULT_VALID_NAME_REGEX); } diff --git a/de4dot.code/deobfuscators/IDeobfuscatedFile.cs b/de4dot.code/deobfuscators/IDeobfuscatedFile.cs index 60b34c52..61a14197 100644 --- a/de4dot.code/deobfuscators/IDeobfuscatedFile.cs +++ b/de4dot.code/deobfuscators/IDeobfuscatedFile.cs @@ -20,7 +20,7 @@ namespace de4dot.code.deobfuscators { public interface IDeobfuscatedFile : ISimpleDeobfuscator { IDeobfuscatorContext DeobfuscatorContext { get; } - void createAssemblyFile(byte[] data, string assemblyName, string extension = null); + void createAssemblyFile(byte[] data, string assemblyName, string extension); void stringDecryptersAdded(); } } diff --git a/de4dot.code/deobfuscators/MPRESS/Deobfuscator.cs b/de4dot.code/deobfuscators/MPRESS/Deobfuscator.cs index 5311149b..bab02faf 100644 --- a/de4dot.code/deobfuscators/MPRESS/Deobfuscator.cs +++ b/de4dot.code/deobfuscators/MPRESS/Deobfuscator.cs @@ -109,7 +109,11 @@ namespace de4dot.code.deobfuscators.MPRESS { public readonly string parameters; public readonly string name; - public MethodInfo(string returnType, string parameters, string name = null) { + public MethodInfo(string returnType, string parameters) + : this(returnType, parameters, null) { + } + + public MethodInfo(string returnType, string parameters, string name) { this.returnType = returnType; this.parameters = parameters; this.name = name; diff --git a/de4dot.code/deobfuscators/SmartAssembly/Deobfuscator.cs b/de4dot.code/deobfuscators/SmartAssembly/Deobfuscator.cs index bc9e49dd..eae3ff19 100644 --- a/de4dot.code/deobfuscators/SmartAssembly/Deobfuscator.cs +++ b/de4dot.code/deobfuscators/SmartAssembly/Deobfuscator.cs @@ -336,7 +336,7 @@ namespace de4dot.code.deobfuscators.SmartAssembly { void dumpEmbeddedAssemblies() { assemblyResolver.resolveResources(); foreach (var tuple in assemblyResolver.getDecryptedResources()) { - DeobfuscatedFile.createAssemblyFile(tuple.Item2, tuple.Item1.simpleName); + DeobfuscatedFile.createAssemblyFile(tuple.Item2, tuple.Item1.simpleName, null); addResourceToBeRemoved(tuple.Item1.resource, string.Format("Embedded assembly: {0}", tuple.Item1.assemblyName)); } } diff --git a/de4dot.code/deobfuscators/TypesRestorer.cs b/de4dot.code/deobfuscators/TypesRestorer.cs index db7525f0..64025368 100644 --- a/de4dot.code/deobfuscators/TypesRestorer.cs +++ b/de4dot.code/deobfuscators/TypesRestorer.cs @@ -71,7 +71,11 @@ namespace de4dot.code.deobfuscators { this.arg = arg; } - public void add(TypeReference type, bool wasNewobj = false) { + public void add(TypeReference type) { + add(type, false); + } + + public void add(TypeReference type, bool wasNewobj) { if (wasNewobj) { if (!newobjTypes) clear(); diff --git a/de4dot.code/deobfuscators/dotNET_Reactor/v4/Deobfuscator.cs b/de4dot.code/deobfuscators/dotNET_Reactor/v4/Deobfuscator.cs index 89857983..a12a0154 100644 --- a/de4dot.code/deobfuscators/dotNET_Reactor/v4/Deobfuscator.cs +++ b/de4dot.code/deobfuscators/dotNET_Reactor/v4/Deobfuscator.cs @@ -521,7 +521,7 @@ namespace de4dot.code.deobfuscators.dotNET_Reactor.v4 { return; foreach (var info in assemblyResolver.getEmbeddedAssemblies(DeobfuscatedFile, this)) { var simpleName = Utils.getAssemblySimpleName(info.name); - DeobfuscatedFile.createAssemblyFile(info.resource.GetResourceData(), simpleName); + DeobfuscatedFile.createAssemblyFile(info.resource.GetResourceData(), simpleName, null); addResourceToBeRemoved(info.resource, string.Format("Embedded assembly: {0}", info.name)); } } diff --git a/de4dot.code/deobfuscators/dotNET_Reactor/v4/EncryptedResource.cs b/de4dot.code/deobfuscators/dotNET_Reactor/v4/EncryptedResource.cs index ee7daa7f..42b155e3 100644 --- a/de4dot.code/deobfuscators/dotNET_Reactor/v4/EncryptedResource.cs +++ b/de4dot.code/deobfuscators/dotNET_Reactor/v4/EncryptedResource.cs @@ -69,7 +69,11 @@ namespace de4dot.code.deobfuscators.dotNET_Reactor.v4 { return DeobUtils.lookup(module, def, errorMessage); } - public bool couldBeResourceDecrypter(MethodDefinition method, IEnumerable additionalTypes, bool checkResource = true) { + public bool couldBeResourceDecrypter(MethodDefinition method, IEnumerable additionalTypes) { + return couldBeResourceDecrypter(method, additionalTypes, true); + } + + public bool couldBeResourceDecrypter(MethodDefinition method, IEnumerable additionalTypes, bool checkResource) { if (!method.IsStatic) return false; if (method.Body == null) diff --git a/de4dot.code/renamer/NameCreators.cs b/de4dot.code/renamer/NameCreators.cs index ce8de387..73e49caf 100644 --- a/de4dot.code/renamer/NameCreators.cs +++ b/de4dot.code/renamer/NameCreators.cs @@ -63,7 +63,11 @@ namespace de4dot.code.renamer { class NameCreator : NameCreatorCounter { string prefix; - public NameCreator(string prefix, int num = 0) { + public NameCreator(string prefix) + : this(prefix, 0) { + } + + public NameCreator(string prefix, int num) { this.prefix = prefix; this.num = num; } @@ -82,7 +86,11 @@ namespace de4dot.code.renamer { string prefix; const string separator = "_"; - public NameCreator2(string prefix, int num = 0) { + public NameCreator2(string prefix) + : this(prefix, 0) { + } + + public NameCreator2(string prefix, int num) { this.prefix = prefix; this.num = num; } @@ -99,7 +107,7 @@ namespace de4dot.code.renamer { } interface ITypeNameCreator { - string create(TypeDefinition typeDefinition, string newBaseTypeName = null); + string create(TypeDefinition typeDefinition, string newBaseTypeName); } class NameInfos { @@ -164,7 +172,7 @@ namespace de4dot.code.renamer { return new NameCreator(prefix); } - public string create(TypeDefinition typeDefinition, string newBaseTypeName = null) { + public string create(TypeDefinition typeDefinition, string newBaseTypeName) { var nameCreator = getNameCreator(typeDefinition, newBaseTypeName); return existingNames.getName(typeDefinition.Name, nameCreator); } diff --git a/de4dot.code/renamer/TypeInfo.cs b/de4dot.code/renamer/TypeInfo.cs index 858715ee..ff0d1b19 100644 --- a/de4dot.code/renamer/TypeInfo.cs +++ b/de4dot.code/renamer/TypeInfo.cs @@ -405,7 +405,11 @@ namespace de4dot.code.renamer { return true; } - void prepareRenameGenericParams(IEnumerable genericParams, INameChecker checker, IEnumerable otherGenericParams = null) { + void prepareRenameGenericParams(IEnumerable genericParams, INameChecker checker) { + prepareRenameGenericParams(genericParams, checker, null); + } + + void prepareRenameGenericParams(IEnumerable genericParams, INameChecker checker, IEnumerable otherGenericParams) { var usedNames = new Dictionary(StringComparer.Ordinal); var nameCreator = new GenericParamNameCreator(); diff --git a/de4dot.cui/FilesDeobfuscator.cs b/de4dot.cui/FilesDeobfuscator.cs index dbbae9a9..29077397 100644 --- a/de4dot.cui/FilesDeobfuscator.cs +++ b/de4dot.cui/FilesDeobfuscator.cs @@ -120,7 +120,11 @@ namespace de4dot.cui { saveAllFiles(allFiles); } - IEnumerable loadAllFiles(bool onlyScan = false) { + IEnumerable loadAllFiles() { + return loadAllFiles(false); + } + + IEnumerable loadAllFiles(bool onlyScan) { var loader = new DotNetFileLoader(new DotNetFileLoader.Options { PossibleFiles = options.Files, SearchDirs = options.SearchDirs, @@ -172,7 +176,7 @@ namespace de4dot.cui { } } - bool add(IObfuscatedFile file, bool skipUnknownObfuscator = false, bool isFromPossibleFiles = false) { + bool add(IObfuscatedFile file, bool skipUnknownObfuscator, bool isFromPossibleFiles) { var key = Utils.getFullPath(file.Filename); if (allFiles.ContainsKey(key)) { Log.w("Ingoring duplicate file: {0}", file.Filename); @@ -301,7 +305,7 @@ namespace de4dot.cui { } var obfuscatedFile = new ObfuscatedFile(fileOptions, options.AssemblyClientFactory); - if (add(obfuscatedFile, searchDir.SkipUnknownObfuscators)) + if (add(obfuscatedFile, searchDir.SkipUnknownObfuscators, false)) return obfuscatedFile; return null; } diff --git a/de4dot.cui/Program.cs b/de4dot.cui/Program.cs index e4b96435..5a0a6c70 100644 --- a/de4dot.cui/Program.cs +++ b/de4dot.cui/Program.cs @@ -138,7 +138,11 @@ namespace de4dot.cui { return hasEnv("windir") && !hasEnv("PROMPT"); } - public static void printStackTrace(Exception ex, Log.LogLevel logLevel = Log.LogLevel.error) { + public static void printStackTrace(Exception ex) { + printStackTrace(ex, Log.LogLevel.error); + } + + public static void printStackTrace(Exception ex, Log.LogLevel logLevel) { var line = new string('-', 78); Log.log(logLevel, "\n\n"); Log.log(logLevel, line);