diff --git a/AssemblyData/AssemblyResolver.cs b/AssemblyData/AssemblyResolver.cs index f2a85f23..023e1c38 100644 --- a/AssemblyData/AssemblyResolver.cs +++ b/AssemblyData/AssemblyResolver.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/AssemblyData/AssemblyServer.cs b/AssemblyData/AssemblyServer.cs index b677664f..f088d552 100644 --- a/AssemblyData/AssemblyServer.cs +++ b/AssemblyData/AssemblyServer.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/AssemblyData/AssemblyService.cs b/AssemblyData/AssemblyService.cs index 74798b51..cd972c7a 100644 --- a/AssemblyData/AssemblyService.cs +++ b/AssemblyData/AssemblyService.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. @@ -85,8 +85,8 @@ namespace AssemblyData { try { assembly = assemblyResolver.Load(filename); } - catch (BadImageFormatException) { - throw new ApplicationException(string.Format("Could not load assembly {0}. Maybe it's 32-bit or 64-bit only?", filename)); + catch (BadImageFormatException ex) { + throw new ApplicationException(string.Format("Could not load assembly {0}. Maybe it's 32-bit or 64-bit only?", filename), ex); } } } diff --git a/AssemblyData/DelegateStringDecrypter.cs b/AssemblyData/DelegateStringDecrypter.cs index 65996f5d..6796ee4d 100644 --- a/AssemblyData/DelegateStringDecrypter.cs +++ b/AssemblyData/DelegateStringDecrypter.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/AssemblyData/EmuStringDecrypter.cs b/AssemblyData/EmuStringDecrypter.cs index 866873b2..12fe5e26 100644 --- a/AssemblyData/EmuStringDecrypter.cs +++ b/AssemblyData/EmuStringDecrypter.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/AssemblyData/GenericService.cs b/AssemblyData/GenericService.cs index a214f024..9b8b9efe 100644 --- a/AssemblyData/GenericService.cs +++ b/AssemblyData/GenericService.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/AssemblyData/IAssemblyService.cs b/AssemblyData/IAssemblyService.cs index b0e1da67..76a6a339 100644 --- a/AssemblyData/IAssemblyService.cs +++ b/AssemblyData/IAssemblyService.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/AssemblyData/IGenericService.cs b/AssemblyData/IGenericService.cs index db4d7a91..7502aa07 100644 --- a/AssemblyData/IGenericService.cs +++ b/AssemblyData/IGenericService.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/AssemblyData/IMethodDecrypterService.cs b/AssemblyData/IMethodDecrypterService.cs index 5ec2b224..6cdb80c1 100644 --- a/AssemblyData/IMethodDecrypterService.cs +++ b/AssemblyData/IMethodDecrypterService.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/AssemblyData/IStringDecrypter.cs b/AssemblyData/IStringDecrypter.cs index 5798c563..8e2fcab2 100644 --- a/AssemblyData/IStringDecrypter.cs +++ b/AssemblyData/IStringDecrypter.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/AssemblyData/IStringDecrypterService.cs b/AssemblyData/IStringDecrypterService.cs index 83ad0c6a..83e73765 100644 --- a/AssemblyData/IStringDecrypterService.cs +++ b/AssemblyData/IStringDecrypterService.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/AssemblyData/IUserGenericService.cs b/AssemblyData/IUserGenericService.cs index 635ae7f6..35417f90 100644 --- a/AssemblyData/IUserGenericService.cs +++ b/AssemblyData/IUserGenericService.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/AssemblyData/MethodDecrypterService.cs b/AssemblyData/MethodDecrypterService.cs index 47c75234..a32a0c1a 100644 --- a/AssemblyData/MethodDecrypterService.cs +++ b/AssemblyData/MethodDecrypterService.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/AssemblyData/Properties/AssemblyInfo.cs b/AssemblyData/Properties/AssemblyInfo.cs index 9a1846a9..c13cb77c 100644 --- a/AssemblyData/Properties/AssemblyInfo.cs +++ b/AssemblyData/Properties/AssemblyInfo.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. @@ -25,9 +25,9 @@ using System.Runtime.InteropServices; [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("")] [assembly: AssemblyProduct("AssemblyData")] -[assembly: AssemblyCopyright("Copyright (C) 2011-2013 de4dot@gmail.com")] +[assembly: AssemblyCopyright("Copyright (C) 2011-2014 de4dot@gmail.com")] [assembly: AssemblyTrademark("")] [assembly: AssemblyCulture("")] [assembly: ComVisible(false)] -[assembly: AssemblyVersion("3.0.2.3405")] -[assembly: AssemblyFileVersion("3.0.2.3405")] +[assembly: AssemblyVersion("3.0.3.3405")] +[assembly: AssemblyFileVersion("3.0.3.3405")] diff --git a/AssemblyData/SimpleData.cs b/AssemblyData/SimpleData.cs index 8f4147d1..29e88f2a 100644 --- a/AssemblyData/SimpleData.cs +++ b/AssemblyData/SimpleData.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/AssemblyData/StringDecrypterService.cs b/AssemblyData/StringDecrypterService.cs index 08c0be43..09f3cc81 100644 --- a/AssemblyData/StringDecrypterService.cs +++ b/AssemblyData/StringDecrypterService.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/AssemblyData/Utils.cs b/AssemblyData/Utils.cs index 470a14b8..8691206a 100644 --- a/AssemblyData/Utils.cs +++ b/AssemblyData/Utils.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/AssemblyData/methodsrewriter/AssemblyResolver.cs b/AssemblyData/methodsrewriter/AssemblyResolver.cs index 37751599..c5ec57be 100644 --- a/AssemblyData/methodsrewriter/AssemblyResolver.cs +++ b/AssemblyData/methodsrewriter/AssemblyResolver.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/AssemblyData/methodsrewriter/CodeGenerator.cs b/AssemblyData/methodsrewriter/CodeGenerator.cs index e8c30846..1bb190c7 100644 --- a/AssemblyData/methodsrewriter/CodeGenerator.cs +++ b/AssemblyData/methodsrewriter/CodeGenerator.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/AssemblyData/methodsrewriter/IMethodsRewriter.cs b/AssemblyData/methodsrewriter/IMethodsRewriter.cs index 5d242629..9e89505b 100644 --- a/AssemblyData/methodsrewriter/IMethodsRewriter.cs +++ b/AssemblyData/methodsrewriter/IMethodsRewriter.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/AssemblyData/methodsrewriter/MField.cs b/AssemblyData/methodsrewriter/MField.cs index 10ccba2c..2c81aeb1 100644 --- a/AssemblyData/methodsrewriter/MField.cs +++ b/AssemblyData/methodsrewriter/MField.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/AssemblyData/methodsrewriter/MMethod.cs b/AssemblyData/methodsrewriter/MMethod.cs index 4818ba7c..94178dd3 100644 --- a/AssemblyData/methodsrewriter/MMethod.cs +++ b/AssemblyData/methodsrewriter/MMethod.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/AssemblyData/methodsrewriter/MModule.cs b/AssemblyData/methodsrewriter/MModule.cs index 5929bff4..bc416892 100644 --- a/AssemblyData/methodsrewriter/MModule.cs +++ b/AssemblyData/methodsrewriter/MModule.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/AssemblyData/methodsrewriter/MType.cs b/AssemblyData/methodsrewriter/MType.cs index 60b2235e..635691f1 100644 --- a/AssemblyData/methodsrewriter/MType.cs +++ b/AssemblyData/methodsrewriter/MType.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/AssemblyData/methodsrewriter/MethodsRewriter.cs b/AssemblyData/methodsrewriter/MethodsRewriter.cs index c37a9ae7..9cceb8b6 100644 --- a/AssemblyData/methodsrewriter/MethodsRewriter.cs +++ b/AssemblyData/methodsrewriter/MethodsRewriter.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/AssemblyData/methodsrewriter/Operand.cs b/AssemblyData/methodsrewriter/Operand.cs index 2e381803..0600ac5f 100644 --- a/AssemblyData/methodsrewriter/Operand.cs +++ b/AssemblyData/methodsrewriter/Operand.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/AssemblyData/methodsrewriter/Resolver.cs b/AssemblyData/methodsrewriter/Resolver.cs index fb48bf3f..718acd29 100644 --- a/AssemblyData/methodsrewriter/Resolver.cs +++ b/AssemblyData/methodsrewriter/Resolver.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/AssemblyData/methodsrewriter/ResolverUtils.cs b/AssemblyData/methodsrewriter/ResolverUtils.cs index cff21337..b1402769 100644 --- a/AssemblyData/methodsrewriter/ResolverUtils.cs +++ b/AssemblyData/methodsrewriter/ResolverUtils.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/AssemblyData/methodsrewriter/TypeInstanceResolver.cs b/AssemblyData/methodsrewriter/TypeInstanceResolver.cs index a9e2de13..b2fe6d6c 100644 --- a/AssemblyData/methodsrewriter/TypeInstanceResolver.cs +++ b/AssemblyData/methodsrewriter/TypeInstanceResolver.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/AssemblyData/methodsrewriter/TypeResolver.cs b/AssemblyData/methodsrewriter/TypeResolver.cs index f209a028..552bef01 100644 --- a/AssemblyData/methodsrewriter/TypeResolver.cs +++ b/AssemblyData/methodsrewriter/TypeResolver.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/AssemblyServer-CLR20-x64/Program.cs b/AssemblyServer-CLR20-x64/Program.cs index b3ede556..1775605d 100644 --- a/AssemblyServer-CLR20-x64/Program.cs +++ b/AssemblyServer-CLR20-x64/Program.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/AssemblyServer-CLR20-x64/Properties/AssemblyInfo.cs b/AssemblyServer-CLR20-x64/Properties/AssemblyInfo.cs index a02dcb49..885556ce 100644 --- a/AssemblyServer-CLR20-x64/Properties/AssemblyInfo.cs +++ b/AssemblyServer-CLR20-x64/Properties/AssemblyInfo.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. @@ -25,9 +25,9 @@ using System.Runtime.InteropServices; [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("")] [assembly: AssemblyProduct("AssemblyServer-CLR20-x64")] -[assembly: AssemblyCopyright("Copyright (C) 2011-2013 de4dot@gmail.com")] +[assembly: AssemblyCopyright("Copyright (C) 2011-2014 de4dot@gmail.com")] [assembly: AssemblyTrademark("")] [assembly: AssemblyCulture("")] [assembly: ComVisible(false)] -[assembly: AssemblyVersion("3.0.2.3405")] -[assembly: AssemblyFileVersion("3.0.2.3405")] +[assembly: AssemblyVersion("3.0.3.3405")] +[assembly: AssemblyFileVersion("3.0.3.3405")] diff --git a/AssemblyServer-CLR20/Program.cs b/AssemblyServer-CLR20/Program.cs index 535460d5..958d2e5f 100644 --- a/AssemblyServer-CLR20/Program.cs +++ b/AssemblyServer-CLR20/Program.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/AssemblyServer-CLR20/Properties/AssemblyInfo.cs b/AssemblyServer-CLR20/Properties/AssemblyInfo.cs index 83599918..ad310d96 100644 --- a/AssemblyServer-CLR20/Properties/AssemblyInfo.cs +++ b/AssemblyServer-CLR20/Properties/AssemblyInfo.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. @@ -25,9 +25,9 @@ using System.Runtime.InteropServices; [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("")] [assembly: AssemblyProduct("AssemblyServer-CLR20")] -[assembly: AssemblyCopyright("Copyright (C) 2011-2013 de4dot@gmail.com")] +[assembly: AssemblyCopyright("Copyright (C) 2011-2014 de4dot@gmail.com")] [assembly: AssemblyTrademark("")] [assembly: AssemblyCulture("")] [assembly: ComVisible(false)] -[assembly: AssemblyVersion("3.0.2.3405")] -[assembly: AssemblyFileVersion("3.0.2.3405")] +[assembly: AssemblyVersion("3.0.3.3405")] +[assembly: AssemblyFileVersion("3.0.3.3405")] diff --git a/AssemblyServer-CLR40-x64/Program.cs b/AssemblyServer-CLR40-x64/Program.cs index 60d617fc..0ad2396a 100644 --- a/AssemblyServer-CLR40-x64/Program.cs +++ b/AssemblyServer-CLR40-x64/Program.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/AssemblyServer-CLR40-x64/Properties/AssemblyInfo.cs b/AssemblyServer-CLR40-x64/Properties/AssemblyInfo.cs index 04c2d642..655bdd3a 100644 --- a/AssemblyServer-CLR40-x64/Properties/AssemblyInfo.cs +++ b/AssemblyServer-CLR40-x64/Properties/AssemblyInfo.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. @@ -25,9 +25,9 @@ using System.Runtime.InteropServices; [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("")] [assembly: AssemblyProduct("AssemblyServer-CLR40-x64")] -[assembly: AssemblyCopyright("Copyright (C) 2011-2013 de4dot@gmail.com")] +[assembly: AssemblyCopyright("Copyright (C) 2011-2014 de4dot@gmail.com")] [assembly: AssemblyTrademark("")] [assembly: AssemblyCulture("")] [assembly: ComVisible(false)] -[assembly: AssemblyVersion("3.0.2.3405")] -[assembly: AssemblyFileVersion("3.0.2.3405")] +[assembly: AssemblyVersion("3.0.3.3405")] +[assembly: AssemblyFileVersion("3.0.3.3405")] diff --git a/AssemblyServer-CLR40/Program.cs b/AssemblyServer-CLR40/Program.cs index bcaa220c..905b4aee 100644 --- a/AssemblyServer-CLR40/Program.cs +++ b/AssemblyServer-CLR40/Program.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/AssemblyServer-CLR40/Properties/AssemblyInfo.cs b/AssemblyServer-CLR40/Properties/AssemblyInfo.cs index d3feeec2..953e469f 100644 --- a/AssemblyServer-CLR40/Properties/AssemblyInfo.cs +++ b/AssemblyServer-CLR40/Properties/AssemblyInfo.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. @@ -25,9 +25,9 @@ using System.Runtime.InteropServices; [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("")] [assembly: AssemblyProduct("AssemblyServer-CLR40")] -[assembly: AssemblyCopyright("Copyright (C) 2011-2013 de4dot@gmail.com")] +[assembly: AssemblyCopyright("Copyright (C) 2011-2014 de4dot@gmail.com")] [assembly: AssemblyTrademark("")] [assembly: AssemblyCulture("")] [assembly: ComVisible(false)] -[assembly: AssemblyVersion("3.0.2.3405")] -[assembly: AssemblyFileVersion("3.0.2.3405")] +[assembly: AssemblyVersion("3.0.3.3405")] +[assembly: AssemblyFileVersion("3.0.3.3405")] diff --git a/AssemblyServer-x64/Program.cs b/AssemblyServer-x64/Program.cs index 0ee64169..36611703 100644 --- a/AssemblyServer-x64/Program.cs +++ b/AssemblyServer-x64/Program.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/AssemblyServer-x64/Properties/AssemblyInfo.cs b/AssemblyServer-x64/Properties/AssemblyInfo.cs index b799795f..76ca6b81 100644 --- a/AssemblyServer-x64/Properties/AssemblyInfo.cs +++ b/AssemblyServer-x64/Properties/AssemblyInfo.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. @@ -25,9 +25,9 @@ using System.Runtime.InteropServices; [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("")] [assembly: AssemblyProduct("AssemblyServer-x64")] -[assembly: AssemblyCopyright("Copyright (C) 2011-2013 de4dot@gmail.com")] +[assembly: AssemblyCopyright("Copyright (C) 2011-2014 de4dot@gmail.com")] [assembly: AssemblyTrademark("")] [assembly: AssemblyCulture("")] [assembly: ComVisible(false)] -[assembly: AssemblyVersion("3.0.2.3405")] -[assembly: AssemblyFileVersion("3.0.2.3405")] +[assembly: AssemblyVersion("3.0.3.3405")] +[assembly: AssemblyFileVersion("3.0.3.3405")] diff --git a/AssemblyServer/Program.cs b/AssemblyServer/Program.cs index 13075930..bb22fd7a 100644 --- a/AssemblyServer/Program.cs +++ b/AssemblyServer/Program.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/AssemblyServer/Properties/AssemblyInfo.cs b/AssemblyServer/Properties/AssemblyInfo.cs index 460521ea..f3040761 100644 --- a/AssemblyServer/Properties/AssemblyInfo.cs +++ b/AssemblyServer/Properties/AssemblyInfo.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. @@ -25,9 +25,9 @@ using System.Runtime.InteropServices; [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("")] [assembly: AssemblyProduct("AssemblyServer")] -[assembly: AssemblyCopyright("Copyright (C) 2011-2013 de4dot@gmail.com")] +[assembly: AssemblyCopyright("Copyright (C) 2011-2014 de4dot@gmail.com")] [assembly: AssemblyTrademark("")] [assembly: AssemblyCulture("")] [assembly: ComVisible(false)] -[assembly: AssemblyVersion("3.0.2.3405")] -[assembly: AssemblyFileVersion("3.0.2.3405")] +[assembly: AssemblyVersion("3.0.3.3405")] +[assembly: AssemblyFileVersion("3.0.3.3405")] diff --git a/LICENSE.de4dot.txt b/LICENSE.de4dot.txt index 84079eda..7f5a9468 100644 --- a/LICENSE.de4dot.txt +++ b/LICENSE.de4dot.txt @@ -1,5 +1,5 @@ - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/LICENSE.dnlib.txt b/LICENSE.dnlib.txt index 870ec190..aafeb7bc 100644 --- a/LICENSE.dnlib.txt +++ b/LICENSE.dnlib.txt @@ -1,5 +1,5 @@ - Copyright (C) 2012-2013 de4dot@gmail.com + Copyright (C) 2012-2014 de4dot@gmail.com Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the diff --git a/Test.Rename.Dll/Properties/AssemblyInfo.cs b/Test.Rename.Dll/Properties/AssemblyInfo.cs index 3ce8ff50..c469fe85 100644 --- a/Test.Rename.Dll/Properties/AssemblyInfo.cs +++ b/Test.Rename.Dll/Properties/AssemblyInfo.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. @@ -25,9 +25,9 @@ using System.Runtime.InteropServices; [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("")] [assembly: AssemblyProduct("Test.Rename.Dll")] -[assembly: AssemblyCopyright("Copyright (C) 2011-2013 de4dot@gmail.com")] +[assembly: AssemblyCopyright("Copyright (C) 2011-2014 de4dot@gmail.com")] [assembly: AssemblyTrademark("")] [assembly: AssemblyCulture("")] [assembly: ComVisible(false)] -[assembly: AssemblyVersion("3.0.2.3405")] -[assembly: AssemblyFileVersion("3.0.2.3405")] +[assembly: AssemblyVersion("3.0.3.3405")] +[assembly: AssemblyFileVersion("3.0.3.3405")] diff --git a/Test.Rename.Dll/Tests.cs b/Test.Rename.Dll/Tests.cs index aaf45d3b..c7761300 100644 --- a/Test.Rename.Dll/Tests.cs +++ b/Test.Rename.Dll/Tests.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/Test.Rename/Program.cs b/Test.Rename/Program.cs index 0dd6eb15..4e3417e1 100644 --- a/Test.Rename/Program.cs +++ b/Test.Rename/Program.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/Test.Rename/Properties/AssemblyInfo.cs b/Test.Rename/Properties/AssemblyInfo.cs index 676d6953..0b60d049 100644 --- a/Test.Rename/Properties/AssemblyInfo.cs +++ b/Test.Rename/Properties/AssemblyInfo.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. @@ -25,9 +25,9 @@ using System.Runtime.InteropServices; [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("")] [assembly: AssemblyProduct("Test.Rename")] -[assembly: AssemblyCopyright("Copyright (C) 2011-2013 de4dot@gmail.com")] +[assembly: AssemblyCopyright("Copyright (C) 2011-2014 de4dot@gmail.com")] [assembly: AssemblyTrademark("")] [assembly: AssemblyCulture("")] [assembly: ComVisible(false)] -[assembly: AssemblyVersion("3.0.2.3405")] -[assembly: AssemblyFileVersion("3.0.2.3405")] +[assembly: AssemblyVersion("3.0.3.3405")] +[assembly: AssemblyFileVersion("3.0.3.3405")] diff --git a/de4dot-x64/Program.cs b/de4dot-x64/Program.cs index c94d19d2..445a281c 100644 --- a/de4dot-x64/Program.cs +++ b/de4dot-x64/Program.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot-x64/Properties/AssemblyInfo.cs b/de4dot-x64/Properties/AssemblyInfo.cs index b395d652..13667790 100644 --- a/de4dot-x64/Properties/AssemblyInfo.cs +++ b/de4dot-x64/Properties/AssemblyInfo.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. @@ -25,9 +25,9 @@ using System.Runtime.InteropServices; [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("")] [assembly: AssemblyProduct("de4dot-x64")] -[assembly: AssemblyCopyright("Copyright (C) 2011-2013 de4dot@gmail.com")] +[assembly: AssemblyCopyright("Copyright (C) 2011-2014 de4dot@gmail.com")] [assembly: AssemblyTrademark("")] [assembly: AssemblyCulture("")] [assembly: ComVisible(false)] -[assembly: AssemblyVersion("3.0.2.3405")] -[assembly: AssemblyFileVersion("3.0.2.3405")] +[assembly: AssemblyVersion("3.0.3.3405")] +[assembly: AssemblyFileVersion("3.0.3.3405")] diff --git a/de4dot.blocks/BaseBlock.cs b/de4dot.blocks/BaseBlock.cs index 9f06eb47..8974750d 100644 --- a/de4dot.blocks/BaseBlock.cs +++ b/de4dot.blocks/BaseBlock.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.blocks/Block.cs b/de4dot.blocks/Block.cs index 7abf41f9..e7a3a67a 100644 --- a/de4dot.blocks/Block.cs +++ b/de4dot.blocks/Block.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.blocks/Blocks.cs b/de4dot.blocks/Blocks.cs index 3f507636..1e9583c2 100644 --- a/de4dot.blocks/Blocks.cs +++ b/de4dot.blocks/Blocks.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.blocks/BlocksSorter.cs b/de4dot.blocks/BlocksSorter.cs index 484f8f1c..a70a7b10 100644 --- a/de4dot.blocks/BlocksSorter.cs +++ b/de4dot.blocks/BlocksSorter.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.blocks/CodeGenerator.cs b/de4dot.blocks/CodeGenerator.cs index 09a822b4..7c8a96b3 100644 --- a/de4dot.blocks/CodeGenerator.cs +++ b/de4dot.blocks/CodeGenerator.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.blocks/DeadBlocksRemover.cs b/de4dot.blocks/DeadBlocksRemover.cs index b89836b4..bf9718bb 100644 --- a/de4dot.blocks/DeadBlocksRemover.cs +++ b/de4dot.blocks/DeadBlocksRemover.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.blocks/DotNetUtils.cs b/de4dot.blocks/DotNetUtils.cs index 55ba7276..89bd176d 100644 --- a/de4dot.blocks/DotNetUtils.cs +++ b/de4dot.blocks/DotNetUtils.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.blocks/DumpedMethod.cs b/de4dot.blocks/DumpedMethod.cs index d04f934e..b6aa81b4 100644 --- a/de4dot.blocks/DumpedMethod.cs +++ b/de4dot.blocks/DumpedMethod.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.blocks/DumpedMethods.cs b/de4dot.blocks/DumpedMethods.cs index 60a1e025..e6dd88ae 100644 --- a/de4dot.blocks/DumpedMethods.cs +++ b/de4dot.blocks/DumpedMethods.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.blocks/FilterHandlerBlock.cs b/de4dot.blocks/FilterHandlerBlock.cs index b2a3cfaf..8c1f1493 100644 --- a/de4dot.blocks/FilterHandlerBlock.cs +++ b/de4dot.blocks/FilterHandlerBlock.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.blocks/ForwardScanOrder.cs b/de4dot.blocks/ForwardScanOrder.cs index a2029955..20de9c41 100644 --- a/de4dot.blocks/ForwardScanOrder.cs +++ b/de4dot.blocks/ForwardScanOrder.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.blocks/GenericArgsSubstitutor.cs b/de4dot.blocks/GenericArgsSubstitutor.cs index c3eb01a2..17d83e66 100644 --- a/de4dot.blocks/GenericArgsSubstitutor.cs +++ b/de4dot.blocks/GenericArgsSubstitutor.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.blocks/HandlerBlock.cs b/de4dot.blocks/HandlerBlock.cs index 51534d8c..9cbce2ff 100644 --- a/de4dot.blocks/HandlerBlock.cs +++ b/de4dot.blocks/HandlerBlock.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.blocks/Instr.cs b/de4dot.blocks/Instr.cs index 6e166945..7b8444ac 100644 --- a/de4dot.blocks/Instr.cs +++ b/de4dot.blocks/Instr.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.blocks/InstructionListParser.cs b/de4dot.blocks/InstructionListParser.cs index b0f5ac6c..1d1bdc5f 100644 --- a/de4dot.blocks/InstructionListParser.cs +++ b/de4dot.blocks/InstructionListParser.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.blocks/MemberDefDict.cs b/de4dot.blocks/MemberDefDict.cs index ce02d4be..85c4f273 100644 --- a/de4dot.blocks/MemberDefDict.cs +++ b/de4dot.blocks/MemberDefDict.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.blocks/MethodBlocks.cs b/de4dot.blocks/MethodBlocks.cs index a58e1a08..761a8c25 100644 --- a/de4dot.blocks/MethodBlocks.cs +++ b/de4dot.blocks/MethodBlocks.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.blocks/Properties/AssemblyInfo.cs b/de4dot.blocks/Properties/AssemblyInfo.cs index 42bf3449..b05b48f5 100644 --- a/de4dot.blocks/Properties/AssemblyInfo.cs +++ b/de4dot.blocks/Properties/AssemblyInfo.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. @@ -25,9 +25,9 @@ using System.Runtime.InteropServices; [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("")] [assembly: AssemblyProduct("de4dot.blocks")] -[assembly: AssemblyCopyright("Copyright (C) 2011-2013 de4dot@gmail.com")] +[assembly: AssemblyCopyright("Copyright (C) 2011-2014 de4dot@gmail.com")] [assembly: AssemblyTrademark("")] [assembly: AssemblyCulture("")] [assembly: ComVisible(false)] -[assembly: AssemblyVersion("3.0.2.3405")] -[assembly: AssemblyFileVersion("3.0.2.3405")] +[assembly: AssemblyVersion("3.0.3.3405")] +[assembly: AssemblyFileVersion("3.0.3.3405")] diff --git a/de4dot.blocks/ScopeBlock.cs b/de4dot.blocks/ScopeBlock.cs index 952cc155..dbaaa058 100644 --- a/de4dot.blocks/ScopeBlock.cs +++ b/de4dot.blocks/ScopeBlock.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.blocks/StackTracePatcher.cs b/de4dot.blocks/StackTracePatcher.cs index 1d4334f7..932a905a 100644 --- a/de4dot.blocks/StackTracePatcher.cs +++ b/de4dot.blocks/StackTracePatcher.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.blocks/TryBlock.cs b/de4dot.blocks/TryBlock.cs index a1ac3246..f9fae54a 100644 --- a/de4dot.blocks/TryBlock.cs +++ b/de4dot.blocks/TryBlock.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.blocks/TryHandlerBlock.cs b/de4dot.blocks/TryHandlerBlock.cs index 906ceaf5..588beae2 100644 --- a/de4dot.blocks/TryHandlerBlock.cs +++ b/de4dot.blocks/TryHandlerBlock.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.blocks/Utils.cs b/de4dot.blocks/Utils.cs index 80cb953d..e8bb49fa 100644 --- a/de4dot.blocks/Utils.cs +++ b/de4dot.blocks/Utils.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.blocks/cflow/BlockCflowDeobfuscator.cs b/de4dot.blocks/cflow/BlockCflowDeobfuscator.cs index 3bc44f1f..50bb9489 100644 --- a/de4dot.blocks/cflow/BlockCflowDeobfuscator.cs +++ b/de4dot.blocks/cflow/BlockCflowDeobfuscator.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.blocks/cflow/BlockDeobfuscator.cs b/de4dot.blocks/cflow/BlockDeobfuscator.cs index 777f2d33..0ad0f995 100644 --- a/de4dot.blocks/cflow/BlockDeobfuscator.cs +++ b/de4dot.blocks/cflow/BlockDeobfuscator.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.blocks/cflow/BlocksCflowDeobfuscator.cs b/de4dot.blocks/cflow/BlocksCflowDeobfuscator.cs index c2a6cd99..61f008c4 100644 --- a/de4dot.blocks/cflow/BlocksCflowDeobfuscator.cs +++ b/de4dot.blocks/cflow/BlocksCflowDeobfuscator.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.blocks/cflow/BranchEmulator.cs b/de4dot.blocks/cflow/BranchEmulator.cs index f71e1d2d..3e3f71a1 100644 --- a/de4dot.blocks/cflow/BranchEmulator.cs +++ b/de4dot.blocks/cflow/BranchEmulator.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.blocks/cflow/CachedCflowDeobfuscator.cs b/de4dot.blocks/cflow/CachedCflowDeobfuscator.cs index 4cb373a2..2100ed2f 100644 --- a/de4dot.blocks/cflow/CachedCflowDeobfuscator.cs +++ b/de4dot.blocks/cflow/CachedCflowDeobfuscator.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.blocks/cflow/CflowDeobfuscator.cs b/de4dot.blocks/cflow/CflowDeobfuscator.cs index de24048a..630ac654 100644 --- a/de4dot.blocks/cflow/CflowDeobfuscator.cs +++ b/de4dot.blocks/cflow/CflowDeobfuscator.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.blocks/cflow/CflowUtils.cs b/de4dot.blocks/cflow/CflowUtils.cs index 401f75d1..4957bd1a 100644 --- a/de4dot.blocks/cflow/CflowUtils.cs +++ b/de4dot.blocks/cflow/CflowUtils.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.blocks/cflow/ConstantsFolder.cs b/de4dot.blocks/cflow/ConstantsFolder.cs index 9a600dfa..a740fa45 100644 --- a/de4dot.blocks/cflow/ConstantsFolder.cs +++ b/de4dot.blocks/cflow/ConstantsFolder.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.blocks/cflow/DeadCodeRemover.cs b/de4dot.blocks/cflow/DeadCodeRemover.cs index e882b679..0b2fd742 100644 --- a/de4dot.blocks/cflow/DeadCodeRemover.cs +++ b/de4dot.blocks/cflow/DeadCodeRemover.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.blocks/cflow/DeadStoreRemover.cs b/de4dot.blocks/cflow/DeadStoreRemover.cs index d0886837..beb43c00 100644 --- a/de4dot.blocks/cflow/DeadStoreRemover.cs +++ b/de4dot.blocks/cflow/DeadStoreRemover.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.blocks/cflow/DupBlockDeobfuscator.cs b/de4dot.blocks/cflow/DupBlockDeobfuscator.cs index 7060ea2e..eee0d3f1 100644 --- a/de4dot.blocks/cflow/DupBlockDeobfuscator.cs +++ b/de4dot.blocks/cflow/DupBlockDeobfuscator.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.blocks/cflow/IBlocksDeobfuscator.cs b/de4dot.blocks/cflow/IBlocksDeobfuscator.cs index 5d08607a..0a0b5860 100644 --- a/de4dot.blocks/cflow/IBlocksDeobfuscator.cs +++ b/de4dot.blocks/cflow/IBlocksDeobfuscator.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.blocks/cflow/ICflowDeobfuscator.cs b/de4dot.blocks/cflow/ICflowDeobfuscator.cs index 9f2358de..b4f06437 100644 --- a/de4dot.blocks/cflow/ICflowDeobfuscator.cs +++ b/de4dot.blocks/cflow/ICflowDeobfuscator.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.blocks/cflow/InstructionEmulator.cs b/de4dot.blocks/cflow/InstructionEmulator.cs index a829d02a..f42bdff6 100644 --- a/de4dot.blocks/cflow/InstructionEmulator.cs +++ b/de4dot.blocks/cflow/InstructionEmulator.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.blocks/cflow/Int32Value.cs b/de4dot.blocks/cflow/Int32Value.cs index bb838288..0fb8d400 100644 --- a/de4dot.blocks/cflow/Int32Value.cs +++ b/de4dot.blocks/cflow/Int32Value.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.blocks/cflow/Int64Value.cs b/de4dot.blocks/cflow/Int64Value.cs index 48a236e3..2ead373c 100644 --- a/de4dot.blocks/cflow/Int64Value.cs +++ b/de4dot.blocks/cflow/Int64Value.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.blocks/cflow/MethodCallInliner.cs b/de4dot.blocks/cflow/MethodCallInliner.cs index 4265e706..effe991a 100644 --- a/de4dot.blocks/cflow/MethodCallInliner.cs +++ b/de4dot.blocks/cflow/MethodCallInliner.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.blocks/cflow/MethodCallInlinerBase.cs b/de4dot.blocks/cflow/MethodCallInlinerBase.cs index d8ed9247..25224048 100644 --- a/de4dot.blocks/cflow/MethodCallInlinerBase.cs +++ b/de4dot.blocks/cflow/MethodCallInlinerBase.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.blocks/cflow/Real8Value.cs b/de4dot.blocks/cflow/Real8Value.cs index 5087046d..77206e5a 100644 --- a/de4dot.blocks/cflow/Real8Value.cs +++ b/de4dot.blocks/cflow/Real8Value.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.blocks/cflow/StLdlocFixer.cs b/de4dot.blocks/cflow/StLdlocFixer.cs index 2476b13f..9496ba6a 100644 --- a/de4dot.blocks/cflow/StLdlocFixer.cs +++ b/de4dot.blocks/cflow/StLdlocFixer.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.blocks/cflow/SwitchCflowDeobfuscator.cs b/de4dot.blocks/cflow/SwitchCflowDeobfuscator.cs index abec82b8..2bc3f166 100644 --- a/de4dot.blocks/cflow/SwitchCflowDeobfuscator.cs +++ b/de4dot.blocks/cflow/SwitchCflowDeobfuscator.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.blocks/cflow/Value.cs b/de4dot.blocks/cflow/Value.cs index bbb54a8c..455b46ad 100644 --- a/de4dot.blocks/cflow/Value.cs +++ b/de4dot.blocks/cflow/Value.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.blocks/cflow/ValueStack.cs b/de4dot.blocks/cflow/ValueStack.cs index d301d043..b8f7362d 100644 --- a/de4dot.blocks/cflow/ValueStack.cs +++ b/de4dot.blocks/cflow/ValueStack.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.code/AssemblyClient/AssemblyClient.cs b/de4dot.code/AssemblyClient/AssemblyClient.cs index b6a01103..83e7a3c5 100644 --- a/de4dot.code/AssemblyClient/AssemblyClient.cs +++ b/de4dot.code/AssemblyClient/AssemblyClient.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.code/AssemblyClient/AssemblyClientFactory.cs b/de4dot.code/AssemblyClient/AssemblyClientFactory.cs index 83a1967b..fcc4b60c 100644 --- a/de4dot.code/AssemblyClient/AssemblyClientFactory.cs +++ b/de4dot.code/AssemblyClient/AssemblyClientFactory.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.code/AssemblyClient/IAssemblyClient.cs b/de4dot.code/AssemblyClient/IAssemblyClient.cs index 1b7a2547..926e0109 100644 --- a/de4dot.code/AssemblyClient/IAssemblyClient.cs +++ b/de4dot.code/AssemblyClient/IAssemblyClient.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.code/AssemblyClient/IAssemblyServerLoader.cs b/de4dot.code/AssemblyClient/IAssemblyServerLoader.cs index 958c8f1e..72dff479 100644 --- a/de4dot.code/AssemblyClient/IAssemblyServerLoader.cs +++ b/de4dot.code/AssemblyClient/IAssemblyServerLoader.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.code/AssemblyClient/IpcAssemblyServerLoader.cs b/de4dot.code/AssemblyClient/IpcAssemblyServerLoader.cs index f2af1232..d1388330 100644 --- a/de4dot.code/AssemblyClient/IpcAssemblyServerLoader.cs +++ b/de4dot.code/AssemblyClient/IpcAssemblyServerLoader.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.code/AssemblyClient/NewAppDomainAssemblyServerLoader.cs b/de4dot.code/AssemblyClient/NewAppDomainAssemblyServerLoader.cs index f7521663..ffdbff3b 100644 --- a/de4dot.code/AssemblyClient/NewAppDomainAssemblyServerLoader.cs +++ b/de4dot.code/AssemblyClient/NewAppDomainAssemblyServerLoader.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.code/AssemblyClient/NewProcessAssemblyServerLoader.cs b/de4dot.code/AssemblyClient/NewProcessAssemblyServerLoader.cs index 9aa00537..9cc22b03 100644 --- a/de4dot.code/AssemblyClient/NewProcessAssemblyServerLoader.cs +++ b/de4dot.code/AssemblyClient/NewProcessAssemblyServerLoader.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.code/AssemblyClient/SameAppDomainAssemblyServerLoader.cs b/de4dot.code/AssemblyClient/SameAppDomainAssemblyServerLoader.cs index 8cd8096b..f999309c 100644 --- a/de4dot.code/AssemblyClient/SameAppDomainAssemblyServerLoader.cs +++ b/de4dot.code/AssemblyClient/SameAppDomainAssemblyServerLoader.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.code/AssemblyModule.cs b/de4dot.code/AssemblyModule.cs index e303a0c7..62c4f2a7 100644 --- a/de4dot.code/AssemblyModule.cs +++ b/de4dot.code/AssemblyModule.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.code/AssemblyResolver.cs b/de4dot.code/AssemblyResolver.cs index 717f6601..6f7656fc 100644 --- a/de4dot.code/AssemblyResolver.cs +++ b/de4dot.code/AssemblyResolver.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.code/DeobfuscatorContext.cs b/de4dot.code/DeobfuscatorContext.cs index 2d7e85a2..352d049e 100644 --- a/de4dot.code/DeobfuscatorContext.cs +++ b/de4dot.code/DeobfuscatorContext.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.code/DumpedMethodsRestorer.cs b/de4dot.code/DumpedMethodsRestorer.cs index a1cb5bfa..ffd17f25 100644 --- a/de4dot.code/DumpedMethodsRestorer.cs +++ b/de4dot.code/DumpedMethodsRestorer.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.code/HandleProcessCorruptedStateExceptionsAttribute.cs b/de4dot.code/HandleProcessCorruptedStateExceptionsAttribute.cs index 35fa3230..08f278be 100644 --- a/de4dot.code/HandleProcessCorruptedStateExceptionsAttribute.cs +++ b/de4dot.code/HandleProcessCorruptedStateExceptionsAttribute.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.code/IDeobfuscatorContext.cs b/de4dot.code/IDeobfuscatorContext.cs index ceb4d96b..d0dad4af 100644 --- a/de4dot.code/IDeobfuscatorContext.cs +++ b/de4dot.code/IDeobfuscatorContext.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.code/IObfuscatedFile.cs b/de4dot.code/IObfuscatedFile.cs index 5d070dc7..cb66bce6 100644 --- a/de4dot.code/IObfuscatedFile.cs +++ b/de4dot.code/IObfuscatedFile.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.code/Logger.cs b/de4dot.code/Logger.cs index d6260709..098d21ff 100644 --- a/de4dot.code/Logger.cs +++ b/de4dot.code/Logger.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.code/MethodPrinter.cs b/de4dot.code/MethodPrinter.cs index 98b54777..5fb7a41d 100644 --- a/de4dot.code/MethodPrinter.cs +++ b/de4dot.code/MethodPrinter.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.code/MethodReturnValueInliner.cs b/de4dot.code/MethodReturnValueInliner.cs index 20b2079d..e955fa26 100644 --- a/de4dot.code/MethodReturnValueInliner.cs +++ b/de4dot.code/MethodReturnValueInliner.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.code/NameRegexes.cs b/de4dot.code/NameRegexes.cs index d98572d6..f1e5035b 100644 --- a/de4dot.code/NameRegexes.cs +++ b/de4dot.code/NameRegexes.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.code/ObfuscatedFile.cs b/de4dot.code/ObfuscatedFile.cs index e613f31b..817fee3f 100644 --- a/de4dot.code/ObfuscatedFile.cs +++ b/de4dot.code/ObfuscatedFile.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. @@ -595,9 +595,6 @@ namespace de4dot.code { try { Deobfuscate(method, cflowDeobfuscator, methodPrinter, isVerbose, isVV); } - catch (ApplicationException) { - throw; - } catch (Exception ex) { if (!CanLoadMethodBody(method)) { if (isVerbose) diff --git a/de4dot.code/Option.cs b/de4dot.code/Option.cs index 5ee4e6fd..085881e8 100644 --- a/de4dot.code/Option.cs +++ b/de4dot.code/Option.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.code/PrintNewTokens.cs b/de4dot.code/PrintNewTokens.cs index 0ff4308a..060901c7 100644 --- a/de4dot.code/PrintNewTokens.cs +++ b/de4dot.code/PrintNewTokens.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.code/Properties/AssemblyInfo.cs b/de4dot.code/Properties/AssemblyInfo.cs index 4f35a9b1..84584d69 100644 --- a/de4dot.code/Properties/AssemblyInfo.cs +++ b/de4dot.code/Properties/AssemblyInfo.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. @@ -25,9 +25,9 @@ using System.Runtime.InteropServices; [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("")] [assembly: AssemblyProduct("de4dot.code")] -[assembly: AssemblyCopyright("Copyright (C) 2011-2013 de4dot@gmail.com")] +[assembly: AssemblyCopyright("Copyright (C) 2011-2014 de4dot@gmail.com")] [assembly: AssemblyTrademark("")] [assembly: AssemblyCulture("")] [assembly: ComVisible(false)] -[assembly: AssemblyVersion("3.0.2.3405")] -[assembly: AssemblyFileVersion("3.0.2.3405")] +[assembly: AssemblyVersion("3.0.3.3405")] +[assembly: AssemblyFileVersion("3.0.3.3405")] diff --git a/de4dot.code/StringInliner.cs b/de4dot.code/StringInliner.cs index ac77dc02..d280203f 100644 --- a/de4dot.code/StringInliner.cs +++ b/de4dot.code/StringInliner.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.code/UserException.cs b/de4dot.code/UserException.cs index 4f8910a0..9c3e7c77 100644 --- a/de4dot.code/UserException.cs +++ b/de4dot.code/UserException.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.code/Utils.cs b/de4dot.code/Utils.cs index d0a44dbe..b7b65400 100644 --- a/de4dot.code/Utils.cs +++ b/de4dot.code/Utils.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.code/Win32Path.cs b/de4dot.code/Win32Path.cs index a2514b40..e0bc30b0 100644 --- a/de4dot.code/Win32Path.cs +++ b/de4dot.code/Win32Path.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.code/de4dot.code.csproj b/de4dot.code/de4dot.code.csproj index 838aef16..4787d149 100644 --- a/de4dot.code/de4dot.code.csproj +++ b/de4dot.code/de4dot.code.csproj @@ -95,12 +95,10 @@ - - - + diff --git a/de4dot.code/deobfuscators/Agile_NET/CliSecureRtType.cs b/de4dot.code/deobfuscators/Agile_NET/CliSecureRtType.cs index 3eb06f57..391869e3 100644 --- a/de4dot.code/deobfuscators/Agile_NET/CliSecureRtType.cs +++ b/de4dot.code/deobfuscators/Agile_NET/CliSecureRtType.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.code/deobfuscators/Agile_NET/CsBlowfish.cs b/de4dot.code/deobfuscators/Agile_NET/CsBlowfish.cs index e44cf195..891b50b4 100644 --- a/de4dot.code/deobfuscators/Agile_NET/CsBlowfish.cs +++ b/de4dot.code/deobfuscators/Agile_NET/CsBlowfish.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.code/deobfuscators/Agile_NET/Deobfuscator.cs b/de4dot.code/deobfuscators/Agile_NET/Deobfuscator.cs index 7c7df3fd..fd577753 100644 --- a/de4dot.code/deobfuscators/Agile_NET/Deobfuscator.cs +++ b/de4dot.code/deobfuscators/Agile_NET/Deobfuscator.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.code/deobfuscators/Agile_NET/MethodsDecrypter.cs b/de4dot.code/deobfuscators/Agile_NET/MethodsDecrypter.cs index b431aeff..3f0891e0 100644 --- a/de4dot.code/deobfuscators/Agile_NET/MethodsDecrypter.cs +++ b/de4dot.code/deobfuscators/Agile_NET/MethodsDecrypter.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.code/deobfuscators/Agile_NET/ProxyCallFixer.cs b/de4dot.code/deobfuscators/Agile_NET/ProxyCallFixer.cs index d3de46d9..a3a7d8c9 100644 --- a/de4dot.code/deobfuscators/Agile_NET/ProxyCallFixer.cs +++ b/de4dot.code/deobfuscators/Agile_NET/ProxyCallFixer.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.code/deobfuscators/Agile_NET/ResourceDecrypter.cs b/de4dot.code/deobfuscators/Agile_NET/ResourceDecrypter.cs index 53f5a9b2..c696f508 100644 --- a/de4dot.code/deobfuscators/Agile_NET/ResourceDecrypter.cs +++ b/de4dot.code/deobfuscators/Agile_NET/ResourceDecrypter.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.code/deobfuscators/Agile_NET/StackFrameHelper.cs b/de4dot.code/deobfuscators/Agile_NET/StackFrameHelper.cs index a40d4290..03f8bd1e 100644 --- a/de4dot.code/deobfuscators/Agile_NET/StackFrameHelper.cs +++ b/de4dot.code/deobfuscators/Agile_NET/StackFrameHelper.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.code/deobfuscators/Agile_NET/StringDecrypter.cs b/de4dot.code/deobfuscators/Agile_NET/StringDecrypter.cs index b13cbea0..91bf919f 100644 --- a/de4dot.code/deobfuscators/Agile_NET/StringDecrypter.cs +++ b/de4dot.code/deobfuscators/Agile_NET/StringDecrypter.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.code/deobfuscators/Agile_NET/vm/CilOperandInstructionRestorer.cs b/de4dot.code/deobfuscators/Agile_NET/vm/CilOperandInstructionRestorer.cs index 4df28e4c..2843cd09 100644 --- a/de4dot.code/deobfuscators/Agile_NET/vm/CilOperandInstructionRestorer.cs +++ b/de4dot.code/deobfuscators/Agile_NET/vm/CilOperandInstructionRestorer.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. @@ -53,6 +53,8 @@ namespace de4dot.code.deobfuscators.Agile_NET.vm { newOpCode = OpCodes.Ldelem_Ref; else { switch (operandTypeTmp.ElementType) { + case ElementType.Boolean: newOpCode = OpCodes.Ldelem_I1; break; + case ElementType.Char: newOpCode = OpCodes.Ldelem_U2; break; case ElementType.I: newOpCode = OpCodes.Ldelem_I; break; case ElementType.I1: newOpCode = OpCodes.Ldelem_I1; break; case ElementType.I2: newOpCode = OpCodes.Ldelem_I2; break; @@ -82,8 +84,10 @@ namespace de4dot.code.deobfuscators.Agile_NET.vm { switch (operandTypeTmp.ElementType) { case ElementType.U: case ElementType.I: newOpCode = OpCodes.Stelem_I; break; + case ElementType.Boolean: case ElementType.U1: case ElementType.I1: newOpCode = OpCodes.Stelem_I1; break; + case ElementType.Char: case ElementType.U2: case ElementType.I2: newOpCode = OpCodes.Stelem_I2; break; case ElementType.U4: diff --git a/de4dot.code/deobfuscators/Agile_NET/vm/CsvmDataReader.cs b/de4dot.code/deobfuscators/Agile_NET/vm/CsvmDataReader.cs index 60e810f5..5d844cdc 100644 --- a/de4dot.code/deobfuscators/Agile_NET/vm/CsvmDataReader.cs +++ b/de4dot.code/deobfuscators/Agile_NET/vm/CsvmDataReader.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.code/deobfuscators/Agile_NET/vm/CsvmMethodData.cs b/de4dot.code/deobfuscators/Agile_NET/vm/CsvmMethodData.cs index 0e67d178..11a376ca 100644 --- a/de4dot.code/deobfuscators/Agile_NET/vm/CsvmMethodData.cs +++ b/de4dot.code/deobfuscators/Agile_NET/vm/CsvmMethodData.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.code/deobfuscators/Agile_NET/vm/CsvmToCilMethodConverterBase.cs b/de4dot.code/deobfuscators/Agile_NET/vm/CsvmToCilMethodConverterBase.cs index 00757dab..b9726049 100644 --- a/de4dot.code/deobfuscators/Agile_NET/vm/CsvmToCilMethodConverterBase.cs +++ b/de4dot.code/deobfuscators/Agile_NET/vm/CsvmToCilMethodConverterBase.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.code/deobfuscators/Agile_NET/vm/VmOperand.cs b/de4dot.code/deobfuscators/Agile_NET/vm/VmOperand.cs index 03cde6c4..5163cbd3 100644 --- a/de4dot.code/deobfuscators/Agile_NET/vm/VmOperand.cs +++ b/de4dot.code/deobfuscators/Agile_NET/vm/VmOperand.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.code/deobfuscators/Agile_NET/vm/v1/Csvm.cs b/de4dot.code/deobfuscators/Agile_NET/vm/v1/Csvm.cs index 91339051..46f52f30 100644 --- a/de4dot.code/deobfuscators/Agile_NET/vm/v1/Csvm.cs +++ b/de4dot.code/deobfuscators/Agile_NET/vm/v1/Csvm.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. @@ -112,6 +112,7 @@ namespace de4dot.code.deobfuscators.Agile_NET.vm.v1 { PrintMethod(methodPrinter, cilMethod); } Logger.Instance.DeIndent(); + Logger.n("Restored {0} CSVM methods", csvmMethods.Count); } static void PrintMethod(MethodPrinter methodPrinter, MethodDef method) { diff --git a/de4dot.code/deobfuscators/Agile_NET/vm/v1/CsvmToCilMethodConverter.cs b/de4dot.code/deobfuscators/Agile_NET/vm/v1/CsvmToCilMethodConverter.cs index 93516c18..ac039506 100644 --- a/de4dot.code/deobfuscators/Agile_NET/vm/v1/CsvmToCilMethodConverter.cs +++ b/de4dot.code/deobfuscators/Agile_NET/vm/v1/CsvmToCilMethodConverter.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.code/deobfuscators/Agile_NET/vm/v1/FieldsInfo.cs b/de4dot.code/deobfuscators/Agile_NET/vm/v1/FieldsInfo.cs index 875d349d..7cb6ed27 100644 --- a/de4dot.code/deobfuscators/Agile_NET/vm/v1/FieldsInfo.cs +++ b/de4dot.code/deobfuscators/Agile_NET/vm/v1/FieldsInfo.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.code/deobfuscators/Agile_NET/vm/v1/OpCodeHandler.cs b/de4dot.code/deobfuscators/Agile_NET/vm/v1/OpCodeHandler.cs index 9c572780..81475049 100644 --- a/de4dot.code/deobfuscators/Agile_NET/vm/v1/OpCodeHandler.cs +++ b/de4dot.code/deobfuscators/Agile_NET/vm/v1/OpCodeHandler.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.code/deobfuscators/Agile_NET/vm/v1/OpCodeHandlers.cs b/de4dot.code/deobfuscators/Agile_NET/vm/v1/OpCodeHandlers.cs index aa8419a3..b81da437 100644 --- a/de4dot.code/deobfuscators/Agile_NET/vm/v1/OpCodeHandlers.cs +++ b/de4dot.code/deobfuscators/Agile_NET/vm/v1/OpCodeHandlers.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.code/deobfuscators/Agile_NET/vm/v1/UnknownHandlerInfo.cs b/de4dot.code/deobfuscators/Agile_NET/vm/v1/UnknownHandlerInfo.cs index b2a08276..bb5c295b 100644 --- a/de4dot.code/deobfuscators/Agile_NET/vm/v1/UnknownHandlerInfo.cs +++ b/de4dot.code/deobfuscators/Agile_NET/vm/v1/UnknownHandlerInfo.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.code/deobfuscators/Agile_NET/vm/v1/VmOpCodeHandlerDetector.cs b/de4dot.code/deobfuscators/Agile_NET/vm/v1/VmOpCodeHandlerDetector.cs index b06ca9c8..34daadb0 100644 --- a/de4dot.code/deobfuscators/Agile_NET/vm/v1/VmOpCodeHandlerDetector.cs +++ b/de4dot.code/deobfuscators/Agile_NET/vm/v1/VmOpCodeHandlerDetector.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.code/deobfuscators/Agile_NET/vm/v2/CSVM1.bin b/de4dot.code/deobfuscators/Agile_NET/vm/v2/CSVM1.bin new file mode 100644 index 00000000..e32fb05e Binary files /dev/null and b/de4dot.code/deobfuscators/Agile_NET/vm/v2/CSVM1.bin differ diff --git a/de4dot.code/deobfuscators/Agile_NET/vm/v2/CSVM1_v2.bin b/de4dot.code/deobfuscators/Agile_NET/vm/v2/CSVM1_v2.bin deleted file mode 100644 index 156f0777..00000000 Binary files a/de4dot.code/deobfuscators/Agile_NET/vm/v2/CSVM1_v2.bin and /dev/null differ diff --git a/de4dot.code/deobfuscators/Agile_NET/vm/v2/CSVM2.bin b/de4dot.code/deobfuscators/Agile_NET/vm/v2/CSVM2.bin new file mode 100644 index 00000000..e1e577a5 Binary files /dev/null and b/de4dot.code/deobfuscators/Agile_NET/vm/v2/CSVM2.bin differ diff --git a/de4dot.code/deobfuscators/Agile_NET/vm/v2/CSVM2_v2.bin b/de4dot.code/deobfuscators/Agile_NET/vm/v2/CSVM2_v2.bin deleted file mode 100644 index 81bd5ae6..00000000 Binary files a/de4dot.code/deobfuscators/Agile_NET/vm/v2/CSVM2_v2.bin and /dev/null differ diff --git a/de4dot.code/deobfuscators/Agile_NET/vm/v2/CSVM3.bin b/de4dot.code/deobfuscators/Agile_NET/vm/v2/CSVM3.bin new file mode 100644 index 00000000..7378faf9 Binary files /dev/null and b/de4dot.code/deobfuscators/Agile_NET/vm/v2/CSVM3.bin differ diff --git a/de4dot.code/deobfuscators/Agile_NET/vm/v2/CSVM3_v2.bin b/de4dot.code/deobfuscators/Agile_NET/vm/v2/CSVM3_v2.bin deleted file mode 100644 index a86daab3..00000000 Binary files a/de4dot.code/deobfuscators/Agile_NET/vm/v2/CSVM3_v2.bin and /dev/null differ diff --git a/de4dot.code/deobfuscators/Agile_NET/vm/v2/CSVM4.bin b/de4dot.code/deobfuscators/Agile_NET/vm/v2/CSVM4.bin new file mode 100644 index 00000000..85439b6e Binary files /dev/null and b/de4dot.code/deobfuscators/Agile_NET/vm/v2/CSVM4.bin differ diff --git a/de4dot.code/deobfuscators/Agile_NET/vm/v2/CompositeHandlerDetector.cs b/de4dot.code/deobfuscators/Agile_NET/vm/v2/CompositeHandlerDetector.cs index 9ae1debc..56900000 100644 --- a/de4dot.code/deobfuscators/Agile_NET/vm/v2/CompositeHandlerDetector.cs +++ b/de4dot.code/deobfuscators/Agile_NET/vm/v2/CompositeHandlerDetector.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. @@ -25,19 +25,17 @@ using de4dot.blocks; namespace de4dot.code.deobfuscators.Agile_NET.vm.v2 { class CompositeHandlerDetector { - readonly List handlers; + readonly List handlers; - public CompositeHandlerDetector(IList handlers) { - this.handlers = new List(handlers.Count); - OpCodeHandler nop = null; - foreach (var handler in handlers) { - if (nop == null && handler.OpCodeHandlerInfo.TypeCode == HandlerTypeCode.Nop) - nop = handler; - else - this.handlers.Add(handler); - } - if (nop != null) - this.handlers.Add(nop); + public CompositeHandlerDetector(IList handlers) { + this.handlers = new List(handlers); + + this.handlers.Sort((a, b) => { + int r = b.BlockSigInfos.Count.CompareTo(a.BlockSigInfos.Count); + if (r != 0) + return r; + return b.BlockSigInfos[0].Hashes.Count.CompareTo(a.BlockSigInfos[0].Hashes.Count); + }); } struct MatchState { @@ -51,27 +49,18 @@ namespace de4dot.code.deobfuscators.Agile_NET.vm.v2 { } struct HandlerState { - public readonly HandlerMethod HandlerMethod; - public readonly IList Blocks; + public readonly List BlockSigInfos; public readonly int BlockIndex; - public int InstructionIndex; + public int HashIndex; - public HandlerState(HandlerMethod handlerMethod, int blockIndex, int instructionIndex) { - this.HandlerMethod = handlerMethod; - this.Blocks = handlerMethod.Blocks.MethodBlocks.GetAllBlocks(); + public HandlerState(List blockSigInfos, int blockIndex, int instructionIndex) { + this.BlockSigInfos = blockSigInfos; this.BlockIndex = blockIndex; - this.InstructionIndex = instructionIndex; - } - - public HandlerState(HandlerMethod handlerMethod, IList blocks, int blockIndex, int instructionIndex) { - this.HandlerMethod = handlerMethod; - this.Blocks = blocks; - this.BlockIndex = blockIndex; - this.InstructionIndex = instructionIndex; + this.HashIndex = instructionIndex; } public HandlerState Clone() { - return new HandlerState(HandlerMethod, Blocks, BlockIndex, InstructionIndex); + return new HandlerState(BlockSigInfos, BlockIndex, HashIndex); } } @@ -98,22 +87,22 @@ namespace de4dot.code.deobfuscators.Agile_NET.vm.v2 { } public bool FindHandlers(CompositeOpCodeHandler composite) { - composite.OpCodeHandlerInfos.Clear(); - var compositeExecState = new FindHandlerState(new HandlerState(composite.ExecMethod, 0, 0)); + composite.TypeCodes.Clear(); + var compositeExecState = new FindHandlerState(new HandlerState(composite.BlockSigInfos, 0, 0)); while (!compositeExecState.Done) { var handler = FindHandlerMethod(ref compositeExecState); if (handler == null) return false; - composite.OpCodeHandlerInfos.Add(handler.OpCodeHandlerInfo); + composite.TypeCodes.Add(handler.TypeCode); } - return composite.OpCodeHandlerInfos.Count != 0; + return composite.TypeCodes.Count != 0; } - OpCodeHandler FindHandlerMethod(ref FindHandlerState findExecState) { + MethodSigInfo FindHandlerMethod(ref FindHandlerState findExecState) { foreach (var handler in handlers) { FindHandlerState findExecStateNew = findExecState.Clone(); - if (!Matches(handler.ExecMethod, ref findExecStateNew)) + if (!Matches(handler.BlockSigInfos, ref findExecStateNew)) continue; findExecState = findExecStateNew; @@ -123,14 +112,14 @@ namespace de4dot.code.deobfuscators.Agile_NET.vm.v2 { } Stack stack = new Stack(); - bool Matches(HandlerMethod handler, ref FindHandlerState findState) { + bool Matches(List handler, ref FindHandlerState findState) { HandlerState? nextState = null; stack.Clear(); stack.Push(new MatchState(new HandlerState(handler, 0, 0), findState.CompositeState)); while (stack.Count > 0) { var matchState = stack.Pop(); - if (matchState.CompositeState.InstructionIndex == 0) { + if (matchState.CompositeState.HashIndex == 0) { if (findState.VisitedCompositeBlocks.ContainsKey(matchState.CompositeState.BlockIndex)) continue; findState.VisitedCompositeBlocks[matchState.CompositeState.BlockIndex] = true; @@ -143,193 +132,83 @@ namespace de4dot.code.deobfuscators.Agile_NET.vm.v2 { if (!Compare(ref matchState.OtherState, ref matchState.CompositeState)) return false; - var hblock = matchState.OtherState.Blocks[matchState.OtherState.BlockIndex]; - var hinstrs = hblock.Instructions; - int hi = matchState.OtherState.InstructionIndex; - var cblock = matchState.CompositeState.Blocks[matchState.CompositeState.BlockIndex]; - var cinstrs = cblock.Instructions; - int ci = matchState.CompositeState.InstructionIndex; + var hblock = matchState.OtherState.BlockSigInfos[matchState.OtherState.BlockIndex]; + var hinstrs = hblock.Hashes; + int hi = matchState.OtherState.HashIndex; + var cblock = matchState.CompositeState.BlockSigInfos[matchState.CompositeState.BlockIndex]; + var cinstrs = cblock.Hashes; + int ci = matchState.CompositeState.HashIndex; if (hi < hinstrs.Count) return false; if (ci < cinstrs.Count) { - if (hblock.CountTargets() != 0) + if (hblock.Targets.Count != 0) return false; - if (hblock.LastInstr.OpCode.Code == Code.Ret) { + if (hblock.EndsInRet) { if (nextState != null) return false; nextState = matchState.CompositeState; } } else { - if (cblock.CountTargets() != hblock.CountTargets()) + if (cblock.Targets.Count != hblock.Targets.Count) + return false; + if (cblock.HasFallThrough != hblock.HasFallThrough) return false; - if (cblock.FallThrough != null || hblock.FallThrough != null) { - if (cblock.FallThrough == null || hblock.FallThrough == null) - return false; - var hs = CreateHandlerState(handler, matchState.OtherState.Blocks, hblock.FallThrough); - var cs = CreateHandlerState(findState.CompositeState.HandlerMethod, findState.CompositeState.Blocks, cblock.FallThrough); + for (int i = 0; i < cblock.Targets.Count; i++) { + var hs = new HandlerState(handler, hblock.Targets[i], 0); + var cs = new HandlerState(findState.CompositeState.BlockSigInfos, cblock.Targets[i], 0); stack.Push(new MatchState(hs, cs)); } - if (cblock.Targets != null || hblock.Targets != null) { - if (cblock.Targets == null || hblock.Targets == null || - cblock.Targets.Count != hblock.Targets.Count) - return false; - - for (int i = 0; i < cblock.Targets.Count; i++) { - var hs = CreateHandlerState(handler, matchState.OtherState.Blocks, hblock.Targets[i]); - var cs = CreateHandlerState(findState.CompositeState.HandlerMethod, findState.CompositeState.Blocks, cblock.Targets[i]); - stack.Push(new MatchState(hs, cs)); - } - } } } if (nextState == null) { + if (findState.VisitedCompositeBlocks.Count != findState.CompositeState.BlockSigInfos.Count) + return false; findState.Done = true; return true; } else { if (findState.CompositeState.BlockIndex == nextState.Value.BlockIndex && - findState.CompositeState.InstructionIndex == nextState.Value.InstructionIndex) + findState.CompositeState.HashIndex == nextState.Value.HashIndex) return false; findState.CompositeState = nextState.Value; + if (findState.CompositeState.HashIndex == 0) + findState.VisitedCompositeBlocks.Remove(findState.CompositeState.BlockIndex); return true; } } - static HandlerState CreateHandlerState(HandlerMethod handler, IList blocks, Block target) { - return new HandlerState(handler, blocks.IndexOf(target), 0); - } - static bool Compare(ref HandlerState handler, ref HandlerState composite) { - var hinstrs = handler.Blocks[handler.BlockIndex].Instructions; - int hi = handler.InstructionIndex; - var cinstrs = composite.Blocks[composite.BlockIndex].Instructions; - int ci = composite.InstructionIndex; + var hhashes = handler.BlockSigInfos[handler.BlockIndex].Hashes; + int hi = handler.HashIndex; + var chashes = composite.BlockSigInfos[composite.BlockIndex].Hashes; + int ci = composite.HashIndex; while (true) { - if (hi >= hinstrs.Count && ci >= cinstrs.Count) + if (hi >= hhashes.Count && ci >= chashes.Count) break; - if (hi >= hinstrs.Count || ci >= cinstrs.Count) + + if (hi >= hhashes.Count) { + if (handler.BlockSigInfos[handler.BlockIndex].EndsInRet) + break; + } + + if (hi >= hhashes.Count || ci >= chashes.Count) return false; - var hinstr = hinstrs[hi++]; - var cinstr = cinstrs[ci++]; - if (hinstr.OpCode.Code == Code.Nop || - cinstr.OpCode.Code == Code.Nop) { - if (hinstr.OpCode.Code != Code.Nop) - hi--; - if (cinstr.OpCode.Code != Code.Nop) - ci--; - continue; - } + var hhash = hhashes[hi++]; + var chash = chashes[ci++]; - if (hi == hinstrs.Count && hinstr.OpCode.Code == Code.Ret) { - if (cinstr.OpCode.Code != Code.Br && cinstr.OpCode.Code != Code.Ret) - ci--; - break; - } - - if (hinstr.OpCode.Code != cinstr.OpCode.Code) - return false; - - if (hinstr.OpCode.Code == Code.Ldfld && - hi + 1 < hinstrs.Count && ci + 1 < cinstrs.Count) { - var hfield = hinstr.Operand as FieldDef; - var cfield = cinstr.Operand as FieldDef; - if (hfield != null && cfield != null && - !hfield.IsStatic && !cfield.IsStatic && - hfield.DeclaringType == handler.HandlerMethod.Method.DeclaringType && - cfield.DeclaringType == composite.HandlerMethod.Method.DeclaringType && - SignatureEqualityComparer.Instance.Equals(hfield.Signature, cfield.Signature)) { - cinstr = cinstrs[ci++]; - hinstr = hinstrs[hi++]; - if (cinstr.OpCode.Code != Code.Ldc_I4 || - hinstr.OpCode.Code != Code.Ldc_I4) - return false; - continue; - } - } - - if (!CompareOperand(hinstr.OpCode.OperandType, cinstr.Operand, hinstr.Operand)) + if (chash != hhash) return false; } - handler.InstructionIndex = hi; - composite.InstructionIndex = ci; + handler.HashIndex = hi; + composite.HashIndex = ci; return true; } - - static bool CompareOperand(OperandType opType, object a, object b) { - switch (opType) { - case OperandType.ShortInlineI: - return (a is byte && b is byte && (byte)a == (byte)b) || - (a is sbyte && b is sbyte && (sbyte)a == (sbyte)b); - - case OperandType.InlineI: - return a is int && b is int && (int)a == (int)b; - - case OperandType.InlineI8: - return a is long && b is long && (long)a == (long)b; - - case OperandType.ShortInlineR: - return a is float && b is float && (float)a == (float)b; - - case OperandType.InlineR: - return a is double && b is double && (double)a == (double)b; - - case OperandType.InlineField: - return FieldEqualityComparer.CompareDeclaringTypes.Equals(a as IField, b as IField); - - case OperandType.InlineMethod: - return MethodEqualityComparer.CompareDeclaringTypes.Equals(a as IMethod, b as IMethod); - - case OperandType.InlineSig: - return SignatureEqualityComparer.Instance.Equals(a as MethodSig, b as MethodSig); - - case OperandType.InlineString: - return string.Equals(a as string, b as string); - - case OperandType.InlineSwitch: - var al = a as IList; - var bl = b as IList; - return al != null && bl != null && al.Count == bl.Count; - - case OperandType.InlineTok: - var fa = a as IField; - var fb = b as IField; - if (fa != null && fb != null) - return FieldEqualityComparer.CompareDeclaringTypes.Equals(fa, fb); - var ma = a as IMethod; - var mb = b as IMethod; - if (ma != null && mb != null) - return MethodEqualityComparer.CompareDeclaringTypes.Equals(ma, mb); - return TypeEqualityComparer.Instance.Equals(a as ITypeDefOrRef, b as ITypeDefOrRef); - - case OperandType.InlineType: - return TypeEqualityComparer.Instance.Equals(a as ITypeDefOrRef, b as ITypeDefOrRef); - - case OperandType.InlineVar: - case OperandType.ShortInlineVar: - var la = a as Local; - var lb = b as Local; - if (la != null && lb != null) - return true; - var pa = a as Parameter; - var pb = b as Parameter; - return pa != null && pb != null && pa.Index == pb.Index; - - case OperandType.InlineBrTarget: - case OperandType.ShortInlineBrTarget: - case OperandType.InlineNone: - case OperandType.InlinePhi: - return true; - - default: - return false; - } - } } } diff --git a/de4dot.code/deobfuscators/Agile_NET/vm/v2/CompositeOpCodeHandler.cs b/de4dot.code/deobfuscators/Agile_NET/vm/v2/CompositeOpCodeHandler.cs index 2508d020..c3fff699 100644 --- a/de4dot.code/deobfuscators/Agile_NET/vm/v2/CompositeOpCodeHandler.cs +++ b/de4dot.code/deobfuscators/Agile_NET/vm/v2/CompositeOpCodeHandler.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. @@ -23,45 +23,17 @@ using dnlib.DotNet; using de4dot.blocks; namespace de4dot.code.deobfuscators.Agile_NET.vm.v2 { - class HandlerMethod { - public MethodDef Method { get; private set; } - public Blocks Blocks { get; private set; } - - public HandlerMethod(MethodDef method) { - this.Method = method; - this.Blocks = new Blocks(method); - } - } - - class PrimitiveHandlerMethod : HandlerMethod { - public MethodSigInfo Sig { get; set; } - - public PrimitiveHandlerMethod(MethodDef method) - : base(method) { - } - } - class CompositeOpCodeHandler { - public TypeDef HandlerType { get; private set; } - public HandlerMethod ExecMethod { get; private set; } - public List OpCodeHandlerInfos { get; private set; } + public List BlockSigInfos { get; private set; } + public List TypeCodes { get; private set; } - public CompositeOpCodeHandler(TypeDef handlerType, HandlerMethod execMethod) { - this.HandlerType = handlerType; - this.ExecMethod = execMethod; - this.OpCodeHandlerInfos = new List(); + public CompositeOpCodeHandler(List blockSigInfos) { + this.BlockSigInfos = blockSigInfos; + this.TypeCodes = new List(); } public override string ToString() { - if (OpCodeHandlerInfos.Count == 0) - return ""; - var sb = new StringBuilder(); - foreach (var handler in OpCodeHandlerInfos) { - if (sb.Length != 0) - sb.Append(", "); - sb.Append(handler.Name); - } - return sb.ToString(); + return OpCodeHandlerInfo.GetCompositeName(TypeCodes); } } } diff --git a/de4dot.code/deobfuscators/Agile_NET/vm/v2/Csvm.cs b/de4dot.code/deobfuscators/Agile_NET/vm/v2/Csvm.cs index 9b6f0c10..2669502f 100644 --- a/de4dot.code/deobfuscators/Agile_NET/vm/v2/Csvm.cs +++ b/de4dot.code/deobfuscators/Agile_NET/vm/v2/Csvm.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.code/deobfuscators/Agile_NET/vm/v2/CsvmInfo.cs b/de4dot.code/deobfuscators/Agile_NET/vm/v2/CsvmInfo.cs index 815cc53d..11ebea38 100644 --- a/de4dot.code/deobfuscators/Agile_NET/vm/v2/CsvmInfo.cs +++ b/de4dot.code/deobfuscators/Agile_NET/vm/v2/CsvmInfo.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. @@ -594,45 +594,79 @@ namespace de4dot.code.deobfuscators.Agile_NET.vm.v2 { } public bool FindUnaryOpsMethods() { - UnaryNot = FindUnaryOpMethod(Code.Not); - UnaryNeg = FindUnaryOpMethod(Code.Neg); - return UnaryNot != null && UnaryNeg != null; + UnaryNot = FindUnaryOpMethod1(Code.Not); + UnaryNeg = FindUnaryOpMethod1(Code.Neg); + if (UnaryNot != null && UnaryNeg != null) + return true; + + return FindUnaryOpMethod2(); } - MethodDef FindUnaryOpMethod(Code code) { + MethodDef FindUnaryOpMethod1(Code code) { foreach (var type in module.Types) { if (type.BaseType != VmHandlerBaseType) continue; if (type.Methods.Count != 4) continue; - foreach (var method in type.Methods) { - if (!method.HasBody || !method.IsStatic) - continue; - if (!DotNetUtils.IsMethod(method, "System.Object", "(System.Object)")) - continue; - if (CountThrows(method) != 1) - continue; - var instrs = method.Body.Instructions; - for (int i = 0; i < instrs.Count - 4; i++) { - var ldarg = instrs[i]; - if (!ldarg.IsLdarg() || ldarg.GetParameterIndex() != 0) - continue; - if (!CheckUnboxAny(instrs[i + 1], ElementType.I4)) - continue; - if (instrs[i + 2].OpCode.Code != code) - continue; - if (!CheckBox(instrs[i + 3], ElementType.I4)) - continue; - if (!instrs[i + 4].IsStloc()) - continue; - - return method; - } - } + var method = FindUnaryMethod(type, code); + if (method != null) + return method; } return null; } + bool FindUnaryOpMethod2() { + foreach (var type in module.Types) { + if (type.BaseType == null || type.BaseType.FullName != "System.Object") + continue; + if (type.Methods.Count != 3) + continue; + + UnaryNot = FindUnaryMethod(type, Code.Not); + UnaryNeg = FindUnaryMethod(type, Code.Neg); + if (UnaryNot != null && UnaryNeg != null) + return true; + } + return false; + } + + MethodDef FindUnaryMethod(TypeDef type, Code code) { + foreach (var method in type.Methods) { + if (!IsUnsaryMethod(method, code)) + continue; + + return method; + } + return null; + } + + bool IsUnsaryMethod(MethodDef method, Code code) { + if (!method.HasBody || !method.IsStatic) + return false; + if (!DotNetUtils.IsMethod(method, "System.Object", "(System.Object)")) + return false; + if (CountThrows(method) != 1) + return false; + var instrs = method.Body.Instructions; + for (int i = 0; i < instrs.Count - 4; i++) { + var ldarg = instrs[i]; + if (!ldarg.IsLdarg() || ldarg.GetParameterIndex() != 0) + continue; + if (!CheckUnboxAny(instrs[i + 1], ElementType.I4)) + continue; + if (instrs[i + 2].OpCode.Code != code) + continue; + if (!CheckBox(instrs[i + 3], ElementType.I4)) + continue; + if (!instrs[i + 4].IsStloc()) + continue; + + return true; + } + + return false; + } + static int CountThrows(MethodDef method) { if (method == null || method.Body == null) return 0; diff --git a/de4dot.code/deobfuscators/Agile_NET/vm/v2/CsvmResources.Designer.cs b/de4dot.code/deobfuscators/Agile_NET/vm/v2/CsvmResources.Designer.cs index 6153040b..3a090f84 100644 --- a/de4dot.code/deobfuscators/Agile_NET/vm/v2/CsvmResources.Designer.cs +++ b/de4dot.code/deobfuscators/Agile_NET/vm/v2/CsvmResources.Designer.cs @@ -63,9 +63,9 @@ namespace de4dot.code.deobfuscators.Agile_NET.vm.v2 { /// /// Looks up a localized resource of type System.Byte[]. /// - internal static byte[] CSVM1_v2 { + internal static byte[] CSVM1 { get { - object obj = ResourceManager.GetObject("CSVM1_v2", resourceCulture); + object obj = ResourceManager.GetObject("CSVM1", resourceCulture); return ((byte[])(obj)); } } @@ -73,9 +73,9 @@ namespace de4dot.code.deobfuscators.Agile_NET.vm.v2 { /// /// Looks up a localized resource of type System.Byte[]. /// - internal static byte[] CSVM2_v2 { + internal static byte[] CSVM2 { get { - object obj = ResourceManager.GetObject("CSVM2_v2", resourceCulture); + object obj = ResourceManager.GetObject("CSVM2", resourceCulture); return ((byte[])(obj)); } } @@ -83,9 +83,19 @@ namespace de4dot.code.deobfuscators.Agile_NET.vm.v2 { /// /// Looks up a localized resource of type System.Byte[]. /// - internal static byte[] CSVM3_v2 { + internal static byte[] CSVM3 { get { - object obj = ResourceManager.GetObject("CSVM3_v2", resourceCulture); + object obj = ResourceManager.GetObject("CSVM3", resourceCulture); + return ((byte[])(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Byte[]. + /// + internal static byte[] CSVM4 { + get { + object obj = ResourceManager.GetObject("CSVM4", resourceCulture); return ((byte[])(obj)); } } diff --git a/de4dot.code/deobfuscators/Agile_NET/vm/v2/CsvmResources.resx b/de4dot.code/deobfuscators/Agile_NET/vm/v2/CsvmResources.resx index 254aef83..17159be0 100644 --- a/de4dot.code/deobfuscators/Agile_NET/vm/v2/CsvmResources.resx +++ b/de4dot.code/deobfuscators/Agile_NET/vm/v2/CsvmResources.resx @@ -117,14 +117,17 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - CSVM1_v2.bin;System.Byte[], mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + CSVM1.bin;System.Byte[], mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - CSVM2_v2.bin;System.Byte[], mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + CSVM2.bin;System.Byte[], mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - CSVM3_v2.bin;System.Byte[], mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + CSVM3.bin;System.Byte[], mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + CSVM4.bin;System.Byte[], mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 \ No newline at end of file diff --git a/de4dot.code/deobfuscators/Agile_NET/vm/v2/CsvmToCilMethodConverter.cs b/de4dot.code/deobfuscators/Agile_NET/vm/v2/CsvmToCilMethodConverter.cs index 3cc2f2f6..9c25af10 100644 --- a/de4dot.code/deobfuscators/Agile_NET/vm/v2/CsvmToCilMethodConverter.cs +++ b/de4dot.code/deobfuscators/Agile_NET/vm/v2/CsvmToCilMethodConverter.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. @@ -45,11 +45,11 @@ namespace de4dot.code.deobfuscators.Agile_NET.vm.v2 { uint offset = 0; for (int vmInstrIndex = 0; vmInstrIndex < numVmInstrs; vmInstrIndex++) { var composite = opCodeDetector.Handlers[vmInstrs[vmInstrIndex]]; - var handlerInfos = composite.OpCodeHandlerInfos; + IList handlerInfos = composite.HandlerTypeCodes; if (handlerInfos.Count == 0) - handlerInfos = new List() { new OpCodeHandlerInfo(HandlerTypeCode.Nop, null) }; + handlerInfos = new HandlerTypeCode[] { HandlerTypeCode.Nop }; for (int hi = 0; hi < handlerInfos.Count; hi++) { - var instr = handlerInfoReader.Read(handlerInfos[hi].TypeCode, reader); + var instr = handlerInfoReader.Read(handlerInfos[hi], reader); instr.Offset = offset; offset += (uint)GetInstructionSize(instr); SetCilToVmIndex(instr, vmInstrIndex); @@ -58,6 +58,7 @@ namespace de4dot.code.deobfuscators.Agile_NET.vm.v2 { instrs.Add(instr); } } + return instrs; } } diff --git a/de4dot.code/deobfuscators/Agile_NET/vm/v2/HandlerTypeCode.cs b/de4dot.code/deobfuscators/Agile_NET/vm/v2/HandlerTypeCode.cs index d679c54d..07382b9e 100644 --- a/de4dot.code/deobfuscators/Agile_NET/vm/v2/HandlerTypeCode.cs +++ b/de4dot.code/deobfuscators/Agile_NET/vm/v2/HandlerTypeCode.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.code/deobfuscators/Agile_NET/vm/v2/MethodFinder.cs b/de4dot.code/deobfuscators/Agile_NET/vm/v2/MethodFinder.cs deleted file mode 100644 index ca206830..00000000 --- a/de4dot.code/deobfuscators/Agile_NET/vm/v2/MethodFinder.cs +++ /dev/null @@ -1,109 +0,0 @@ -/* - Copyright (C) 2011-2013 de4dot@gmail.com - - This file is part of de4dot. - - de4dot is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - de4dot is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with de4dot. If not, see . -*/ - -using System.Collections.Generic; - -namespace de4dot.code.deobfuscators.Agile_NET.vm.v2 { - class MethodFinder { - readonly IList handlerInfos; - readonly PrimitiveHandlerMethod handlerMethod; - - class SigState { - public readonly MethodSigInfo SigInfo; - - public SigState(PrimitiveHandlerMethod handlerMethod) { - this.SigInfo = handlerMethod.Sig; - } - } - - public MethodFinder(IList handlerInfos, PrimitiveHandlerMethod handlerMethod) { - this.handlerInfos = handlerInfos; - this.handlerMethod = handlerMethod; - } - - public OpCodeHandler FindHandler() { - var handler = FindHandler(new SigState(handlerMethod)); - if (handler == null) - return null; - - return new OpCodeHandler(handler, handlerMethod.Method.DeclaringType, handlerMethod); - } - - OpCodeHandlerInfo FindHandler(SigState execSigState) { - foreach (var handler in handlerInfos) { - if (Matches(handler.ExecSig, execSigState)) - return handler; - } - return null; - } - - struct MatchInfo { - public int HandlerIndex; - public int SigIndex; - - public MatchInfo(int handlerIndex, int sigIndex) { - this.HandlerIndex = handlerIndex; - this.SigIndex = sigIndex; - } - } - - Dictionary sigIndexToHandlerIndex = new Dictionary(); - Dictionary handlerIndexToSigIndex = new Dictionary(); - Stack stack = new Stack(); - bool Matches(MethodSigInfo handlerSig, SigState sigState) { - stack.Clear(); - sigIndexToHandlerIndex.Clear(); - handlerIndexToSigIndex.Clear(); - var handlerInfos = handlerSig.BlockInfos; - var sigInfos = sigState.SigInfo.BlockInfos; - - stack.Push(new MatchInfo(0, 0)); - while (stack.Count > 0) { - var info = stack.Pop(); - - int handlerIndex, sigIndex; - bool hasVisitedHandler = handlerIndexToSigIndex.TryGetValue(info.HandlerIndex, out sigIndex); - bool hasVisitedSig = sigIndexToHandlerIndex.TryGetValue(info.SigIndex, out handlerIndex); - if (hasVisitedHandler != hasVisitedSig) - return false; - if (hasVisitedHandler) { - if (handlerIndex != info.HandlerIndex || sigIndex != info.SigIndex) - return false; - continue; - } - handlerIndexToSigIndex[info.HandlerIndex] = info.SigIndex; - sigIndexToHandlerIndex[info.SigIndex] = info.HandlerIndex; - - var handlerBlock = handlerInfos[info.HandlerIndex]; - var sigBlock = sigInfos[info.SigIndex]; - - if (!handlerBlock.Equals(sigBlock)) - return false; - - for (int i = 0; i < handlerBlock.Targets.Count; i++) { - int handlerTargetIndex = handlerBlock.Targets[i]; - int sigTargetIndex = sigBlock.Targets[i]; - stack.Push(new MatchInfo(handlerTargetIndex, sigTargetIndex)); - } - } - - return true; - } - } -} diff --git a/de4dot.code/deobfuscators/Agile_NET/vm/v2/MethodSigInfoCreator.cs b/de4dot.code/deobfuscators/Agile_NET/vm/v2/MethodSigInfoCreator.cs deleted file mode 100644 index c311e0a9..00000000 --- a/de4dot.code/deobfuscators/Agile_NET/vm/v2/MethodSigInfoCreator.cs +++ /dev/null @@ -1,737 +0,0 @@ -/* - Copyright (C) 2011-2013 de4dot@gmail.com - - This file is part of de4dot. - - de4dot is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - de4dot is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with de4dot. If not, see . -*/ - -using System; -using System.Collections.Generic; -using System.IO; -using System.Security.Cryptography; -using dnlib.DotNet; -using dnlib.DotNet.Emit; -using dnlib.DotNet.MD; -using de4dot.blocks; - -namespace de4dot.code.deobfuscators.Agile_NET.vm.v2 { - class MethodSigInfo { - readonly List blockInfos; - - public List BlockInfos { - get { return blockInfos; } - } - - public MethodSigInfo() { - this.blockInfos = new List(); - } - - public MethodSigInfo(IEnumerable blockInfos) { - this.blockInfos = new List(blockInfos); - } - } - - class BlockInfo : IEquatable { - readonly List targets; - - public byte[] Hash { get; set; } - public List Targets { - get { return targets; } - } - - public BlockInfo() { - this.targets = new List(); - } - - public BlockInfo(byte[] hash, IEnumerable targets) { - this.Hash = hash; - this.targets = new List(targets); - } - - public override string ToString() { - if (Hash == null) - return ""; - return BitConverter.ToString(Hash).Replace("-", string.Empty); - } - - public bool Equals(BlockInfo other) { - return Equals(Hash, other.Hash) && - Targets.Count == other.Targets.Count; - } - - bool Equals(byte[] a, byte[] b) { - if (a == b) - return true; - if (a == null || b == null) - return false; - if (a.Length != b.Length) - return false; - for (int i = 0; i < a.Length; i++) { - if (a[i] != b[i]) - return false; - } - return true; - } - } - - class MethodSigInfoCreator { - MethodSigInfo methodSigInfo; - Blocks blocks; - IList allBlocks; - Dictionary blockToInfo; - Dictionary methodToId = new Dictionary(); - - public void AddId(object key, int id) { - if (key != null) - methodToId[key] = id; - } - - int GetId(object key) { - if (key == null) - return int.MinValue; - - int id; - if (methodToId.TryGetValue(key, out id)) - return id; - return int.MinValue + 1; - } - - public MethodSigInfo Create(Blocks blocks) { - methodSigInfo = new MethodSigInfo(); - - this.blocks = blocks; - allBlocks = blocks.MethodBlocks.GetAllBlocks(); - - blockToInfo = new Dictionary(); - foreach (var block in allBlocks) { - var blockInfo = new BlockInfo(); - blockToInfo[block] = blockInfo; - methodSigInfo.BlockInfos.Add(blockInfo); - } - - foreach (var block in allBlocks) { - var blockInfo = blockToInfo[block]; - Update(blockInfo, block); - if (block.FallThrough != null) - blockInfo.Targets.Add(allBlocks.IndexOf(block.FallThrough)); - if (block.Targets != null) { - foreach (var target in block.Targets) - blockInfo.Targets.Add(allBlocks.IndexOf(target)); - } - } - - return methodSigInfo; - } - - void Update(BlockInfo blockInfo, Block block) { - using (var hasher = MD5.Create()) { - bool emptyHash; - using (var outStream = new NullStream()) { - using (var csStream = new CryptoStream(outStream, hasher, CryptoStreamMode.Write)) { - var writer = new BinaryWriter(csStream); - Update(writer, blockInfo, block); - } - emptyHash = outStream.Length == 0; - } - if (!emptyHash) - blockInfo.Hash = hasher.Hash; - } - } - - void Update(BinaryWriter writer, BlockInfo blockInfo, Block block) { - var instrs = block.Instructions; - for (int i = 0; i < instrs.Count; i++) { - var instr = instrs[i]; - switch (instr.OpCode.Code) { - case Code.Beq_S: - case Code.Bge_S: - case Code.Bgt_S: - case Code.Ble_S: - case Code.Blt_S: - case Code.Bne_Un_S: - case Code.Bge_Un_S: - case Code.Bgt_Un_S: - case Code.Ble_Un_S: - case Code.Blt_Un_S: - case Code.Brfalse_S: - case Code.Brtrue_S: - case Code.Leave_S: - case Code.Beq: - case Code.Bge: - case Code.Bgt: - case Code.Ble: - case Code.Blt: - case Code.Bne_Un: - case Code.Bge_Un: - case Code.Bgt_Un: - case Code.Ble_Un: - case Code.Blt_Un: - case Code.Brfalse: - case Code.Brtrue: - case Code.Leave: - writer.Write((ushort)SimplifyBranch(instr.OpCode.Code)); - break; - - case Code.Switch: - writer.Write((ushort)instr.OpCode.Code); - writer.Write(blockInfo.Targets.Count); - break; - - case Code.Br_S: - case Code.Br: - break; - - case Code.Ret: - break; - - case Code.Ldc_I4_M1: - case Code.Ldc_I4_0: - case Code.Ldc_I4_1: - case Code.Ldc_I4_2: - case Code.Ldc_I4_3: - case Code.Ldc_I4_4: - case Code.Ldc_I4_5: - case Code.Ldc_I4_6: - case Code.Ldc_I4_7: - case Code.Ldc_I4_8: - case Code.Ldc_I4: - case Code.Ldc_I4_S: - writer.Write((ushort)Code.Ldc_I4); - writer.Write(instr.GetLdcI4Value()); - break; - - case Code.Ldc_I8: - writer.Write((ushort)instr.OpCode.Code); - writer.Write((long)instr.Operand); - break; - - case Code.Ldc_R4: - writer.Write((ushort)instr.OpCode.Code); - writer.Write((float)instr.Operand); - break; - - case Code.Ldc_R8: - writer.Write((ushort)instr.OpCode.Code); - writer.Write((double)instr.Operand); - break; - - case Code.Ldfld: - var typeField = instr.Operand as FieldDef; - bool isField = IsTypeField(typeField); - writer.Write((ushort)instr.OpCode.Code); - writer.Write(isField); - if (isField) { - if (i + 1 < instrs.Count && instrs[i + 1].IsLdcI4()) - i++; - writer.Write(GetFieldId(typeField)); - } - else - Write(writer, instr.Operand); - break; - - case Code.Call: - case Code.Callvirt: - case Code.Newobj: - case Code.Jmp: - case Code.Ldftn: - case Code.Ldvirtftn: - case Code.Ldtoken: - case Code.Stfld: - case Code.Ldsfld: - case Code.Stsfld: - case Code.Ldflda: - case Code.Ldsflda: - case Code.Cpobj: - case Code.Ldobj: - case Code.Castclass: - case Code.Isinst: - case Code.Unbox: - case Code.Stobj: - case Code.Box: - case Code.Newarr: - case Code.Ldelema: - case Code.Ldelem: - case Code.Stelem: - case Code.Unbox_Any: - case Code.Refanyval: - case Code.Mkrefany: - case Code.Initobj: - case Code.Constrained: - case Code.Sizeof: - writer.Write((ushort)instr.OpCode.Code); - Write(writer, instr.Operand); - break; - - case Code.Ldstr: - writer.Write((ushort)instr.OpCode.Code); - break; - - case Code.Ldarg: - case Code.Ldarg_S: - case Code.Ldarg_0: - case Code.Ldarg_1: - case Code.Ldarg_2: - case Code.Ldarg_3: - writer.Write((ushort)Code.Ldarg); - writer.Write(instr.Instruction.GetParameterIndex()); - break; - - case Code.Ldarga: - case Code.Ldarga_S: - writer.Write((ushort)Code.Ldarga); - writer.Write(instr.Instruction.GetParameterIndex()); - break; - - case Code.Starg: - case Code.Starg_S: - writer.Write((ushort)Code.Starg); - writer.Write(instr.Instruction.GetParameterIndex()); - break; - - case Code.Ldloc: - case Code.Ldloc_S: - case Code.Ldloc_0: - case Code.Ldloc_1: - case Code.Ldloc_2: - case Code.Ldloc_3: - writer.Write((ushort)Code.Ldloc); - break; - - case Code.Ldloca: - case Code.Ldloca_S: - writer.Write((ushort)Code.Ldloca); - break; - - case Code.Stloc: - case Code.Stloc_S: - case Code.Stloc_0: - case Code.Stloc_1: - case Code.Stloc_2: - case Code.Stloc_3: - writer.Write((ushort)Code.Stloc); - break; - - case Code.Ldnull: - case Code.Throw: - case Code.Rethrow: - case Code.Ldlen: - case Code.Ckfinite: - case Code.Arglist: - case Code.Localloc: - case Code.Volatile: - case Code.Tailcall: - case Code.Cpblk: - case Code.Initblk: - case Code.Refanytype: - case Code.Readonly: - case Code.Break: - case Code.Endfinally: - case Code.Endfilter: - writer.Write((ushort)instr.OpCode.Code); - break; - - case Code.Calli: - writer.Write((ushort)instr.OpCode.Code); - Write(writer, instr.Operand); - break; - - case Code.Unaligned: - writer.Write((ushort)instr.OpCode.Code); - writer.Write((byte)instr.Operand); - break; - - default: - break; - } - } - } - - void Write(BinaryWriter writer, object op) { - var fd = op as FieldDef; - if (fd != null) { - Write(writer, fd); - return; - } - - var mr = op as MemberRef; - if (mr != null) { - Write(writer, mr); - return; - } - - var md = op as MethodDef; - if (md != null) { - Write(writer, md); - return; - } - - var ms = op as MethodSpec; - if (ms != null) { - Write(writer, ms); - return; - } - - var td = op as TypeDef; - if (td != null) { - Write(writer, td); - return; - } - - var tr = op as TypeRef; - if (tr != null) { - Write(writer, tr); - return; - } - - var ts = op as TypeSpec; - if (ts != null) { - Write(writer, ts); - return; - } - - var fsig = op as FieldSig; - if (fsig != null) { - Write(writer, fsig); - return; - } - - var msig = op as MethodSig; - if (msig != null) { - Write(writer, msig); - return; - } - - var gsig = op as GenericInstMethodSig; - if (gsig != null) { - Write(writer, gsig); - return; - } - - var asmRef = op as AssemblyRef; - if (asmRef != null) { - Write(writer, asmRef); - return; - } - - writer.Write((byte)ObjectType.Unknown); - } - - enum ObjectType : byte { - // 00..3F = Table.XXX values. - Unknown = 0x40, - TypeSig = 0x41, - FieldSig = 0x42, - MethodSig = 0x43, - GenericInstMethodSig = 0x44, - } - - void Write(BinaryWriter writer, TypeSig sig) { - Write(writer, sig, 0); - } - - void Write(BinaryWriter writer, TypeSig sig, int level) { - if (level++ > 20) - return; - - writer.Write((byte)ObjectType.TypeSig); - var etype = sig.GetElementType(); - writer.Write((byte)etype); - switch (etype) { - case ElementType.Ptr: - case ElementType.ByRef: - case ElementType.SZArray: - case ElementType.Pinned: - Write(writer, sig.Next, level); - break; - - case ElementType.Array: - var arySig = (ArraySig)sig; - writer.Write(arySig.Rank); - writer.Write(arySig.Sizes.Count); - writer.Write(arySig.LowerBounds.Count); - Write(writer, sig.Next, level); - break; - - case ElementType.CModReqd: - case ElementType.CModOpt: - Write(writer, ((ModifierSig)sig).Modifier); - Write(writer, sig.Next, level); - break; - - case ElementType.ValueArray: - writer.Write(((ValueArraySig)sig).Size); - Write(writer, sig.Next, level); - break; - - case ElementType.Module: - writer.Write(((ModuleSig)sig).Index); - Write(writer, sig.Next, level); - break; - - case ElementType.GenericInst: - var gis = (GenericInstSig)sig; - Write(writer, gis.GenericType, level); - foreach (var ga in gis.GenericArguments) - Write(writer, ga, level); - Write(writer, sig.Next, level); - break; - - case ElementType.FnPtr: - Write(writer, ((FnPtrSig)sig).Signature); - break; - - case ElementType.Var: - case ElementType.MVar: - writer.Write(((GenericSig)sig).Number); - break; - - case ElementType.ValueType: - case ElementType.Class: - Write(writer, ((TypeDefOrRefSig)sig).TypeDefOrRef); - break; - - case ElementType.End: - case ElementType.Void: - case ElementType.Boolean: - case ElementType.Char: - case ElementType.I1: - case ElementType.U1: - case ElementType.I2: - case ElementType.U2: - case ElementType.I4: - case ElementType.U4: - case ElementType.I8: - case ElementType.U8: - case ElementType.R4: - case ElementType.R8: - case ElementType.String: - case ElementType.TypedByRef: - case ElementType.I: - case ElementType.U: - case ElementType.R: - case ElementType.Object: - case ElementType.Internal: - case ElementType.Sentinel: - default: - break; - } - } - - void Write(BinaryWriter writer, FieldSig sig) { - writer.Write((byte)ObjectType.FieldSig); - writer.Write((byte)(sig == null ? 0 : sig.GetCallingConvention())); - Write(writer, sig.GetFieldType()); - } - - void Write(BinaryWriter writer, MethodSig sig) { - writer.Write((byte)ObjectType.MethodSig); - writer.Write((byte)(sig == null ? 0 : sig.GetCallingConvention())); - Write(writer, sig.GetRetType()); - foreach (var p in sig.GetParams()) - Write(writer, p); - writer.Write(sig.GetParamCount()); - bool hasParamsAfterSentinel = sig.GetParamsAfterSentinel() != null; - writer.Write(hasParamsAfterSentinel); - if (hasParamsAfterSentinel) { - foreach (var p in sig.GetParamsAfterSentinel()) - Write(writer, p); - } - } - - void Write(BinaryWriter writer, GenericInstMethodSig sig) { - writer.Write((byte)ObjectType.GenericInstMethodSig); - writer.Write((byte)(sig == null ? 0 : sig.GetCallingConvention())); - foreach (var ga in sig.GetGenericArguments()) - Write(writer, ga); - } - - void Write(BinaryWriter writer, FieldDef fd) { - writer.Write((byte)Table.Field); - Write(writer, fd.DeclaringType); - var attrMask = FieldAttributes.Static | FieldAttributes.InitOnly | - FieldAttributes.Literal | FieldAttributes.SpecialName | - FieldAttributes.PinvokeImpl | FieldAttributes.RTSpecialName; - writer.Write((ushort)(fd == null ? 0 : fd.Attributes & attrMask)); - Write(writer, fd == null ? null : fd.Signature); - } - - void Write(BinaryWriter writer, MemberRef mr) { - writer.Write((byte)Table.MemberRef); - var parent = mr == null ? null : mr.Class; - Write(writer, parent); - bool canWriteName = IsFromNonObfuscatedAssembly(parent); - writer.Write(canWriteName); - if (canWriteName) - writer.Write(mr.Name); - Write(writer, mr == null ? null : mr.Signature); - } - - void Write(BinaryWriter writer, MethodDef md) { - writer.Write((byte)Table.Method); - Write(writer, md.DeclaringType); - var attrMask1 = MethodImplAttributes.CodeTypeMask | MethodImplAttributes.ManagedMask | - MethodImplAttributes.ForwardRef | MethodImplAttributes.PreserveSig | - MethodImplAttributes.InternalCall; - writer.Write((ushort)(md == null ? 0 : md.ImplAttributes & attrMask1)); - var attrMask2 = MethodAttributes.Static | MethodAttributes.Virtual | - MethodAttributes.HideBySig | MethodAttributes.VtableLayoutMask | - MethodAttributes.CheckAccessOnOverride | MethodAttributes.Abstract | - MethodAttributes.SpecialName | MethodAttributes.PinvokeImpl | - MethodAttributes.UnmanagedExport | MethodAttributes.RTSpecialName; - writer.Write((ushort)(md == null ? 0 : md.Attributes & attrMask2)); - Write(writer, md == null ? null : md.Signature); - writer.Write(md == null ? 0 : md.ParamDefs.Count); - writer.Write(md == null ? 0 : md.GenericParameters.Count); - writer.Write(md == null ? false : md.HasImplMap); - writer.Write(GetId(md)); - } - - void Write(BinaryWriter writer, MethodSpec ms) { - writer.Write((byte)Table.MethodSpec); - Write(writer, ms == null ? null : ms.Method); - Write(writer, ms == null ? null : ms.Instantiation); - } - - void Write(BinaryWriter writer, TypeDef td) { - writer.Write((byte)Table.TypeDef); - Write(writer, td == null ? null : td.BaseType); - var attrMask = TypeAttributes.LayoutMask | TypeAttributes.ClassSemanticsMask | - TypeAttributes.Abstract | TypeAttributes.SpecialName | - TypeAttributes.Import | TypeAttributes.WindowsRuntime | - TypeAttributes.StringFormatMask | TypeAttributes.RTSpecialName; - writer.Write((uint)(td == null ? 0 : td.Attributes & attrMask)); - Write(writer, td == null ? null : td.BaseType); - writer.Write(td == null ? 0 : td.GenericParameters.Count); - writer.Write(td == null ? 0 : td.Interfaces.Count); - if (td != null) { - foreach (var iface in td.Interfaces) - Write(writer, iface); - } - writer.Write(GetId(td)); - } - - void Write(BinaryWriter writer, TypeRef tr) { - writer.Write((byte)Table.TypeRef); - Write(writer, tr == null ? null : tr.ResolutionScope); - bool canWriteName = IsFromNonObfuscatedAssembly(tr); - writer.Write(canWriteName); - if (canWriteName) { - writer.Write(tr.Namespace); - writer.Write(tr.Name); - } - } - - void Write(BinaryWriter writer, TypeSpec ts) { - writer.Write((byte)Table.TypeSpec); - Write(writer, ts == null ? null : ts.TypeSig); - } - - void Write(BinaryWriter writer, AssemblyRef asmRef) { - writer.Write((byte)Table.AssemblyRef); - - bool canWriteAsm = IsNonObfuscatedAssembly(asmRef); - writer.Write(canWriteAsm); - if (canWriteAsm) { - bool hasPk = !PublicKeyBase.IsNullOrEmpty2(asmRef.PublicKeyOrToken); - writer.Write(hasPk); - if (hasPk) - writer.Write(PublicKeyBase.ToPublicKeyToken(asmRef.PublicKeyOrToken).Data); - writer.Write(asmRef.Name); - writer.Write(asmRef.Culture); - } - } - - static bool IsFromNonObfuscatedAssembly(IMemberRefParent mrp) { - return IsFromNonObfuscatedAssembly(mrp as TypeRef); - } - - static bool IsFromNonObfuscatedAssembly(TypeRef tr) { - if (tr == null) - return false; - - for (int i = 0; i < 100; i++) { - var asmRef = tr.ResolutionScope as AssemblyRef; - if (asmRef != null) - return IsNonObfuscatedAssembly(asmRef); - - var tr2 = tr.ResolutionScope as TypeRef; - if (tr2 != null) { - tr = tr2; - continue; - } - - break; - } - - return false; - } - - static bool IsNonObfuscatedAssembly(AssemblyRef asmRef) { - if (asmRef == null) - return false; - // The only external asm refs it uses... - if (asmRef.Name != "mscorlib" && asmRef.Name != "System") - return false; - - return true; - } - - bool IsTypeField(FieldDef fd) { - return fd != null && fd.DeclaringType == blocks.Method.DeclaringType; - } - - int GetFieldId(FieldDef fd) { - if (fd == null) - return int.MinValue; - var fieldType = fd.FieldSig.GetFieldType(); - if (fieldType == null) - return int.MinValue + 1; - - int result = 0; - for (int i = 0; i < 100; i++) { - result += (int)fieldType.ElementType; - if (fieldType.Next == null) - break; - result += 0x100; - fieldType = fieldType.Next; - } - - var td = fieldType.TryGetTypeDef(); - if (td != null && td.IsEnum) - return result + 0x10000000; - return result; - } - - static Code SimplifyBranch(Code code) { - switch (code) { - case Code.Beq_S: return Code.Beq; - case Code.Bge_S: return Code.Bge; - case Code.Bgt_S: return Code.Bgt; - case Code.Ble_S: return Code.Ble; - case Code.Blt_S: return Code.Blt; - case Code.Bne_Un_S: return Code.Bne_Un; - case Code.Bge_Un_S: return Code.Bge_Un; - case Code.Bgt_Un_S: return Code.Bgt_Un; - case Code.Ble_Un_S: return Code.Ble_Un; - case Code.Blt_Un_S: return Code.Blt_Un; - case Code.Br_S: return Code.Br; - case Code.Brfalse_S: return Code.Brfalse; - case Code.Brtrue_S: return Code.Brtrue; - case Code.Leave_S: return Code.Leave; - default: return code; - } - } - } -} diff --git a/de4dot.code/deobfuscators/Agile_NET/vm/v2/OpCodeHandler.cs b/de4dot.code/deobfuscators/Agile_NET/vm/v2/OpCodeHandler.cs deleted file mode 100644 index 606d1f68..00000000 --- a/de4dot.code/deobfuscators/Agile_NET/vm/v2/OpCodeHandler.cs +++ /dev/null @@ -1,38 +0,0 @@ -/* - Copyright (C) 2011-2013 de4dot@gmail.com - - This file is part of de4dot. - - de4dot is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - de4dot is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with de4dot. If not, see . -*/ - -using dnlib.DotNet; - -namespace de4dot.code.deobfuscators.Agile_NET.vm.v2 { - class OpCodeHandler { - public OpCodeHandlerInfo OpCodeHandlerInfo { get; private set; } - public TypeDef HandlerType { get; private set; } - public HandlerMethod ExecMethod { get; private set; } - - public OpCodeHandler(OpCodeHandlerInfo opCodeHandlerInfo, TypeDef handlerType, HandlerMethod execMethod) { - this.OpCodeHandlerInfo = opCodeHandlerInfo; - this.HandlerType = handlerType; - this.ExecMethod = execMethod; - } - - public override string ToString() { - return OpCodeHandlerInfo.Name; - } - } -} diff --git a/de4dot.code/deobfuscators/Agile_NET/vm/v2/OpCodeHandlerInfo.cs b/de4dot.code/deobfuscators/Agile_NET/vm/v2/OpCodeHandlerInfo.cs index d7d3d48d..71f8d327 100644 --- a/de4dot.code/deobfuscators/Agile_NET/vm/v2/OpCodeHandlerInfo.cs +++ b/de4dot.code/deobfuscators/Agile_NET/vm/v2/OpCodeHandlerInfo.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. @@ -19,24 +19,35 @@ using System; using System.Collections.Generic; +using System.Text; namespace de4dot.code.deobfuscators.Agile_NET.vm.v2 { class OpCodeHandlerInfo { public HandlerTypeCode TypeCode { get; private set; } public string Name { get; private set; } - public MethodSigInfo ExecSig { get; private set; } - public OpCodeHandlerInfo(HandlerTypeCode typeCode, MethodSigInfo execSig) { + public OpCodeHandlerInfo(HandlerTypeCode typeCode) { this.TypeCode = typeCode; this.Name = GetHandlerName(typeCode); - this.ExecSig = execSig; } public override string ToString() { return Name; } - static string GetHandlerName(HandlerTypeCode code) { + public static string GetCompositeName(IList typeCodes) { + if (typeCodes.Count == 0) + return ""; + var sb = new StringBuilder(); + foreach (var typeCode in typeCodes) { + if (sb.Length != 0) + sb.Append(", "); + sb.Append(GetHandlerName(typeCode)); + } + return sb.ToString(); + } + + public static string GetHandlerName(HandlerTypeCode code) { switch (code) { case HandlerTypeCode.Add: return "add"; case HandlerTypeCode.Add_Ovf: return "add.ovf"; diff --git a/de4dot.code/deobfuscators/Agile_NET/vm/v2/OpCodeHandlerInfoReader.cs b/de4dot.code/deobfuscators/Agile_NET/vm/v2/OpCodeHandlerInfoReader.cs index 96721152..dd92c2bc 100644 --- a/de4dot.code/deobfuscators/Agile_NET/vm/v2/OpCodeHandlerInfoReader.cs +++ b/de4dot.code/deobfuscators/Agile_NET/vm/v2/OpCodeHandlerInfoReader.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.code/deobfuscators/Agile_NET/vm/v2/OpCodeHandlerInfos.cs b/de4dot.code/deobfuscators/Agile_NET/vm/v2/OpCodeHandlerInfos.cs index 13165b97..f70dc4aa 100644 --- a/de4dot.code/deobfuscators/Agile_NET/vm/v2/OpCodeHandlerInfos.cs +++ b/de4dot.code/deobfuscators/Agile_NET/vm/v2/OpCodeHandlerInfos.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. @@ -23,75 +23,61 @@ using System.IO; namespace de4dot.code.deobfuscators.Agile_NET.vm.v2 { static class OpCodeHandlerInfos { - enum OpCodeHandlersFileVersion : int { - V1 = 1, - } - - public static void Write(BinaryWriter writer, IList handlerInfos) { - WriteV1(writer, handlerInfos); - } - - public static void WriteV1(BinaryWriter writer, IList handlerInfos) { - writer.Write((int)OpCodeHandlersFileVersion.V1); + public static void Write(BinaryWriter writer, List handlerInfos) { + writer.Write(1); writer.Write(handlerInfos.Count); foreach (var handler in handlerInfos) { writer.Write((int)handler.TypeCode); - var infos = handler.ExecSig.BlockInfos; - writer.Write(infos.Count); - foreach (var info in infos) { - if (info.Hash == null) - writer.Write(0); - else { - writer.Write(info.Hash.Length); - writer.Write(info.Hash); - } + writer.Write(handler.BlockSigInfos.Count); + foreach (var info in handler.BlockSigInfos) { writer.Write(info.Targets.Count); foreach (var target in info.Targets) writer.Write(target); + writer.Write(info.Hashes.Count); + foreach (var hash in info.Hashes) + writer.Write((uint)hash); + writer.Write(info.HasFallThrough); + writer.Write(info.EndsInRet); } } } - public static List Read(BinaryReader reader) { - switch ((OpCodeHandlersFileVersion)reader.ReadInt32()) { - case OpCodeHandlersFileVersion.V1: return ReadV1(reader); - default: throw new ApplicationException("Invalid file version"); - } - } - - static List ReadV1(BinaryReader reader) { + public static List Read(BinaryReader reader) { + if (reader.ReadInt32() != 1) + throw new InvalidDataException(); int numHandlers = reader.ReadInt32(); - var list = new List(numHandlers); + var list = new List(numHandlers); for (int i = 0; i < numHandlers; i++) { var typeCode = (HandlerTypeCode)reader.ReadInt32(); - int numInfos = reader.ReadInt32(); - var sigInfo = new MethodSigInfo(); - for (int j = 0; j < numInfos; j++) { - var info = new BlockInfo(); - - info.Hash = reader.ReadBytes(reader.ReadInt32()); - if (info.Hash.Length == 0) - info.Hash = null; - + int numBlocks = reader.ReadInt32(); + var blocks = new List(numBlocks); + for (int j = 0; j < numBlocks; j++) { int numTargets = reader.ReadInt32(); + var targets = new List(numTargets); for (int k = 0; k < numTargets; k++) - info.Targets.Add(reader.ReadInt32()); - - sigInfo.BlockInfos.Add(info); + targets.Add(reader.ReadInt32()); + var numHashes = reader.ReadInt32(); + var hashes = new List(numHashes); + for (int k = 0; k < numHashes; k++) + hashes.Add((BlockElementHash)reader.ReadInt32()); + var block = new BlockSigInfo(hashes, targets); + block.HasFallThrough = reader.ReadBoolean(); + block.EndsInRet = reader.ReadBoolean(); + blocks.Add(block); } - - list.Add(new OpCodeHandlerInfo(typeCode, sigInfo)); + list.Add(new MethodSigInfo(blocks, typeCode)); } return list; } - public static readonly IList[] HandlerInfos = new IList[] { - ReadOpCodeHandlerInfos(CsvmResources.CSVM1_v2), - ReadOpCodeHandlerInfos(CsvmResources.CSVM2_v2), - ReadOpCodeHandlerInfos(CsvmResources.CSVM3_v2), + public static readonly IList[] HandlerInfos = new IList[] { + ReadOpCodeHandlerInfos(CsvmResources.CSVM1), + ReadOpCodeHandlerInfos(CsvmResources.CSVM2), + ReadOpCodeHandlerInfos(CsvmResources.CSVM3), + ReadOpCodeHandlerInfos(CsvmResources.CSVM4), }; - static IList ReadOpCodeHandlerInfos(byte[] data) { + static IList ReadOpCodeHandlerInfos(byte[] data) { return OpCodeHandlerInfos.Read(new BinaryReader(new MemoryStream(data))); } } diff --git a/de4dot.code/deobfuscators/Agile_NET/vm/v2/SigCreator.cs b/de4dot.code/deobfuscators/Agile_NET/vm/v2/SigCreator.cs new file mode 100644 index 00000000..e9261a4a --- /dev/null +++ b/de4dot.code/deobfuscators/Agile_NET/vm/v2/SigCreator.cs @@ -0,0 +1,593 @@ +/* + Copyright (C) 2011-2014 de4dot@gmail.com + + This file is part of de4dot. + + de4dot is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + de4dot is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with de4dot. If not, see . +*/ + +using System; +using System.Collections.Generic; +using System.Text; +using dnlib.DotNet; +using dnlib.DotNet.Emit; +using de4dot.blocks; + +namespace de4dot.code.deobfuscators.Agile_NET.vm.v2 { + class MethodSigInfo { + public HandlerTypeCode TypeCode { get; set; } + public List BlockSigInfos { get; private set; } + + public MethodSigInfo(List blockSigInfos) { + this.BlockSigInfos = blockSigInfos; + } + + public MethodSigInfo(List blockSigInfos, HandlerTypeCode typeCode) { + this.BlockSigInfos = blockSigInfos; + this.TypeCode = typeCode; + } + + public override string ToString() { + return OpCodeHandlerInfo.GetHandlerName(TypeCode); + } + } + + class BlockSigInfo { + readonly List targets; + + public List Hashes { get; private set; } + public List Targets { + get { return targets; } + } + public bool HasFallThrough { get; set; } + public bool EndsInRet { get; set; } + + public BlockSigInfo() { + this.targets = new List(); + this.Hashes = new List(); + } + + public BlockSigInfo(List hashes, List targets) { + this.Hashes = hashes; + this.targets = targets; + } + } + + enum BlockElementHash : int { + } + + class SigCreator { + const int BASE_INDEX = 0x40000000; + Blocks blocks; + Dictionary objToId = new Dictionary(); + CRC32 hasher = new CRC32(); + + public SigCreator() { + } + + public void AddId(object key, int id) { + if (key != null) + objToId[key] = id; + } + + int? GetId(object key) { + if (key == null) + return null; + + int id; + if (objToId.TryGetValue(key, out id)) + return id; + return null; + } + + public List Create(MethodDef method) { + blocks = new Blocks(method); + var allBlocks = blocks.MethodBlocks.GetAllBlocks(); + + var blockInfos = new List(allBlocks.Count); + foreach (var block in allBlocks) { + var blockInfo = new BlockSigInfo(); + blockInfo.HasFallThrough = block.FallThrough != null; + blockInfo.EndsInRet = block.LastInstr.OpCode.Code == Code.Ret; + blockInfos.Add(blockInfo); + var instrs = block.Instructions; + for (int i = 0; i < instrs.Count; i++) { + var info = CalculateHash(instrs, ref i); + if (info != null) + blockInfo.Hashes.Add(info.Value); + } + } + + for (int i = 0; i < blockInfos.Count; i++) { + var block = allBlocks[i]; + var blockInfo = blockInfos[i]; + + if (block.FallThrough != null) + blockInfo.Targets.Add(allBlocks.IndexOf(block.FallThrough)); + if (block.Targets != null) { + foreach (var target in block.Targets) + blockInfo.Targets.Add(allBlocks.IndexOf(target)); + } + } + + return blockInfos; + } + + BlockElementHash? CalculateHash(IList instrs, ref int index) { + hasher.Initialize(); + var instr = instrs[index]; + switch (instr.OpCode.Code) { + case Code.Beq: + case Code.Beq_S: + return GetHash(BASE_INDEX + 0); + + case Code.Bge: + case Code.Bge_S: + return GetHash(BASE_INDEX + 1); + + case Code.Bge_Un: + case Code.Bge_Un_S: + return GetHash(BASE_INDEX + 2); + + case Code.Bgt: + case Code.Bgt_S: + return GetHash(BASE_INDEX + 3); + + case Code.Bgt_Un: + case Code.Bgt_Un_S: + return GetHash(BASE_INDEX + 4); + + case Code.Ble: + case Code.Ble_S: + return GetHash(BASE_INDEX + 5); + + case Code.Ble_Un: + case Code.Ble_Un_S: + return GetHash(BASE_INDEX + 6); + + case Code.Blt: + case Code.Blt_S: + return GetHash(BASE_INDEX + 7); + + case Code.Blt_Un: + case Code.Blt_Un_S: + return GetHash(BASE_INDEX + 8); + + case Code.Bne_Un: + case Code.Bne_Un_S: + return GetHash(BASE_INDEX + 9); + + case Code.Brfalse: + case Code.Brfalse_S: + return GetHash(BASE_INDEX + 10); + + case Code.Brtrue: + case Code.Brtrue_S: + return GetHash(BASE_INDEX + 11); + + case Code.Switch: + return GetHash(BASE_INDEX + 12); + + case Code.Ceq: + return GetHash(BASE_INDEX + 13); + + case Code.Cgt: + return GetHash(BASE_INDEX + 14); + + case Code.Cgt_Un: + return GetHash(BASE_INDEX + 15); + + case Code.Clt: + return GetHash(BASE_INDEX + 16); + + case Code.Clt_Un: + return GetHash(BASE_INDEX + 17); + + case Code.Ldc_I4: + case Code.Ldc_I4_0: + case Code.Ldc_I4_1: + case Code.Ldc_I4_2: + case Code.Ldc_I4_3: + case Code.Ldc_I4_4: + case Code.Ldc_I4_5: + case Code.Ldc_I4_6: + case Code.Ldc_I4_7: + case Code.Ldc_I4_8: + case Code.Ldc_I4_M1: + case Code.Ldc_I4_S: + return GetHash(instr.GetLdcI4Value()); + + case Code.Ldstr: + return GetHash(instr.Operand as string); + + case Code.Rethrow: + return GetHash(BASE_INDEX + 18); + + case Code.Throw: + return GetHash(BASE_INDEX + 19); + + case Code.Call: + case Code.Callvirt: + Hash(instr.Operand); + return (BlockElementHash)hasher.GetHash(); + + case Code.Ldfld: + var field = instr.Operand as FieldDef; + if (!IsTypeField(field)) + return null; + if (index + 1 >= instrs.Count || !instrs[index + 1].IsLdcI4()) + return null; + index++; + return GetHash(GetFieldId(field)); + + default: + break; + } + return null; + } + + bool IsTypeField(FieldDef fd) { + return fd != null && fd.DeclaringType == blocks.Method.DeclaringType; + } + + static int GetFieldId(FieldDef fd) { + if (fd == null) + return int.MinValue; + var fieldType = fd.FieldSig.GetFieldType(); + if (fieldType == null) + return int.MinValue + 1; + + int result = BASE_INDEX + 0x1000; + for (int i = 0; i < 100; i++) { + result += (int)fieldType.ElementType; + if (fieldType.Next == null) + break; + result += 0x100; + fieldType = fieldType.Next; + } + + var td = fieldType.TryGetTypeDef(); + if (td != null && td.IsEnum) + return result + 0x10000000; + return result; + } + + void Hash(object op) { + var md = op as MethodDef; + if (md != null) { + Hash(md); + return; + } + + var mr = op as MemberRef; + if (mr != null) { + Hash(mr); + return; + } + + var td = op as TypeDef; + if (td != null) { + Hash(td); + return; + } + + var tr = op as TypeRef; + if (tr != null) { + Hash(tr); + return; + } + + var ts = op as TypeSpec; + if (ts != null) { + Hash(ts); + return; + } + + var fsig = op as FieldSig; + if (fsig != null) { + Hash(fsig); + return; + } + + var msig = op as MethodSig; + if (msig != null) { + Hash(msig); + return; + } + + var gsig = op as GenericInstMethodSig; + if (gsig != null) { + Hash(gsig); + return; + } + + var asmRef = op as AssemblyRef; + if (asmRef != null) { + Hash(asmRef); + return; + } + + var tsig = op as TypeSig; + if (tsig != null) { + Hash(tsig); + return; + } + + return; + } + + void Hash(TypeSig sig) { + Hash(sig, 0); + } + + void Hash(TypeSig sig, int level) { + if (sig == null) + return; + if (level++ > 20) + return; + + hasher.Hash((byte)0x41); + var etype = sig.GetElementType(); + hasher.Hash((byte)etype); + switch (etype) { + case ElementType.Ptr: + case ElementType.ByRef: + case ElementType.SZArray: + case ElementType.Pinned: + Hash(sig.Next, level); + break; + + case ElementType.Array: + var arySig = (ArraySig)sig; + hasher.Hash(arySig.Rank); + hasher.Hash(arySig.Sizes.Count); + hasher.Hash(arySig.LowerBounds.Count); + Hash(sig.Next, level); + break; + + case ElementType.CModReqd: + case ElementType.CModOpt: + Hash(((ModifierSig)sig).Modifier); + Hash(sig.Next, level); + break; + + case ElementType.ValueArray: + hasher.Hash(((ValueArraySig)sig).Size); + Hash(sig.Next, level); + break; + + case ElementType.Module: + hasher.Hash(((ModuleSig)sig).Index); + Hash(sig.Next, level); + break; + + case ElementType.GenericInst: + var gis = (GenericInstSig)sig; + Hash(gis.GenericType, level); + foreach (var ga in gis.GenericArguments) + Hash(ga, level); + Hash(sig.Next, level); + break; + + case ElementType.FnPtr: + Hash(((FnPtrSig)sig).Signature); + break; + + case ElementType.Var: + case ElementType.MVar: + hasher.Hash(((GenericSig)sig).Number); + break; + + case ElementType.ValueType: + case ElementType.Class: + Hash(((TypeDefOrRefSig)sig).TypeDefOrRef); + break; + + case ElementType.End: + case ElementType.Void: + case ElementType.Boolean: + case ElementType.Char: + case ElementType.I1: + case ElementType.U1: + case ElementType.I2: + case ElementType.U2: + case ElementType.I4: + case ElementType.U4: + case ElementType.I8: + case ElementType.U8: + case ElementType.R4: + case ElementType.R8: + case ElementType.String: + case ElementType.TypedByRef: + case ElementType.I: + case ElementType.U: + case ElementType.R: + case ElementType.Object: + case ElementType.Internal: + case ElementType.Sentinel: + default: + break; + } + } + + void Hash(MethodDef md) { + if (md == null) + return; + + var attrMask1 = MethodImplAttributes.CodeTypeMask | MethodImplAttributes.ManagedMask | + MethodImplAttributes.ForwardRef | MethodImplAttributes.PreserveSig | + MethodImplAttributes.InternalCall; + hasher.Hash((ushort)(md == null ? 0 : md.ImplAttributes & attrMask1)); + var attrMask2 = MethodAttributes.Static | MethodAttributes.Virtual | + MethodAttributes.HideBySig | MethodAttributes.VtableLayoutMask | + MethodAttributes.CheckAccessOnOverride | MethodAttributes.Abstract | + MethodAttributes.SpecialName | MethodAttributes.PinvokeImpl | + MethodAttributes.UnmanagedExport | MethodAttributes.RTSpecialName; + hasher.Hash((ushort)(md.Attributes & attrMask2)); + Hash(md.Signature); + hasher.Hash(md.ParamDefs.Count); + hasher.Hash(md.GenericParameters.Count); + hasher.Hash(md.HasImplMap ? 1 : 0); + + var id = GetId(md); + if (id != null) + hasher.Hash(id.Value); + } + + void Hash(MemberRef mr) { + if (mr == null) + return; + + Hash(mr.Class); + if (IsFromNonObfuscatedAssembly(mr.Class)) + Hash(mr.Name); + Hash(mr.Signature); + } + + void Hash(TypeDef td) { + if (td == null) + return; + + Hash(td.BaseType); + var attrMask = TypeAttributes.LayoutMask | TypeAttributes.ClassSemanticsMask | + TypeAttributes.Abstract | TypeAttributes.SpecialName | + TypeAttributes.Import | TypeAttributes.WindowsRuntime | + TypeAttributes.StringFormatMask | TypeAttributes.RTSpecialName; + hasher.Hash((uint)(td.Attributes & attrMask)); + hasher.Hash(td.GenericParameters.Count); + hasher.Hash(td.Interfaces.Count); + foreach (var iface in td.Interfaces) + Hash(iface.Interface); + var id = GetId(td); + if (id != null) + hasher.Hash(id.Value); + } + + void Hash(TypeRef tr) { + if (tr == null) + return; + + Hash(tr.ResolutionScope); + if (IsFromNonObfuscatedAssembly(tr)) { + Hash(tr.Namespace); + Hash(tr.Name); + } + } + + void Hash(TypeSpec ts) { + if (ts == null) + return; + + Hash(ts.TypeSig); + } + + void Hash(FieldSig sig) { + if (sig == null) + return; + + hasher.Hash((byte)sig.GetCallingConvention()); + Hash(sig.GetFieldType()); + } + + void Hash(MethodSig sig) { + if (sig == null) + return; + + hasher.Hash((byte)sig.GetCallingConvention()); + Hash(sig.GetRetType()); + foreach (var p in sig.GetParams()) + Hash(p); + hasher.Hash(sig.GetParamCount()); + if (sig.GetParamsAfterSentinel() != null) { + foreach (var p in sig.GetParamsAfterSentinel()) + Hash(p); + } + } + + void Hash(GenericInstMethodSig sig) { + if (sig == null) + return; + + hasher.Hash((byte)sig.GetCallingConvention()); + foreach (var ga in sig.GetGenericArguments()) + Hash(ga); + } + + void Hash(AssemblyRef asmRef) { + if (asmRef == null) + return; + + bool canWriteAsm = IsNonObfuscatedAssembly(asmRef); + hasher.Hash(canWriteAsm ? 1 : 0); + if (canWriteAsm) { + bool hasPk = !PublicKeyBase.IsNullOrEmpty2(asmRef.PublicKeyOrToken); + if (hasPk) + hasher.Hash(PublicKeyBase.ToPublicKeyToken(asmRef.PublicKeyOrToken).Data); + Hash(asmRef.Name); + Hash(asmRef.Culture); + } + } + + void Hash(string s) { + if (s != null) + hasher.Hash(Encoding.UTF8.GetBytes(s)); + } + + BlockElementHash GetHash(int val) { + hasher.Hash(val); + return (BlockElementHash)hasher.GetHash(); + } + + BlockElementHash GetHash(string s) { + Hash(s); + return (BlockElementHash)hasher.GetHash(); + } + + static bool IsFromNonObfuscatedAssembly(IMemberRefParent mrp) { + return IsFromNonObfuscatedAssembly(mrp as TypeRef); + } + + static bool IsFromNonObfuscatedAssembly(TypeRef tr) { + if (tr == null) + return false; + + for (int i = 0; i < 100; i++) { + var asmRef = tr.ResolutionScope as AssemblyRef; + if (asmRef != null) + return IsNonObfuscatedAssembly(asmRef); + + var tr2 = tr.ResolutionScope as TypeRef; + if (tr2 != null) { + tr = tr2; + continue; + } + + break; + } + + return false; + } + + static bool IsNonObfuscatedAssembly(IAssembly asm) { + if (asm == null) + return false; + + // The only external asm refs it uses... + if (asm.Name != "mscorlib" && asm.Name != "System") + return false; + + return true; + } + } +} diff --git a/de4dot.code/deobfuscators/Agile_NET/vm/v2/VmOpCode.cs b/de4dot.code/deobfuscators/Agile_NET/vm/v2/VmOpCode.cs index bb1fdd85..81d98ecb 100644 --- a/de4dot.code/deobfuscators/Agile_NET/vm/v2/VmOpCode.cs +++ b/de4dot.code/deobfuscators/Agile_NET/vm/v2/VmOpCode.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. @@ -22,23 +22,15 @@ using System.Text; namespace de4dot.code.deobfuscators.Agile_NET.vm.v2 { class VmOpCode { - public List OpCodeHandlerInfos { get; private set; } + public List HandlerTypeCodes { get; private set; } - public VmOpCode(List opCodeHandlerInfos) { - this.OpCodeHandlerInfos = new List(opCodeHandlerInfos.Count); - this.OpCodeHandlerInfos.AddRange(opCodeHandlerInfos); + public VmOpCode(List opCodeHandlerInfos) { + this.HandlerTypeCodes = new List(opCodeHandlerInfos.Count); + this.HandlerTypeCodes.AddRange(opCodeHandlerInfos); } public override string ToString() { - if (OpCodeHandlerInfos.Count == 0) - return ""; - var sb = new StringBuilder(); - foreach (var handler in OpCodeHandlerInfos) { - if (sb.Length != 0) - sb.Append(", "); - sb.Append(handler.Name); - } - return sb.ToString(); + return OpCodeHandlerInfo.GetCompositeName(HandlerTypeCodes); } } } diff --git a/de4dot.code/deobfuscators/Agile_NET/vm/v2/VmOpCodeHandlerDetector.cs b/de4dot.code/deobfuscators/Agile_NET/vm/v2/VmOpCodeHandlerDetector.cs index ea234c72..a6431820 100644 --- a/de4dot.code/deobfuscators/Agile_NET/vm/v2/VmOpCodeHandlerDetector.cs +++ b/de4dot.code/deobfuscators/Agile_NET/vm/v2/VmOpCodeHandlerDetector.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. @@ -81,7 +81,6 @@ namespace de4dot.code.deobfuscators.Agile_NET.vm.v2 { return; deobfuscator = new MyDeobfuscator(module); - var csvmInfo = new CsvmInfo(module); csvmInfo.Initialize(); var vmHandlerTypes = FindVmHandlerTypes(); @@ -90,9 +89,7 @@ namespace de4dot.code.deobfuscators.Agile_NET.vm.v2 { var composites = CreateCompositeOpCodeHandlers(csvmInfo, vmHandlerTypes); foreach (var handlerInfos in OpCodeHandlerInfos.HandlerInfos) { - var otherHandlers = CreateOtherHandlers(csvmInfo, handlerInfos); - - if (!DetectCompositeHandlers(composites, otherHandlers)) + if (!DetectCompositeHandlers(composites, handlerInfos)) continue; vmOpCodes = CreateVmOpCodes(composites); @@ -105,12 +102,12 @@ namespace de4dot.code.deobfuscators.Agile_NET.vm.v2 { static List CreateVmOpCodes(IList composites) { var list = new List(composites.Count); foreach (var composite in composites) - list.Add(new VmOpCode(composite.OpCodeHandlerInfos)); + list.Add(new VmOpCode(composite.TypeCodes)); return list; } - bool DetectCompositeHandlers(IEnumerable composites, List otherHandlers) { - var detector = new CompositeHandlerDetector(otherHandlers); + bool DetectCompositeHandlers(IEnumerable composites, IList handlerInfos) { + var detector = new CompositeHandlerDetector(handlerInfos); foreach (var composite in composites) { if (!detector.FindHandlers(composite)) return false; @@ -128,15 +125,18 @@ namespace de4dot.code.deobfuscators.Agile_NET.vm.v2 { List CreateCompositeOpCodeHandlers(CsvmInfo csvmInfo, List handlers) { var list = new List(handlers.Count); - foreach (var handler in handlers) { - var execHandler = new HandlerMethod(GetExecMethod(handler)); - list.Add(new CompositeOpCodeHandler(handler, execHandler)); - } + var sigCreator = CreateSigCreator(csvmInfo); + foreach (var handler in handlers) + list.Add(new CompositeOpCodeHandler(sigCreator.Create(GetExecMethod(handler)))); return list; } MethodDef GetExecMethod(TypeDef type) { + return GetExecMethod(deobfuscator, type); + } + + static MethodDef GetExecMethod(MyDeobfuscator deobfuscator, TypeDef type) { MethodDef readMethod, execMethod; GetReadAndExecMethods(type, out readMethod, out execMethod); deobfuscator.Deobfuscate(execMethod); @@ -144,8 +144,8 @@ namespace de4dot.code.deobfuscators.Agile_NET.vm.v2 { return execMethod; } - static MethodSigInfoCreator CreateMethodSigInfoCreator(CsvmInfo csvmInfo) { - var creator = new MethodSigInfoCreator(); + static SigCreator CreateSigCreator(CsvmInfo csvmInfo) { + var creator = new SigCreator(); creator.AddId(csvmInfo.LogicalOpShrUn, 1); creator.AddId(csvmInfo.LogicalOpShl, 2); @@ -183,9 +183,20 @@ namespace de4dot.code.deobfuscators.Agile_NET.vm.v2 { creator.AddId(csvmInfo.LocalsGet, 30); creator.AddId(csvmInfo.LocalsSet, 31); + AddTypeId(creator, csvmInfo.LogicalOpShrUn, 32); + AddTypeId(creator, csvmInfo.CompareLt, 33); + AddTypeId(creator, csvmInfo.ArithmeticSubOvfUn, 34); + AddTypeId(creator, csvmInfo.UnaryNot, 35); + AddTypeId(creator, csvmInfo.ArgsGet, 36); + return creator; } + static void AddTypeId(SigCreator creator, MethodDef method, int id) { + if (method != null) + creator.AddId(method.DeclaringType, id); + } + static void GetReadAndExecMethods(TypeDef handler, out MethodDef readMethod, out MethodDef execMethod) { readMethod = execMethod = null; foreach (var method in handler.Methods) { @@ -270,28 +281,5 @@ namespace de4dot.code.deobfuscators.Agile_NET.vm.v2 { return list; } - - List CreateOtherHandlers(CsvmInfo csvmInfo, IList handlerInfos) { - var list = new List(NUM_HANDLERS); - - foreach (var type in GetVmHandlerTypes(csvmInfo.VmHandlerBaseType)) { - if (list.Count == NUM_HANDLERS) - break; - - var execHandler = new PrimitiveHandlerMethod(GetExecMethod(type)); - execHandler.Sig = CreateMethodSigInfoCreator(csvmInfo).Create(execHandler.Blocks); - - var finder = new MethodFinder(handlerInfos, execHandler); - var handler = finder.FindHandler(); - if (handler == null) - continue; - - list.Add(handler); - } - - list.Sort((a, b) => a.OpCodeHandlerInfo.Name.ToUpperInvariant().CompareTo(b.OpCodeHandlerInfo.Name.ToUpperInvariant())); - - return list; - } } } diff --git a/de4dot.code/deobfuscators/ArrayFinder.cs b/de4dot.code/deobfuscators/ArrayFinder.cs index af7ccc1b..f23f631b 100644 --- a/de4dot.code/deobfuscators/ArrayFinder.cs +++ b/de4dot.code/deobfuscators/ArrayFinder.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.code/deobfuscators/Babel_NET/AssemblyResolver.cs b/de4dot.code/deobfuscators/Babel_NET/AssemblyResolver.cs index 86c9a7d3..e66a2ec9 100644 --- a/de4dot.code/deobfuscators/Babel_NET/AssemblyResolver.cs +++ b/de4dot.code/deobfuscators/Babel_NET/AssemblyResolver.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.code/deobfuscators/Babel_NET/BabelInflater.cs b/de4dot.code/deobfuscators/Babel_NET/BabelInflater.cs index 2bc82b0d..130d5507 100644 --- a/de4dot.code/deobfuscators/Babel_NET/BabelInflater.cs +++ b/de4dot.code/deobfuscators/Babel_NET/BabelInflater.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.code/deobfuscators/Babel_NET/BabelMethodCallInliner.cs b/de4dot.code/deobfuscators/Babel_NET/BabelMethodCallInliner.cs index 88623545..b55150ce 100644 --- a/de4dot.code/deobfuscators/Babel_NET/BabelMethodCallInliner.cs +++ b/de4dot.code/deobfuscators/Babel_NET/BabelMethodCallInliner.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.code/deobfuscators/Babel_NET/BabelUtils.cs b/de4dot.code/deobfuscators/Babel_NET/BabelUtils.cs index 9f6f2da0..9c1adf5c 100644 --- a/de4dot.code/deobfuscators/Babel_NET/BabelUtils.cs +++ b/de4dot.code/deobfuscators/Babel_NET/BabelUtils.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.code/deobfuscators/Babel_NET/ConstantsDecrypter.cs b/de4dot.code/deobfuscators/Babel_NET/ConstantsDecrypter.cs index eb22001f..642e826e 100644 --- a/de4dot.code/deobfuscators/Babel_NET/ConstantsDecrypter.cs +++ b/de4dot.code/deobfuscators/Babel_NET/ConstantsDecrypter.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.code/deobfuscators/Babel_NET/Deobfuscator.cs b/de4dot.code/deobfuscators/Babel_NET/Deobfuscator.cs index 1874a634..32dd7aef 100644 --- a/de4dot.code/deobfuscators/Babel_NET/Deobfuscator.cs +++ b/de4dot.code/deobfuscators/Babel_NET/Deobfuscator.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.code/deobfuscators/Babel_NET/ImageReader.cs b/de4dot.code/deobfuscators/Babel_NET/ImageReader.cs index 4051a703..a8f44ba1 100644 --- a/de4dot.code/deobfuscators/Babel_NET/ImageReader.cs +++ b/de4dot.code/deobfuscators/Babel_NET/ImageReader.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.code/deobfuscators/Babel_NET/InflaterCreator.cs b/de4dot.code/deobfuscators/Babel_NET/InflaterCreator.cs index be9e0a6f..d70f2b80 100644 --- a/de4dot.code/deobfuscators/Babel_NET/InflaterCreator.cs +++ b/de4dot.code/deobfuscators/Babel_NET/InflaterCreator.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.code/deobfuscators/Babel_NET/MemberReferenceConverter.cs b/de4dot.code/deobfuscators/Babel_NET/MemberReferenceConverter.cs index 90e02215..3709d977 100644 --- a/de4dot.code/deobfuscators/Babel_NET/MemberReferenceConverter.cs +++ b/de4dot.code/deobfuscators/Babel_NET/MemberReferenceConverter.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.code/deobfuscators/Babel_NET/MethodBodyReader.cs b/de4dot.code/deobfuscators/Babel_NET/MethodBodyReader.cs index 6f0a9d19..2a570a18 100644 --- a/de4dot.code/deobfuscators/Babel_NET/MethodBodyReader.cs +++ b/de4dot.code/deobfuscators/Babel_NET/MethodBodyReader.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.code/deobfuscators/Babel_NET/MethodReferenceReader.cs b/de4dot.code/deobfuscators/Babel_NET/MethodReferenceReader.cs index e2dfd417..7ee8410b 100644 --- a/de4dot.code/deobfuscators/Babel_NET/MethodReferenceReader.cs +++ b/de4dot.code/deobfuscators/Babel_NET/MethodReferenceReader.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.code/deobfuscators/Babel_NET/MethodsDecrypter.cs b/de4dot.code/deobfuscators/Babel_NET/MethodsDecrypter.cs index 72fdf49f..b90bf488 100644 --- a/de4dot.code/deobfuscators/Babel_NET/MethodsDecrypter.cs +++ b/de4dot.code/deobfuscators/Babel_NET/MethodsDecrypter.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.code/deobfuscators/Babel_NET/ProxyCallFixer.cs b/de4dot.code/deobfuscators/Babel_NET/ProxyCallFixer.cs index 12b5625e..7f0896f1 100644 --- a/de4dot.code/deobfuscators/Babel_NET/ProxyCallFixer.cs +++ b/de4dot.code/deobfuscators/Babel_NET/ProxyCallFixer.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.code/deobfuscators/Babel_NET/ResourceDecrypter.cs b/de4dot.code/deobfuscators/Babel_NET/ResourceDecrypter.cs index 6aad0fc2..bd48330c 100644 --- a/de4dot.code/deobfuscators/Babel_NET/ResourceDecrypter.cs +++ b/de4dot.code/deobfuscators/Babel_NET/ResourceDecrypter.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.code/deobfuscators/Babel_NET/ResourceResolver.cs b/de4dot.code/deobfuscators/Babel_NET/ResourceResolver.cs index c5cc11ef..38dc72ea 100644 --- a/de4dot.code/deobfuscators/Babel_NET/ResourceResolver.cs +++ b/de4dot.code/deobfuscators/Babel_NET/ResourceResolver.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.code/deobfuscators/Babel_NET/StringDecrypter.cs b/de4dot.code/deobfuscators/Babel_NET/StringDecrypter.cs index 77b4f663..196539d8 100644 --- a/de4dot.code/deobfuscators/Babel_NET/StringDecrypter.cs +++ b/de4dot.code/deobfuscators/Babel_NET/StringDecrypter.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.code/deobfuscators/Blowfish.cs b/de4dot.code/deobfuscators/Blowfish.cs index 13a8161b..55d35715 100644 --- a/de4dot.code/deobfuscators/Blowfish.cs +++ b/de4dot.code/deobfuscators/Blowfish.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.code/deobfuscators/CRC32.cs b/de4dot.code/deobfuscators/CRC32.cs index 62f4050d..c3f094a1 100644 --- a/de4dot.code/deobfuscators/CRC32.cs +++ b/de4dot.code/deobfuscators/CRC32.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. @@ -18,7 +18,7 @@ */ namespace de4dot.code.deobfuscators { - class CRC32 { + struct CRC32 { static readonly uint[] table = new uint[256] { 0x00000000, 0x77073096, 0xEE0E612C, 0x990951BA, 0x076DC419, 0x706AF48F, 0xE963A535, 0x9E6495A3, @@ -86,6 +86,131 @@ namespace de4dot.code.deobfuscators { 0xB40BBE37, 0xC30C8EA1, 0x5A05DF1B, 0x2D02EF8D, }; + uint checkSum; + + public void Initialize() { + this.checkSum = uint.MaxValue; + } + + public void Hash(byte[] data) { + if (data == null) + return; + foreach (var b in data) { + int i = (byte)(checkSum ^ b); + checkSum = (checkSum >> 8) ^ table[i]; + } + } + + public void Hash(sbyte a) { + int i = (byte)(checkSum ^ a); + checkSum = (checkSum >> 8) ^ table[i]; + } + + public void Hash(byte a) { + int i = (byte)(checkSum ^ a); + checkSum = (checkSum >> 8) ^ table[i]; + } + + public void Hash(short a) { + int i = (byte)(checkSum ^ (byte)a); + checkSum = (checkSum >> 8) ^ table[i]; + + i = (byte)(checkSum ^ (byte)(a >> 8)); + checkSum = (checkSum >> 8) ^ table[i]; + } + + public void Hash(ushort a) { + int i = (byte)(checkSum ^ (byte)a); + checkSum = (checkSum >> 8) ^ table[i]; + + i = (byte)(checkSum ^ (byte)(a >> 8)); + checkSum = (checkSum >> 8) ^ table[i]; + } + + public void Hash(int a) { + int i = (byte)(checkSum ^ (byte)a); + checkSum = (checkSum >> 8) ^ table[i]; + + i = (byte)(checkSum ^ (byte)(a >> 8)); + checkSum = (checkSum >> 8) ^ table[i]; + + i = (byte)(checkSum ^ (byte)(a >> 16)); + checkSum = (checkSum >> 8) ^ table[i]; + + i = (byte)(checkSum ^ (byte)(a >> 24)); + checkSum = (checkSum >> 8) ^ table[i]; + } + + public void Hash(uint a) { + int i = (byte)(checkSum ^ (byte)a); + checkSum = (checkSum >> 8) ^ table[i]; + + i = (byte)(checkSum ^ (byte)(a >> 8)); + checkSum = (checkSum >> 8) ^ table[i]; + + i = (byte)(checkSum ^ (byte)(a >> 16)); + checkSum = (checkSum >> 8) ^ table[i]; + + i = (byte)(checkSum ^ (byte)(a >> 24)); + checkSum = (checkSum >> 8) ^ table[i]; + } + + public void Hash(long a) { + int i = (byte)(checkSum ^ (byte)a); + checkSum = (checkSum >> 8) ^ table[i]; + + i = (byte)(checkSum ^ (byte)(a >> 8)); + checkSum = (checkSum >> 8) ^ table[i]; + + i = (byte)(checkSum ^ (byte)(a >> 16)); + checkSum = (checkSum >> 8) ^ table[i]; + + i = (byte)(checkSum ^ (byte)(a >> 24)); + checkSum = (checkSum >> 8) ^ table[i]; + + i = (byte)(checkSum ^ (byte)(a >> 32)); + checkSum = (checkSum >> 8) ^ table[i]; + + i = (byte)(checkSum ^ (byte)(a >> 40)); + checkSum = (checkSum >> 8) ^ table[i]; + + i = (byte)(checkSum ^ (byte)(a >> 48)); + checkSum = (checkSum >> 8) ^ table[i]; + + i = (byte)(checkSum ^ (byte)(a >> 56)); + checkSum = (checkSum >> 8) ^ table[i]; + } + + public void Hash(ulong a) { + int i = (byte)(checkSum ^ (byte)a); + checkSum = (checkSum >> 8) ^ table[i]; + + i = (byte)(checkSum ^ (byte)(a >> 8)); + checkSum = (checkSum >> 8) ^ table[i]; + + i = (byte)(checkSum ^ (byte)(a >> 16)); + checkSum = (checkSum >> 8) ^ table[i]; + + i = (byte)(checkSum ^ (byte)(a >> 24)); + checkSum = (checkSum >> 8) ^ table[i]; + + i = (byte)(checkSum ^ (byte)(a >> 32)); + checkSum = (checkSum >> 8) ^ table[i]; + + i = (byte)(checkSum ^ (byte)(a >> 40)); + checkSum = (checkSum >> 8) ^ table[i]; + + i = (byte)(checkSum ^ (byte)(a >> 48)); + checkSum = (checkSum >> 8) ^ table[i]; + + i = (byte)(checkSum ^ (byte)(a >> 56)); + checkSum = (checkSum >> 8) ^ table[i]; + } + + public uint GetHash() { + return ~checkSum; + } + public static uint CheckSum(byte[] data) { if (data == null) return 0; diff --git a/de4dot.code/deobfuscators/CodeFort/AssemblyData.cs b/de4dot.code/deobfuscators/CodeFort/AssemblyData.cs index 043e0583..a69cb952 100644 --- a/de4dot.code/deobfuscators/CodeFort/AssemblyData.cs +++ b/de4dot.code/deobfuscators/CodeFort/AssemblyData.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. @@ -382,7 +382,7 @@ namespace de4dot.code.deobfuscators.CodeFort { this.type = type; } - public void add(string propertyName, object value) { + public void Add(string propertyName, object value) { var prop = type.GetProperty(propertyName); if (prop == null) throw new ApplicationException(string.Format("Could not find property {0} (type {1})", propertyName, type)); @@ -415,9 +415,9 @@ namespace de4dot.code.deobfuscators.CodeFort { var dcAttr = Type.GetType("System.Runtime.Serialization.DataContractAttribute," + serializationAssemblyname); var ctor = dcAttr.GetConstructor(Type.EmptyTypes); var propCreator = new PropertyInfoCreator(dcAttr); - propCreator.add("Namespace", ns); - propCreator.add("Name", name); - propCreator.add("IsReference", isReference); + propCreator.Add("Namespace", ns); + propCreator.Add("Name", name); + propCreator.Add("IsReference", isReference); return new CustomAttributeBuilder(ctor, new object[0], propCreator.Properties, propCreator.Values); } @@ -425,7 +425,7 @@ namespace de4dot.code.deobfuscators.CodeFort { var emAttr = Type.GetType("System.Runtime.Serialization.EnumMemberAttribute," + serializationAssemblyname); var ctor = emAttr.GetConstructor(Type.EmptyTypes); var propCreator = new PropertyInfoCreator(emAttr); - propCreator.add("Value", value); + propCreator.Add("Value", value); return new CustomAttributeBuilder(ctor, new object[0], propCreator.Properties, propCreator.Values); } @@ -433,8 +433,8 @@ namespace de4dot.code.deobfuscators.CodeFort { var dmAttr = Type.GetType("System.Runtime.Serialization.DataMemberAttribute," + serializationAssemblyname); var ctor = dmAttr.GetConstructor(Type.EmptyTypes); var propCreator = new PropertyInfoCreator(dmAttr); - propCreator.add("Name", name); - propCreator.add("EmitDefaultValue", emitDefaultValue); + propCreator.Add("Name", name); + propCreator.Add("EmitDefaultValue", emitDefaultValue); return new CustomAttributeBuilder(ctor, new object[0], propCreator.Properties, propCreator.Values); } diff --git a/de4dot.code/deobfuscators/CodeFort/AssemblyDecrypter.cs b/de4dot.code/deobfuscators/CodeFort/AssemblyDecrypter.cs index d60b3b72..82c3b559 100644 --- a/de4dot.code/deobfuscators/CodeFort/AssemblyDecrypter.cs +++ b/de4dot.code/deobfuscators/CodeFort/AssemblyDecrypter.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.code/deobfuscators/CodeFort/CfMethodCallInliner.cs b/de4dot.code/deobfuscators/CodeFort/CfMethodCallInliner.cs index b4a0d307..7a10c926 100644 --- a/de4dot.code/deobfuscators/CodeFort/CfMethodCallInliner.cs +++ b/de4dot.code/deobfuscators/CodeFort/CfMethodCallInliner.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.code/deobfuscators/CodeFort/Deobfuscator.cs b/de4dot.code/deobfuscators/CodeFort/Deobfuscator.cs index d4638e73..d8a5b879 100644 --- a/de4dot.code/deobfuscators/CodeFort/Deobfuscator.cs +++ b/de4dot.code/deobfuscators/CodeFort/Deobfuscator.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.code/deobfuscators/CodeFort/PasswordFinder.cs b/de4dot.code/deobfuscators/CodeFort/PasswordFinder.cs index d6d8051c..3b8bfeba 100644 --- a/de4dot.code/deobfuscators/CodeFort/PasswordFinder.cs +++ b/de4dot.code/deobfuscators/CodeFort/PasswordFinder.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. @@ -117,7 +117,7 @@ namespace de4dot.code.deobfuscators.CodeFort { return instance.GetType().GetField(name).GetValue(instance); } - static System.Collections.IList toList(object obj) { + static System.Collections.IList ToList(object obj) { return (System.Collections.IList)obj; } @@ -126,7 +126,7 @@ namespace de4dot.code.deobfuscators.CodeFort { var moduleBuilder = asmBuilder.DefineDynamicModule("mod"); var serializedTypes = new SerializedTypes(moduleBuilder); var allTypes = serializedTypes.Deserialize(serializedData); - asmTypes = toList(ReadField(allTypes, "Types")); + asmTypes = ToList(ReadField(allTypes, "Types")); mainAsmPassword = FindMainAssemblyPassword(); embedPassword = FindEmbedPassword(); diff --git a/de4dot.code/deobfuscators/CodeFort/ProxyCallFixer.cs b/de4dot.code/deobfuscators/CodeFort/ProxyCallFixer.cs index 352beac0..2f270d37 100644 --- a/de4dot.code/deobfuscators/CodeFort/ProxyCallFixer.cs +++ b/de4dot.code/deobfuscators/CodeFort/ProxyCallFixer.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.code/deobfuscators/CodeFort/StringDecrypter.cs b/de4dot.code/deobfuscators/CodeFort/StringDecrypter.cs index ed9641b2..14ac8f1a 100644 --- a/de4dot.code/deobfuscators/CodeFort/StringDecrypter.cs +++ b/de4dot.code/deobfuscators/CodeFort/StringDecrypter.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.code/deobfuscators/CodeVeil/AssemblyResolver.cs b/de4dot.code/deobfuscators/CodeVeil/AssemblyResolver.cs index ed2bc9f7..5f380bce 100644 --- a/de4dot.code/deobfuscators/CodeVeil/AssemblyResolver.cs +++ b/de4dot.code/deobfuscators/CodeVeil/AssemblyResolver.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.code/deobfuscators/CodeVeil/Deobfuscator.cs b/de4dot.code/deobfuscators/CodeVeil/Deobfuscator.cs index 0b57c0ee..7e7e7bc3 100644 --- a/de4dot.code/deobfuscators/CodeVeil/Deobfuscator.cs +++ b/de4dot.code/deobfuscators/CodeVeil/Deobfuscator.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.code/deobfuscators/CodeVeil/ErexResourceReader.cs b/de4dot.code/deobfuscators/CodeVeil/ErexResourceReader.cs index e2ce48cf..c59427b2 100644 --- a/de4dot.code/deobfuscators/CodeVeil/ErexResourceReader.cs +++ b/de4dot.code/deobfuscators/CodeVeil/ErexResourceReader.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.code/deobfuscators/CodeVeil/InvalidDataException.cs b/de4dot.code/deobfuscators/CodeVeil/InvalidDataException.cs index b2b8e993..2eb05b7e 100644 --- a/de4dot.code/deobfuscators/CodeVeil/InvalidDataException.cs +++ b/de4dot.code/deobfuscators/CodeVeil/InvalidDataException.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.code/deobfuscators/CodeVeil/InvalidMethodsFinder.cs b/de4dot.code/deobfuscators/CodeVeil/InvalidMethodsFinder.cs index fba61b40..3f95a7f0 100644 --- a/de4dot.code/deobfuscators/CodeVeil/InvalidMethodsFinder.cs +++ b/de4dot.code/deobfuscators/CodeVeil/InvalidMethodsFinder.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.code/deobfuscators/CodeVeil/MainType.cs b/de4dot.code/deobfuscators/CodeVeil/MainType.cs index 870a7155..d2797cac 100644 --- a/de4dot.code/deobfuscators/CodeVeil/MainType.cs +++ b/de4dot.code/deobfuscators/CodeVeil/MainType.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.code/deobfuscators/CodeVeil/MethodsDecrypter.cs b/de4dot.code/deobfuscators/CodeVeil/MethodsDecrypter.cs index 58df9d4f..8beefbfd 100644 --- a/de4dot.code/deobfuscators/CodeVeil/MethodsDecrypter.cs +++ b/de4dot.code/deobfuscators/CodeVeil/MethodsDecrypter.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.code/deobfuscators/CodeVeil/ObfuscatorVersion.cs b/de4dot.code/deobfuscators/CodeVeil/ObfuscatorVersion.cs index 93be510b..775901c4 100644 --- a/de4dot.code/deobfuscators/CodeVeil/ObfuscatorVersion.cs +++ b/de4dot.code/deobfuscators/CodeVeil/ObfuscatorVersion.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.code/deobfuscators/CodeVeil/ProxyCallFixer.cs b/de4dot.code/deobfuscators/CodeVeil/ProxyCallFixer.cs index 2725afe9..0e2fd077 100644 --- a/de4dot.code/deobfuscators/CodeVeil/ProxyCallFixer.cs +++ b/de4dot.code/deobfuscators/CodeVeil/ProxyCallFixer.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.code/deobfuscators/CodeVeil/ResourceConverter.cs b/de4dot.code/deobfuscators/CodeVeil/ResourceConverter.cs index ca0fd414..a5db07a5 100644 --- a/de4dot.code/deobfuscators/CodeVeil/ResourceConverter.cs +++ b/de4dot.code/deobfuscators/CodeVeil/ResourceConverter.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.code/deobfuscators/CodeVeil/ResourceDecrypter.cs b/de4dot.code/deobfuscators/CodeVeil/ResourceDecrypter.cs index 4a9bc10e..41f6de1b 100644 --- a/de4dot.code/deobfuscators/CodeVeil/ResourceDecrypter.cs +++ b/de4dot.code/deobfuscators/CodeVeil/ResourceDecrypter.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.code/deobfuscators/CodeVeil/ResourceInfo.cs b/de4dot.code/deobfuscators/CodeVeil/ResourceInfo.cs index 9b9c2d14..df73cac3 100644 --- a/de4dot.code/deobfuscators/CodeVeil/ResourceInfo.cs +++ b/de4dot.code/deobfuscators/CodeVeil/ResourceInfo.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.code/deobfuscators/CodeVeil/ResourceReader.cs b/de4dot.code/deobfuscators/CodeVeil/ResourceReader.cs index c06f3c07..48f8f6b8 100644 --- a/de4dot.code/deobfuscators/CodeVeil/ResourceReader.cs +++ b/de4dot.code/deobfuscators/CodeVeil/ResourceReader.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.code/deobfuscators/CodeVeil/StringDecrypter.cs b/de4dot.code/deobfuscators/CodeVeil/StringDecrypter.cs index 28be23b4..c714e573 100644 --- a/de4dot.code/deobfuscators/CodeVeil/StringDecrypter.cs +++ b/de4dot.code/deobfuscators/CodeVeil/StringDecrypter.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.code/deobfuscators/CodeVeil/TamperDetection.cs b/de4dot.code/deobfuscators/CodeVeil/TamperDetection.cs index d80c1589..d008e351 100644 --- a/de4dot.code/deobfuscators/CodeVeil/TamperDetection.cs +++ b/de4dot.code/deobfuscators/CodeVeil/TamperDetection.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.code/deobfuscators/CodeWall/AssemblyDecrypter.cs b/de4dot.code/deobfuscators/CodeWall/AssemblyDecrypter.cs index 970d28a5..72fac6c3 100644 --- a/de4dot.code/deobfuscators/CodeWall/AssemblyDecrypter.cs +++ b/de4dot.code/deobfuscators/CodeWall/AssemblyDecrypter.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.code/deobfuscators/CodeWall/Deobfuscator.cs b/de4dot.code/deobfuscators/CodeWall/Deobfuscator.cs index 6954c380..0407175b 100644 --- a/de4dot.code/deobfuscators/CodeWall/Deobfuscator.cs +++ b/de4dot.code/deobfuscators/CodeWall/Deobfuscator.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.code/deobfuscators/CodeWall/KeyGenerator.cs b/de4dot.code/deobfuscators/CodeWall/KeyGenerator.cs index 7db36dbb..5c2764af 100644 --- a/de4dot.code/deobfuscators/CodeWall/KeyGenerator.cs +++ b/de4dot.code/deobfuscators/CodeWall/KeyGenerator.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.code/deobfuscators/CodeWall/MethodsDecrypter.cs b/de4dot.code/deobfuscators/CodeWall/MethodsDecrypter.cs index 025fc0eb..1658b307 100644 --- a/de4dot.code/deobfuscators/CodeWall/MethodsDecrypter.cs +++ b/de4dot.code/deobfuscators/CodeWall/MethodsDecrypter.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.code/deobfuscators/CodeWall/StringDecrypter.cs b/de4dot.code/deobfuscators/CodeWall/StringDecrypter.cs index ff1dea7e..be76e3d3 100644 --- a/de4dot.code/deobfuscators/CodeWall/StringDecrypter.cs +++ b/de4dot.code/deobfuscators/CodeWall/StringDecrypter.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.code/deobfuscators/ConstantsReader.cs b/de4dot.code/deobfuscators/ConstantsReader.cs index ab5f97f6..ed4f1ef2 100644 --- a/de4dot.code/deobfuscators/ConstantsReader.cs +++ b/de4dot.code/deobfuscators/ConstantsReader.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.code/deobfuscators/CryptoObfuscator/AntiDebugger.cs b/de4dot.code/deobfuscators/CryptoObfuscator/AntiDebugger.cs index 5480bba8..c77115c0 100644 --- a/de4dot.code/deobfuscators/CryptoObfuscator/AntiDebugger.cs +++ b/de4dot.code/deobfuscators/CryptoObfuscator/AntiDebugger.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. @@ -68,7 +68,9 @@ namespace de4dot.code.deobfuscators.CryptoObfuscator { !ContainsString(method, "Debugger was detected") && !ContainsString(method, "{0} was detected") && !ContainsString(method, "run under") && - !ContainsString(method, "run with")) + !ContainsString(method, "run with") && + !ContainsString(method, "started under") && + !ContainsString(method, "{0} detected")) continue; antiDebuggerType = type; diff --git a/de4dot.code/deobfuscators/CryptoObfuscator/AssemblyResolver.cs b/de4dot.code/deobfuscators/CryptoObfuscator/AssemblyResolver.cs index cd13f7f5..2475d268 100644 --- a/de4dot.code/deobfuscators/CryptoObfuscator/AssemblyResolver.cs +++ b/de4dot.code/deobfuscators/CryptoObfuscator/AssemblyResolver.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.code/deobfuscators/CryptoObfuscator/CoMethodCallInliner.cs b/de4dot.code/deobfuscators/CryptoObfuscator/CoMethodCallInliner.cs index d632ff43..bfc8f1f7 100644 --- a/de4dot.code/deobfuscators/CryptoObfuscator/CoMethodCallInliner.cs +++ b/de4dot.code/deobfuscators/CryptoObfuscator/CoMethodCallInliner.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.code/deobfuscators/CryptoObfuscator/CoUtils.cs b/de4dot.code/deobfuscators/CryptoObfuscator/CoUtils.cs index 96fb28c2..adab868e 100644 --- a/de4dot.code/deobfuscators/CryptoObfuscator/CoUtils.cs +++ b/de4dot.code/deobfuscators/CryptoObfuscator/CoUtils.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.code/deobfuscators/CryptoObfuscator/ConstantsDecrypter.cs b/de4dot.code/deobfuscators/CryptoObfuscator/ConstantsDecrypter.cs index 18ff0ee0..9021aeed 100644 --- a/de4dot.code/deobfuscators/CryptoObfuscator/ConstantsDecrypter.cs +++ b/de4dot.code/deobfuscators/CryptoObfuscator/ConstantsDecrypter.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.code/deobfuscators/CryptoObfuscator/Deobfuscator.cs b/de4dot.code/deobfuscators/CryptoObfuscator/Deobfuscator.cs index d0bb765f..4115c9d5 100644 --- a/de4dot.code/deobfuscators/CryptoObfuscator/Deobfuscator.cs +++ b/de4dot.code/deobfuscators/CryptoObfuscator/Deobfuscator.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.code/deobfuscators/CryptoObfuscator/InlinedMethodTypes.cs b/de4dot.code/deobfuscators/CryptoObfuscator/InlinedMethodTypes.cs index 929c80f9..e40a4118 100644 --- a/de4dot.code/deobfuscators/CryptoObfuscator/InlinedMethodTypes.cs +++ b/de4dot.code/deobfuscators/CryptoObfuscator/InlinedMethodTypes.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.code/deobfuscators/CryptoObfuscator/LdnullFixer.cs b/de4dot.code/deobfuscators/CryptoObfuscator/LdnullFixer.cs index 3337153b..74478f52 100644 --- a/de4dot.code/deobfuscators/CryptoObfuscator/LdnullFixer.cs +++ b/de4dot.code/deobfuscators/CryptoObfuscator/LdnullFixer.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.code/deobfuscators/CryptoObfuscator/MethodBodyReader.cs b/de4dot.code/deobfuscators/CryptoObfuscator/MethodBodyReader.cs index 72c4e377..760ffcd3 100644 --- a/de4dot.code/deobfuscators/CryptoObfuscator/MethodBodyReader.cs +++ b/de4dot.code/deobfuscators/CryptoObfuscator/MethodBodyReader.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.code/deobfuscators/CryptoObfuscator/MethodsDecrypter.cs b/de4dot.code/deobfuscators/CryptoObfuscator/MethodsDecrypter.cs index 18f32d0a..b91981a6 100644 --- a/de4dot.code/deobfuscators/CryptoObfuscator/MethodsDecrypter.cs +++ b/de4dot.code/deobfuscators/CryptoObfuscator/MethodsDecrypter.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.code/deobfuscators/CryptoObfuscator/ProxyCallFixer.cs b/de4dot.code/deobfuscators/CryptoObfuscator/ProxyCallFixer.cs index 26bd02a8..b296ff6c 100644 --- a/de4dot.code/deobfuscators/CryptoObfuscator/ProxyCallFixer.cs +++ b/de4dot.code/deobfuscators/CryptoObfuscator/ProxyCallFixer.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. @@ -110,7 +110,7 @@ namespace de4dot.code.deobfuscators.CryptoObfuscator { MethodDef GetProxyCreateMethod(TypeDef type) { if (DotNetUtils.FindFieldType(type, "System.ModuleHandle", true) == null) return null; - if (type.Fields.Count < 1 || type.Fields.Count > 16) + if (type.Fields.Count < 1 || type.Fields.Count > 18) return null; MethodDef createMethod = null; diff --git a/de4dot.code/deobfuscators/CryptoObfuscator/ResourceDecrypter.cs b/de4dot.code/deobfuscators/CryptoObfuscator/ResourceDecrypter.cs index d78cbac3..b4288131 100644 --- a/de4dot.code/deobfuscators/CryptoObfuscator/ResourceDecrypter.cs +++ b/de4dot.code/deobfuscators/CryptoObfuscator/ResourceDecrypter.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. @@ -268,7 +268,7 @@ namespace de4dot.code.deobfuscators.CryptoObfuscator { if (!ldci4.IsLdcI4()) continue; int loopCount = ldci4.GetLdcI4Value(); - if (loopCount < 2 || loopCount > 3) + if (loopCount < 2 || loopCount > 4) continue; var blt = instrs[i + 1]; if (blt.OpCode.Code != Code.Blt && blt.OpCode.Code != Code.Blt_S && blt.OpCode.Code != Code.Clt) diff --git a/de4dot.code/deobfuscators/CryptoObfuscator/ResourceResolver.cs b/de4dot.code/deobfuscators/CryptoObfuscator/ResourceResolver.cs index 67c3eaa7..e452cee3 100644 --- a/de4dot.code/deobfuscators/CryptoObfuscator/ResourceResolver.cs +++ b/de4dot.code/deobfuscators/CryptoObfuscator/ResourceResolver.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.code/deobfuscators/CryptoObfuscator/StringDecrypter.cs b/de4dot.code/deobfuscators/CryptoObfuscator/StringDecrypter.cs index 994fc845..6ce41a34 100644 --- a/de4dot.code/deobfuscators/CryptoObfuscator/StringDecrypter.cs +++ b/de4dot.code/deobfuscators/CryptoObfuscator/StringDecrypter.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.code/deobfuscators/CryptoObfuscator/TamperDetection.cs b/de4dot.code/deobfuscators/CryptoObfuscator/TamperDetection.cs index 79a5a6ff..1a44a36a 100644 --- a/de4dot.code/deobfuscators/CryptoObfuscator/TamperDetection.cs +++ b/de4dot.code/deobfuscators/CryptoObfuscator/TamperDetection.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. @@ -84,7 +84,7 @@ namespace de4dot.code.deobfuscators.CryptoObfuscator { if (!method.IsStatic || !DotNetUtils.IsMethod(method, "System.Void", "()")) return false; - if (type.Methods.Count < 3 || type.Methods.Count > 24) + if (type.Methods.Count < 3 || type.Methods.Count > 27) return false; if (DotNetUtils.GetPInvokeMethod(type, "mscoree", "StrongNameSignatureVerificationEx") != null) { } diff --git a/de4dot.code/deobfuscators/DeepSea/ArrayBlockDeobfuscator.cs b/de4dot.code/deobfuscators/DeepSea/ArrayBlockDeobfuscator.cs index 32bbeb7e..610eec2e 100644 --- a/de4dot.code/deobfuscators/DeepSea/ArrayBlockDeobfuscator.cs +++ b/de4dot.code/deobfuscators/DeepSea/ArrayBlockDeobfuscator.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.code/deobfuscators/DeepSea/ArrayBlockState.cs b/de4dot.code/deobfuscators/DeepSea/ArrayBlockState.cs index 3ce602dd..a3fda1ff 100644 --- a/de4dot.code/deobfuscators/DeepSea/ArrayBlockState.cs +++ b/de4dot.code/deobfuscators/DeepSea/ArrayBlockState.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.code/deobfuscators/DeepSea/AssemblyResolver.cs b/de4dot.code/deobfuscators/DeepSea/AssemblyResolver.cs index d42752b4..f7c5348f 100644 --- a/de4dot.code/deobfuscators/DeepSea/AssemblyResolver.cs +++ b/de4dot.code/deobfuscators/DeepSea/AssemblyResolver.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.code/deobfuscators/DeepSea/CastDeobfuscator.cs b/de4dot.code/deobfuscators/DeepSea/CastDeobfuscator.cs index 635a59ff..b26fe8f8 100644 --- a/de4dot.code/deobfuscators/DeepSea/CastDeobfuscator.cs +++ b/de4dot.code/deobfuscators/DeepSea/CastDeobfuscator.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.code/deobfuscators/DeepSea/Deobfuscator.cs b/de4dot.code/deobfuscators/DeepSea/Deobfuscator.cs index 27aed66c..09f76bcd 100644 --- a/de4dot.code/deobfuscators/DeepSea/Deobfuscator.cs +++ b/de4dot.code/deobfuscators/DeepSea/Deobfuscator.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.code/deobfuscators/DeepSea/DsConstantsReader.cs b/de4dot.code/deobfuscators/DeepSea/DsConstantsReader.cs index f184ecb3..aa918bb9 100644 --- a/de4dot.code/deobfuscators/DeepSea/DsConstantsReader.cs +++ b/de4dot.code/deobfuscators/DeepSea/DsConstantsReader.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.code/deobfuscators/DeepSea/DsInlinedMethodsFinder.cs b/de4dot.code/deobfuscators/DeepSea/DsInlinedMethodsFinder.cs index 4df877eb..36442260 100644 --- a/de4dot.code/deobfuscators/DeepSea/DsInlinedMethodsFinder.cs +++ b/de4dot.code/deobfuscators/DeepSea/DsInlinedMethodsFinder.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.code/deobfuscators/DeepSea/DsMethodCallInliner.cs b/de4dot.code/deobfuscators/DeepSea/DsMethodCallInliner.cs index 7da4cc1d..27b50509 100644 --- a/de4dot.code/deobfuscators/DeepSea/DsMethodCallInliner.cs +++ b/de4dot.code/deobfuscators/DeepSea/DsMethodCallInliner.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.code/deobfuscators/DeepSea/DsUtils.cs b/de4dot.code/deobfuscators/DeepSea/DsUtils.cs index 0392d8b0..cf9ca030 100644 --- a/de4dot.code/deobfuscators/DeepSea/DsUtils.cs +++ b/de4dot.code/deobfuscators/DeepSea/DsUtils.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.code/deobfuscators/DeepSea/FieldsRestorer.cs b/de4dot.code/deobfuscators/DeepSea/FieldsRestorer.cs index 603e2a9d..f2e6b753 100644 --- a/de4dot.code/deobfuscators/DeepSea/FieldsRestorer.cs +++ b/de4dot.code/deobfuscators/DeepSea/FieldsRestorer.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.code/deobfuscators/DeepSea/ResolverBase.cs b/de4dot.code/deobfuscators/DeepSea/ResolverBase.cs index a4c291e0..b7ce18c3 100644 --- a/de4dot.code/deobfuscators/DeepSea/ResolverBase.cs +++ b/de4dot.code/deobfuscators/DeepSea/ResolverBase.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.code/deobfuscators/DeepSea/ResourceResolver.cs b/de4dot.code/deobfuscators/DeepSea/ResourceResolver.cs index 5301f666..eaabb0f3 100644 --- a/de4dot.code/deobfuscators/DeepSea/ResourceResolver.cs +++ b/de4dot.code/deobfuscators/DeepSea/ResourceResolver.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.code/deobfuscators/DeepSea/StringDecrypter.cs b/de4dot.code/deobfuscators/DeepSea/StringDecrypter.cs index 13c241d4..2ef1f269 100644 --- a/de4dot.code/deobfuscators/DeepSea/StringDecrypter.cs +++ b/de4dot.code/deobfuscators/DeepSea/StringDecrypter.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.code/deobfuscators/DeobUtils.cs b/de4dot.code/deobfuscators/DeobUtils.cs index fbb999dc..63ce733e 100644 --- a/de4dot.code/deobfuscators/DeobUtils.cs +++ b/de4dot.code/deobfuscators/DeobUtils.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.code/deobfuscators/DeobfuscatorBase.cs b/de4dot.code/deobfuscators/DeobfuscatorBase.cs index 121c8479..e3541f89 100644 --- a/de4dot.code/deobfuscators/DeobfuscatorBase.cs +++ b/de4dot.code/deobfuscators/DeobfuscatorBase.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. @@ -54,6 +54,7 @@ namespace de4dot.code.deobfuscators { protected InitializedDataCreator initializedDataCreator; bool keepTypes; MetaDataFlags? mdFlags; + Dictionary objectsThatMustBeKept = new Dictionary(); protected byte[] ModuleBytes { get { return moduleBytes; } @@ -187,6 +188,8 @@ namespace de4dot.code.deobfuscators { module.EnableTypeDefFindCache = false; if (CanRemoveTypes) { + InitializeObjectsToKeepFromVTableFixups(); + RemoveTypesWithInvalidBaseTypes(); DeleteEmptyCctors(); @@ -204,6 +207,26 @@ namespace de4dot.code.deobfuscators { module.EnableTypeDefFindCache = cacheState; } + void InitializeObjectsToKeepFromVTableFixups() { + var fixups = module.VTableFixups; + if (fixups == null || fixups.VTables.Count == 0) + return; + + foreach (var vtable in fixups) { + if (vtable == null) + continue; + foreach (var method in vtable) { + if (method == null) + continue; + objectsThatMustBeKept[method] = true; + } + } + } + + bool MustKeepObject(object o) { + return o != null && objectsThatMustBeKept.ContainsKey(o); + } + static bool IsTypeWithInvalidBaseType(TypeDef moduleType, TypeDef type) { return type.BaseType == null && !type.IsInterface && type != moduleType; } @@ -233,7 +256,7 @@ namespace de4dot.code.deobfuscators { void RemoveTypesWithInvalidBaseTypes() { var moduleType = DotNetUtils.GetModuleType(module); foreach (var type in module.GetTypes()) { - if (!IsTypeWithInvalidBaseType(moduleType, type)) + if (!IsTypeWithInvalidBaseType(moduleType, type) || MustKeepObject(type)) continue; AddTypeToBeRemoved(type, "Invalid type with no base type (anti-reflection)"); } @@ -412,7 +435,7 @@ namespace de4dot.code.deobfuscators { var emptyCctorsToRemove = new List(); foreach (var type in module.GetTypes()) { var cctor = type.FindStaticConstructor(); - if (cctor != null && DotNetUtils.IsEmpty(cctor)) + if (cctor != null && DotNetUtils.IsEmpty(cctor) && !MustKeepObject(cctor)) emptyCctorsToRemove.Add(cctor); } @@ -442,7 +465,7 @@ namespace de4dot.code.deobfuscators { Logger.Instance.Indent(); foreach (var info in methodsToRemove) { var method = info.obj; - if (method == null) + if (method == null || MustKeepObject(method)) continue; var type = method.DeclaringType; if (type == null) @@ -465,7 +488,7 @@ namespace de4dot.code.deobfuscators { Logger.Instance.Indent(); foreach (var info in fieldsToRemove) { var field = info.obj; - if (field == null) + if (field == null || MustKeepObject(field)) continue; var type = field.DeclaringType; if (type == null) @@ -490,7 +513,7 @@ namespace de4dot.code.deobfuscators { var moduleType = DotNetUtils.GetModuleType(module); foreach (var info in typesToRemove) { var typeDef = info.obj; - if (typeDef == null || typeDef == moduleType) + if (typeDef == null || typeDef == moduleType || MustKeepObject(typeDef)) continue; bool removed; if (typeDef.DeclaringType != null) @@ -566,7 +589,7 @@ namespace de4dot.code.deobfuscators { Logger.Instance.Indent(); foreach (var info in resourcesToRemove) { var resource = info.obj; - if (resource == null) + if (resource == null || MustKeepObject(resource)) continue; if (module.Resources.Remove(resource)) Logger.v("Removed resource {0} (reason: {1})", Utils.ToCsharpString(resource.Name), info.reason); diff --git a/de4dot.code/deobfuscators/DeobfuscatorInfoBase.cs b/de4dot.code/deobfuscators/DeobfuscatorInfoBase.cs index 337d9225..2ef5981a 100644 --- a/de4dot.code/deobfuscators/DeobfuscatorInfoBase.cs +++ b/de4dot.code/deobfuscators/DeobfuscatorInfoBase.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.code/deobfuscators/Dotfuscator/Deobfuscator.cs b/de4dot.code/deobfuscators/Dotfuscator/Deobfuscator.cs index 9b88edb7..c5f3c319 100644 --- a/de4dot.code/deobfuscators/Dotfuscator/Deobfuscator.cs +++ b/de4dot.code/deobfuscators/Dotfuscator/Deobfuscator.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.code/deobfuscators/Dotfuscator/StringDecrypter.cs b/de4dot.code/deobfuscators/Dotfuscator/StringDecrypter.cs index 5576b00f..611dc5f4 100644 --- a/de4dot.code/deobfuscators/Dotfuscator/StringDecrypter.cs +++ b/de4dot.code/deobfuscators/Dotfuscator/StringDecrypter.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.code/deobfuscators/Eazfuscator_NET/AssemblyResolver.cs b/de4dot.code/deobfuscators/Eazfuscator_NET/AssemblyResolver.cs index 023edce0..c2db6b1d 100644 --- a/de4dot.code/deobfuscators/Eazfuscator_NET/AssemblyResolver.cs +++ b/de4dot.code/deobfuscators/Eazfuscator_NET/AssemblyResolver.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. @@ -186,7 +186,7 @@ namespace de4dot.code.deobfuscators.Eazfuscator_NET { return method; } - throw new ApplicationException("Could not find decrypt method"); + return null; } void UpdateDecrypterType() { @@ -228,10 +228,12 @@ namespace de4dot.code.deobfuscators.Eazfuscator_NET { if (!CreateAssemblyInfos()) throw new ApplicationException("Could not initialize assembly infos"); - simpleDeobfuscator.Deobfuscate(decryptMethod); - simpleDeobfuscator.DecryptStrings(decryptMethod, deob); - if (!CreateDecryptKey()) - throw new ApplicationException("Could not initialize decryption key"); + if (decryptMethod != null) { + simpleDeobfuscator.Deobfuscate(decryptMethod); + simpleDeobfuscator.DecryptStrings(decryptMethod, deob); + if (!CreateDecryptKey()) + throw new ApplicationException("Could not initialize decryption key"); + } } void FindOtherType() { @@ -274,6 +276,7 @@ namespace de4dot.code.deobfuscators.Eazfuscator_NET { return true; } + decryptKey = null; return false; } diff --git a/de4dot.code/deobfuscators/Eazfuscator_NET/CodeCompilerMethodCallRestorer.cs b/de4dot.code/deobfuscators/Eazfuscator_NET/CodeCompilerMethodCallRestorer.cs index 35e5b3eb..b1450ec2 100644 --- a/de4dot.code/deobfuscators/Eazfuscator_NET/CodeCompilerMethodCallRestorer.cs +++ b/de4dot.code/deobfuscators/Eazfuscator_NET/CodeCompilerMethodCallRestorer.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.code/deobfuscators/Eazfuscator_NET/DecrypterType.cs b/de4dot.code/deobfuscators/Eazfuscator_NET/DecrypterType.cs index c9b7f940..63fd1c9f 100644 --- a/de4dot.code/deobfuscators/Eazfuscator_NET/DecrypterType.cs +++ b/de4dot.code/deobfuscators/Eazfuscator_NET/DecrypterType.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.code/deobfuscators/Eazfuscator_NET/Deobfuscator.cs b/de4dot.code/deobfuscators/Eazfuscator_NET/Deobfuscator.cs index f21fc072..80f81442 100644 --- a/de4dot.code/deobfuscators/Eazfuscator_NET/Deobfuscator.cs +++ b/de4dot.code/deobfuscators/Eazfuscator_NET/Deobfuscator.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. @@ -28,7 +28,7 @@ namespace de4dot.code.deobfuscators.Eazfuscator_NET { public class DeobfuscatorInfo : DeobfuscatorInfoBase { public const string THE_NAME = "Eazfuscator.NET"; public const string THE_TYPE = "ef"; - const string DEFAULT_REGEX = @"!^#=&!^dje_.+_ejd$&" + DeobfuscatorBase.DEFAULT_ASIAN_VALID_NAME_REGEX; + const string DEFAULT_REGEX = @"!^[a-zA-Z]$&!^#=&!^dje_.+_ejd$&" + DeobfuscatorBase.DEFAULT_ASIAN_VALID_NAME_REGEX; public DeobfuscatorInfo() : base(DEFAULT_REGEX) { } diff --git a/de4dot.code/deobfuscators/Eazfuscator_NET/DynamicDynocodeIterator.cs b/de4dot.code/deobfuscators/Eazfuscator_NET/DynamicDynocodeIterator.cs index 1d60eed1..61afb07d 100644 --- a/de4dot.code/deobfuscators/Eazfuscator_NET/DynamicDynocodeIterator.cs +++ b/de4dot.code/deobfuscators/Eazfuscator_NET/DynamicDynocodeIterator.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.code/deobfuscators/Eazfuscator_NET/DynocodeService.cs b/de4dot.code/deobfuscators/Eazfuscator_NET/DynocodeService.cs index 4c98d3d5..06371ab5 100644 --- a/de4dot.code/deobfuscators/Eazfuscator_NET/DynocodeService.cs +++ b/de4dot.code/deobfuscators/Eazfuscator_NET/DynocodeService.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.code/deobfuscators/Eazfuscator_NET/EfConstantsReader.cs b/de4dot.code/deobfuscators/Eazfuscator_NET/EfConstantsReader.cs index adbc7378..7b095928 100644 --- a/de4dot.code/deobfuscators/Eazfuscator_NET/EfConstantsReader.cs +++ b/de4dot.code/deobfuscators/Eazfuscator_NET/EfConstantsReader.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.code/deobfuscators/Eazfuscator_NET/EfUtils.cs b/de4dot.code/deobfuscators/Eazfuscator_NET/EfUtils.cs index 201c6e1b..ccd1c8c2 100644 --- a/de4dot.code/deobfuscators/Eazfuscator_NET/EfUtils.cs +++ b/de4dot.code/deobfuscators/Eazfuscator_NET/EfUtils.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.code/deobfuscators/Eazfuscator_NET/ResourceMethodsRestorer.cs b/de4dot.code/deobfuscators/Eazfuscator_NET/ResourceMethodsRestorer.cs index 96db8fe4..127e35e6 100644 --- a/de4dot.code/deobfuscators/Eazfuscator_NET/ResourceMethodsRestorer.cs +++ b/de4dot.code/deobfuscators/Eazfuscator_NET/ResourceMethodsRestorer.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.code/deobfuscators/Eazfuscator_NET/ResourceResolver.cs b/de4dot.code/deobfuscators/Eazfuscator_NET/ResourceResolver.cs index d32e25d6..3ff0482b 100644 --- a/de4dot.code/deobfuscators/Eazfuscator_NET/ResourceResolver.cs +++ b/de4dot.code/deobfuscators/Eazfuscator_NET/ResourceResolver.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.code/deobfuscators/Eazfuscator_NET/StringDecrypter.cs b/de4dot.code/deobfuscators/Eazfuscator_NET/StringDecrypter.cs index a4620bbb..da60a999 100644 --- a/de4dot.code/deobfuscators/Eazfuscator_NET/StringDecrypter.cs +++ b/de4dot.code/deobfuscators/Eazfuscator_NET/StringDecrypter.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.code/deobfuscators/Eazfuscator_NET/VersionDetector.cs b/de4dot.code/deobfuscators/Eazfuscator_NET/VersionDetector.cs index e38a6f98..980d9d03 100644 --- a/de4dot.code/deobfuscators/Eazfuscator_NET/VersionDetector.cs +++ b/de4dot.code/deobfuscators/Eazfuscator_NET/VersionDetector.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. @@ -722,7 +722,7 @@ namespace de4dot.code.deobfuscators.Eazfuscator_NET { decryptStringMethod.Body.ExceptionHandlers.Count >= 2 && new LocalTypes(decryptStringMethod).All(locals35) && CheckTypeFields2(fields35)) { - return "3.5 - 4.0"; + return "3.5 - 4.1"; } } diff --git a/de4dot.code/deobfuscators/ExceptionLoggerRemover.cs b/de4dot.code/deobfuscators/ExceptionLoggerRemover.cs index 692d8b4e..24f64335 100644 --- a/de4dot.code/deobfuscators/ExceptionLoggerRemover.cs +++ b/de4dot.code/deobfuscators/ExceptionLoggerRemover.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.code/deobfuscators/Goliath_NET/ArrayDecrypter.cs b/de4dot.code/deobfuscators/Goliath_NET/ArrayDecrypter.cs index e61e6e41..1d13559c 100644 --- a/de4dot.code/deobfuscators/Goliath_NET/ArrayDecrypter.cs +++ b/de4dot.code/deobfuscators/Goliath_NET/ArrayDecrypter.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.code/deobfuscators/Goliath_NET/ArrayValueInliner.cs b/de4dot.code/deobfuscators/Goliath_NET/ArrayValueInliner.cs index 456c29e6..4c5ca79a 100644 --- a/de4dot.code/deobfuscators/Goliath_NET/ArrayValueInliner.cs +++ b/de4dot.code/deobfuscators/Goliath_NET/ArrayValueInliner.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.code/deobfuscators/Goliath_NET/DecrypterBase.cs b/de4dot.code/deobfuscators/Goliath_NET/DecrypterBase.cs index 70d3983a..a63d5078 100644 --- a/de4dot.code/deobfuscators/Goliath_NET/DecrypterBase.cs +++ b/de4dot.code/deobfuscators/Goliath_NET/DecrypterBase.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.code/deobfuscators/Goliath_NET/Deobfuscator.cs b/de4dot.code/deobfuscators/Goliath_NET/Deobfuscator.cs index 8d55f183..13090fa2 100644 --- a/de4dot.code/deobfuscators/Goliath_NET/Deobfuscator.cs +++ b/de4dot.code/deobfuscators/Goliath_NET/Deobfuscator.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.code/deobfuscators/Goliath_NET/IntegerDecrypter.cs b/de4dot.code/deobfuscators/Goliath_NET/IntegerDecrypter.cs index f41c3d75..97d14883 100644 --- a/de4dot.code/deobfuscators/Goliath_NET/IntegerDecrypter.cs +++ b/de4dot.code/deobfuscators/Goliath_NET/IntegerDecrypter.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.code/deobfuscators/Goliath_NET/LocalsRestorer.cs b/de4dot.code/deobfuscators/Goliath_NET/LocalsRestorer.cs index 26593045..c0070d7c 100644 --- a/de4dot.code/deobfuscators/Goliath_NET/LocalsRestorer.cs +++ b/de4dot.code/deobfuscators/Goliath_NET/LocalsRestorer.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.code/deobfuscators/Goliath_NET/LogicalExpressionFixer.cs b/de4dot.code/deobfuscators/Goliath_NET/LogicalExpressionFixer.cs index fb894547..4ebf1568 100644 --- a/de4dot.code/deobfuscators/Goliath_NET/LogicalExpressionFixer.cs +++ b/de4dot.code/deobfuscators/Goliath_NET/LogicalExpressionFixer.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.code/deobfuscators/Goliath_NET/ProxyCallFixer.cs b/de4dot.code/deobfuscators/Goliath_NET/ProxyCallFixer.cs index 6308582d..52dea0e3 100644 --- a/de4dot.code/deobfuscators/Goliath_NET/ProxyCallFixer.cs +++ b/de4dot.code/deobfuscators/Goliath_NET/ProxyCallFixer.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.code/deobfuscators/Goliath_NET/StringDecrypter.cs b/de4dot.code/deobfuscators/Goliath_NET/StringDecrypter.cs index e797a89f..be02c6cf 100644 --- a/de4dot.code/deobfuscators/Goliath_NET/StringDecrypter.cs +++ b/de4dot.code/deobfuscators/Goliath_NET/StringDecrypter.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.code/deobfuscators/Goliath_NET/StrongNameChecker.cs b/de4dot.code/deobfuscators/Goliath_NET/StrongNameChecker.cs index b9034cfc..402afab8 100644 --- a/de4dot.code/deobfuscators/Goliath_NET/StrongNameChecker.cs +++ b/de4dot.code/deobfuscators/Goliath_NET/StrongNameChecker.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.code/deobfuscators/IDeobfuscatedFile.cs b/de4dot.code/deobfuscators/IDeobfuscatedFile.cs index 4381742b..26d763d3 100644 --- a/de4dot.code/deobfuscators/IDeobfuscatedFile.cs +++ b/de4dot.code/deobfuscators/IDeobfuscatedFile.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.code/deobfuscators/IDeobfuscator.cs b/de4dot.code/deobfuscators/IDeobfuscator.cs index b98ff819..53c8b0d7 100644 --- a/de4dot.code/deobfuscators/IDeobfuscator.cs +++ b/de4dot.code/deobfuscators/IDeobfuscator.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.code/deobfuscators/IDeobfuscatorInfo.cs b/de4dot.code/deobfuscators/IDeobfuscatorInfo.cs index 8edec9df..dbc8568e 100644 --- a/de4dot.code/deobfuscators/IDeobfuscatorInfo.cs +++ b/de4dot.code/deobfuscators/IDeobfuscatorInfo.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.code/deobfuscators/ILProtector/DecryptedMethodInfo.cs b/de4dot.code/deobfuscators/ILProtector/DecryptedMethodInfo.cs index 23080df2..d049d525 100644 --- a/de4dot.code/deobfuscators/ILProtector/DecryptedMethodInfo.cs +++ b/de4dot.code/deobfuscators/ILProtector/DecryptedMethodInfo.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.code/deobfuscators/ILProtector/Deobfuscator.cs b/de4dot.code/deobfuscators/ILProtector/Deobfuscator.cs index a517e418..ca1cd63c 100644 --- a/de4dot.code/deobfuscators/ILProtector/Deobfuscator.cs +++ b/de4dot.code/deobfuscators/ILProtector/Deobfuscator.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.code/deobfuscators/ILProtector/DynamicMethodsDecrypter.cs b/de4dot.code/deobfuscators/ILProtector/DynamicMethodsDecrypter.cs index 8d4f6e05..e6dec7b4 100644 --- a/de4dot.code/deobfuscators/ILProtector/DynamicMethodsDecrypter.cs +++ b/de4dot.code/deobfuscators/ILProtector/DynamicMethodsDecrypter.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. @@ -38,6 +38,7 @@ namespace de4dot.code.deobfuscators.ILProtector { FieldInfo invokerFieldInfo; ModuleDefMD moduleProtect; IDecrypter decrypter; + bool methodReaderHasDelegateTypeFlag; interface IDecrypter { byte[] Decrypt(int methodId, uint rid); @@ -82,6 +83,7 @@ namespace de4dot.code.deobfuscators.ILProtector { { new Version(2, 0, 9, 0), new PatchInfo(0x00023360, new PatchData(0x000056F2, nops6)) }, { new Version(2, 0, 10, 0), new PatchInfo(0x00023B30, new PatchData(0x00005B12, nops6)) }, { new Version(2, 0, 11, 0), new PatchInfo(0x000207C0, new PatchData(0x00018432, nops6)) }, + { new Version(2, 0, 11, 1), new PatchInfo(0x000207C0, new PatchData(0x00018432, nops6)) }, }; static readonly Dictionary patchInfos64 = new Dictionary { { new Version(2, 0, 8, 0), new PatchInfo(0x00026090, new PatchData(0x00005E0C, nops6)) }, @@ -89,6 +91,7 @@ namespace de4dot.code.deobfuscators.ILProtector { { new Version(2, 0, 9, 0), new PatchInfo(0x00028B00, new PatchData(0x00005F70, nops6)) }, { new Version(2, 0, 10, 0), new PatchInfo(0x00029630, new PatchData(0x00006510, nops6)) }, { new Version(2, 0, 11, 0), new PatchInfo(0x000257C0, new PatchData(0x0001C9A0, nops6)) }, + { new Version(2, 0, 11, 1), new PatchInfo(0x000257C0, new PatchData(0x0001C9A0, nops6)) }, }; [DllImport("kernel32")] @@ -267,7 +270,7 @@ namespace de4dot.code.deobfuscators.ILProtector { } } - // 2.0.9.0 - 2.0.11.0 + // 2.0.9.0 - 2.0.11.1 class DecrypterV2_0_9_0 : DecrypterBase { DecryptMethod decryptMethod; byte[] decryptedData; @@ -297,6 +300,112 @@ namespace de4dot.code.deobfuscators.ILProtector { } } + abstract class DecrypterBaseV2_0_12_x : IDecrypter { + protected readonly DynamicMethodsDecrypter dmd; + protected byte[] currentILBytes; + byte[] decryptedData; + readonly Delegate invoker; + protected readonly IntPtr pGetILBytes; + protected readonly IntPtr pDecryptCallback; + + protected unsafe DecrypterBaseV2_0_12_x(DynamicMethodsDecrypter dmd) { + this.dmd = dmd; + this.invoker = (Delegate)dmd.invokerFieldInfo.GetValue(null); + + byte* p = (byte*)GetStateAddr(invoker.Target); + p += IntPtr.Size * 3; + p = *(byte**)p; + p += 8 + IntPtr.Size * 8; + p = *(byte**)p; + p += IntPtr.Size * 3; + p = *(byte**)p; + pGetILBytes = new IntPtr(p + IntPtr.Size * 39); + pDecryptCallback = new IntPtr(p + IntPtr.Size * 40); + } + + IntPtr GetStateAddr(object obj) { + var flags = BindingFlags.DeclaredOnly | BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic; + foreach (var fi in obj.GetType().GetFields(flags)) { + if (fi.FieldType == typeof(IntPtr)) + return (IntPtr)fi.GetValue(obj); + } + throw new ApplicationException("Could not find an IntPtr field"); + } + + public byte[] Decrypt(int methodId, uint rid) { + decryptedData = null; + currentILBytes = dmd.reflectionModule.ResolveMethod(0x06000000 + (int)rid).GetMethodBody().GetILAsByteArray(); + + invoker.DynamicInvoke(new object[1] { methodId }); + return decryptedData; + } + + protected unsafe void SaveDecryptedData(byte* pMethodCode, int methodSize) { + decryptedData = new byte[methodSize]; + Marshal.Copy(new IntPtr(pMethodCode), decryptedData, 0, decryptedData.Length); + } + } + + // 2.0.12.0 - 2.0.12.2 + class DecrypterV2_0_12_0 : DecrypterBaseV2_0_12_x { + readonly GetCallerMethodAsILByteArrayDelegate getCallerMethodAsILByteArrayDelegate; + readonly DecryptCallbackDelegate decryptCallbackDelegate; + + [return: MarshalAs(UnmanagedType.SafeArray)] + delegate byte[] GetCallerMethodAsILByteArrayDelegate(IntPtr a, int skipFrames); + unsafe delegate bool DecryptCallbackDelegate(IntPtr a, byte* pMethodCode, int methodSize, int methodId); + + public unsafe DecrypterV2_0_12_0(DynamicMethodsDecrypter dmd) + : base(dmd) { + getCallerMethodAsILByteArrayDelegate = GetCallerMethodAsILByteArray; + decryptCallbackDelegate = MyDecryptCallback; + + *(IntPtr*)pGetILBytes = Marshal.GetFunctionPointerForDelegate(getCallerMethodAsILByteArrayDelegate); + *(IntPtr*)pDecryptCallback = Marshal.GetFunctionPointerForDelegate(decryptCallbackDelegate); + } + + byte[] GetCallerMethodAsILByteArray(IntPtr a, int skipFrames) { + return currentILBytes; + } + + unsafe bool MyDecryptCallback(IntPtr a, byte* pMethodCode, int methodSize, int methodId) { + SaveDecryptedData(pMethodCode, methodSize); + return true; + } + } + + // 2.0.12.3 + class DecrypterV2_0_12_3 : DecrypterBaseV2_0_12_x { + readonly GetCallerMethodAsILByteArrayDelegate getCallerMethodAsILByteArrayDelegate; + readonly DecryptCallbackDelegate decryptCallbackDelegate; + + [return: MarshalAs(UnmanagedType.SafeArray)] + delegate byte[] GetCallerMethodAsILByteArrayDelegate(IntPtr a, int skipFrames, IntPtr c, IntPtr d); + unsafe delegate bool DecryptCallbackDelegate(IntPtr a, byte* pMethodCode, int methodSize, int methodId, IntPtr e); + + public unsafe DecrypterV2_0_12_3(DynamicMethodsDecrypter dmd) + : base(dmd) { + getCallerMethodAsILByteArrayDelegate = GetCallerMethodAsILByteArray; + decryptCallbackDelegate = MyDecryptCallback; + + *(IntPtr*)pGetILBytes = Marshal.GetFunctionPointerForDelegate(getCallerMethodAsILByteArrayDelegate); + *(IntPtr*)pDecryptCallback = Marshal.GetFunctionPointerForDelegate(decryptCallbackDelegate); + } + + byte[] GetCallerMethodAsILByteArray(IntPtr a, int skipFrames, IntPtr c, IntPtr d) { + return currentILBytes; + } + + unsafe bool MyDecryptCallback(IntPtr a, byte* pMethodCode, int methodSize, int methodId, IntPtr e) { + SaveDecryptedData(pMethodCode, methodSize); + return true; + } + } + + public bool MethodReaderHasDelegateTypeFlag { + get { return methodReaderHasDelegateTypeFlag; } + } + public DynamicMethodsDecrypter(ModuleDefMD module, Module reflectionModule) { this.module = module; this.reflectionModule = reflectionModule; @@ -336,15 +445,26 @@ namespace de4dot.code.deobfuscators.ILProtector { } IDecrypter CreateDecrypter() { - return CreateDecrypterV1_0_7_1() ?? - CreateDecrypterV2_0_0_0() ?? - CreateDecrypterV2_0_8_0() ?? - CreateDecrypterV2_0_8_5() ?? - CreateDecrypterV2_0_9_0(); + var version = reflectionProtectModule.Assembly.GetName().Version; + if (reflectionProtectModule.Assembly.GetName().Version < new Version(2, 0, 12, 0)) { + return CreateDecrypterV1_0_7_0() ?? + CreateDecrypterV2_0_0_0() ?? + CreateDecrypterV2_0_8_0() ?? + CreateDecrypterV2_0_8_5() ?? + CreateDecrypterV2_0_9_0(); + } + + methodReaderHasDelegateTypeFlag = true; + if (version < new Version(2, 0, 12, 3)) + return CreateDecrypterV2_0_12_0(); + if (version < new Version(2, 0, 12, 4)) + return CreateDecrypterV2_0_12_3(); + + return null; } - IDecrypter CreateDecrypterV1_0_7_1() { - var delegateField = FindDelegateFieldV1_0_7_1(protectMainType); + IDecrypter CreateDecrypterV1_0_7_0() { + var delegateField = FindDelegateFieldV1_0_7_0(protectMainType); if (delegateField == null) return null; @@ -383,6 +503,14 @@ namespace de4dot.code.deobfuscators.ILProtector { return new DecrypterV2_0_9_0(this, delegateField); } + IDecrypter CreateDecrypterV2_0_12_0() { + return new DecrypterV2_0_12_0(this); + } + + IDecrypter CreateDecrypterV2_0_12_3() { + return new DecrypterV2_0_12_3(this); + } + static readonly byte[] ilpPublicKeyToken = new byte[8] { 0x20, 0x12, 0xD3, 0xC0, 0x55, 0x1F, 0xE0, 0x3D }; static Assembly GetProtectAssembly() { foreach (var asm in AppDomain.CurrentDomain.GetAssemblies()) { @@ -425,7 +553,7 @@ namespace de4dot.code.deobfuscators.ILProtector { return FindDelegateField(module.GlobalType, "System.Delegate", "(System.Int32)"); } - static FieldDef FindDelegateFieldV1_0_7_1(TypeDef mainType) { + static FieldDef FindDelegateFieldV1_0_7_0(TypeDef mainType) { return FindDelegateField(mainType, "System.Boolean", "(System.Int32,System.Int32,System.Int32,System.Byte*&,System.Int32&)"); } diff --git a/de4dot.code/deobfuscators/ILProtector/DynamicMethodsDecrypterService.cs b/de4dot.code/deobfuscators/ILProtector/DynamicMethodsDecrypterService.cs index ead8f085..7f8cf096 100644 --- a/de4dot.code/deobfuscators/ILProtector/DynamicMethodsDecrypterService.cs +++ b/de4dot.code/deobfuscators/ILProtector/DynamicMethodsDecrypterService.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. @@ -26,9 +26,11 @@ using AssemblyData; namespace de4dot.code.deobfuscators.ILProtector { sealed class DynamicMethodsDecrypterService : IUserGenericService { public const int MSG_DECRYPT_METHODS = 0; + public const int MSG_HAS_DELEGATE_TYPE_FLAG = 1; Module reflObfModule; ModuleDefMD obfModule; + bool hasDelegateTypeFlag; [CreateUserGenericService] public static IUserGenericService Create() { @@ -51,6 +53,9 @@ namespace de4dot.code.deobfuscators.ILProtector { case MSG_DECRYPT_METHODS: return DecryptMethods(args[0] as IList); + case MSG_HAS_DELEGATE_TYPE_FLAG: + return hasDelegateTypeFlag; + default: throw new ApplicationException(string.Format("Invalid msg: {0:X8}", msg)); } @@ -65,6 +70,8 @@ namespace de4dot.code.deobfuscators.ILProtector { for (int i = 0; i < methodIds.Count; i += 2) infos.Add(decrypter.Decrypt(methodIds[i], (uint)methodIds[i + 1])); + hasDelegateTypeFlag = decrypter.MethodReaderHasDelegateTypeFlag; + return infos; } } diff --git a/de4dot.code/deobfuscators/ILProtector/DynamicMethodsRestorer.cs b/de4dot.code/deobfuscators/ILProtector/DynamicMethodsRestorer.cs index c54f007e..7712eb3e 100644 --- a/de4dot.code/deobfuscators/ILProtector/DynamicMethodsRestorer.cs +++ b/de4dot.code/deobfuscators/ILProtector/DynamicMethodsRestorer.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. @@ -42,6 +42,7 @@ namespace de4dot.code.deobfuscators.ILProtector { client.GenericService.LoadUserService(typeof(DynamicMethodsDecrypterService), null); client.GenericService.LoadAssembly(module.Location); decryptedData = client.GenericService.SendMessage(DynamicMethodsDecrypterService.MSG_DECRYPT_METHODS, new object[] { GetMethodIds() }) as IList; + MethodReaderHasDelegateTypeFlag = (bool)client.GenericService.SendMessage(DynamicMethodsDecrypterService.MSG_HAS_DELEGATE_TYPE_FLAG, new object[0]); } if (decryptedData == null) diff --git a/de4dot.code/deobfuscators/ILProtector/MainType.cs b/de4dot.code/deobfuscators/ILProtector/MainType.cs index bb026d4d..e7c31ff1 100644 --- a/de4dot.code/deobfuscators/ILProtector/MainType.cs +++ b/de4dot.code/deobfuscators/ILProtector/MainType.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.code/deobfuscators/ILProtector/MethodReader.cs b/de4dot.code/deobfuscators/ILProtector/MethodReader.cs index ab81e9d8..700cdaf5 100644 --- a/de4dot.code/deobfuscators/ILProtector/MethodReader.cs +++ b/de4dot.code/deobfuscators/ILProtector/MethodReader.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. @@ -31,6 +31,7 @@ namespace de4dot.code.deobfuscators.ILProtector { ModuleDefMD module; MethodFlags flags; TypeDef delegateType; + bool hasDelegateTypeFlag; [Flags] enum MethodFlags { @@ -38,6 +39,7 @@ namespace de4dot.code.deobfuscators.ILProtector { HasLocals = 2, HasInstructions = 4, HasExceptionHandlers = 8, + HasDelegateType = 0x10, } public TypeDef DelegateType { @@ -60,6 +62,15 @@ namespace de4dot.code.deobfuscators.ILProtector { get { return (flags & MethodFlags.HasExceptionHandlers) != 0; } } + bool HasDelegateType { + get { return !hasDelegateTypeFlag || (flags & MethodFlags.HasDelegateType) != 0; } + } + + public bool HasDelegateTypeFlag { + get { return hasDelegateTypeFlag; } + set { hasDelegateTypeFlag = value; } + } + public MethodReader(ModuleDefMD module, byte[] data, IList parameters) : base(MemoryImageStream.Create(data), parameters) { this.module = module; @@ -67,9 +78,11 @@ namespace de4dot.code.deobfuscators.ILProtector { public void Read() { flags = (MethodFlags)reader.ReadByte(); - delegateType = Resolve(ReadTypeToken()); - if (!DotNetUtils.DerivesFromDelegate(delegateType)) - throw new ApplicationException("Invalid delegate type"); + if (HasDelegateType) { + delegateType = Resolve(ReadTypeToken()); + if (!DotNetUtils.DerivesFromDelegate(delegateType)) + throw new ApplicationException("Invalid delegate type"); + } if (HasLocals) ReadLocals((int)reader.Read7BitEncodedUInt32()); if (HasInstructions) @@ -104,29 +117,29 @@ namespace de4dot.code.deobfuscators.ILProtector { TypeSig ReadType() { switch ((ElementType)reader.ReadByte()) { - case ElementType.Void: return module.CorLibTypes.Void; - case ElementType.Boolean: return module.CorLibTypes.Boolean; - case ElementType.Char: return module.CorLibTypes.Char; - case ElementType.I1: return module.CorLibTypes.SByte; - case ElementType.U1: return module.CorLibTypes.Byte; - case ElementType.I2: return module.CorLibTypes.Int16; - case ElementType.U2: return module.CorLibTypes.UInt16; - case ElementType.I4: return module.CorLibTypes.Int32; - case ElementType.U4: return module.CorLibTypes.UInt32; - case ElementType.I8: return module.CorLibTypes.Int64; - case ElementType.U8: return module.CorLibTypes.UInt64; - case ElementType.R4: return module.CorLibTypes.Single; - case ElementType.R8: return module.CorLibTypes.Double; - case ElementType.String: return module.CorLibTypes.String; - case ElementType.Ptr: return new PtrSig(ReadType()); - case ElementType.ByRef: return new ByRefSig(ReadType()); - case ElementType.TypedByRef: return module.CorLibTypes.TypedReference; - case ElementType.I: return module.CorLibTypes.IntPtr; - case ElementType.U: return module.CorLibTypes.UIntPtr; - case ElementType.Object: return module.CorLibTypes.Object; - case ElementType.SZArray: return new SZArraySig(ReadType()); - case ElementType.Sentinel: ReadType(); return new SentinelSig(); - case ElementType.Pinned: return new PinnedSig(ReadType()); + case ElementType.Void: return module.CorLibTypes.Void; + case ElementType.Boolean: return module.CorLibTypes.Boolean; + case ElementType.Char: return module.CorLibTypes.Char; + case ElementType.I1: return module.CorLibTypes.SByte; + case ElementType.U1: return module.CorLibTypes.Byte; + case ElementType.I2: return module.CorLibTypes.Int16; + case ElementType.U2: return module.CorLibTypes.UInt16; + case ElementType.I4: return module.CorLibTypes.Int32; + case ElementType.U4: return module.CorLibTypes.UInt32; + case ElementType.I8: return module.CorLibTypes.Int64; + case ElementType.U8: return module.CorLibTypes.UInt64; + case ElementType.R4: return module.CorLibTypes.Single; + case ElementType.R8: return module.CorLibTypes.Double; + case ElementType.String: return module.CorLibTypes.String; + case ElementType.Ptr: return new PtrSig(ReadType()); + case ElementType.ByRef: return new ByRefSig(ReadType()); + case ElementType.TypedByRef:return module.CorLibTypes.TypedReference; + case ElementType.I: return module.CorLibTypes.IntPtr; + case ElementType.U: return module.CorLibTypes.UIntPtr; + case ElementType.Object: return module.CorLibTypes.Object; + case ElementType.SZArray: return new SZArraySig(ReadType()); + case ElementType.Sentinel: ReadType(); return new SentinelSig(); + case ElementType.Pinned: return new PinnedSig(ReadType()); case ElementType.ValueType: case ElementType.Class: diff --git a/de4dot.code/deobfuscators/ILProtector/MethodsDecrypterBase.cs b/de4dot.code/deobfuscators/ILProtector/MethodsDecrypterBase.cs index 2ac46930..8b27224a 100644 --- a/de4dot.code/deobfuscators/ILProtector/MethodsDecrypterBase.cs +++ b/de4dot.code/deobfuscators/ILProtector/MethodsDecrypterBase.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. @@ -37,6 +37,8 @@ namespace de4dot.code.deobfuscators.ILProtector { get { return delegateTypes; } } + public bool MethodReaderHasDelegateTypeFlag { get; set; } + public MethodsDecrypterBase(ModuleDefMD module, MainType mainType) { this.module = module; this.mainType = mainType; @@ -84,10 +86,12 @@ namespace de4dot.code.deobfuscators.ILProtector { var methodInfo = methodInfos[methodId.Value]; methodInfos.Remove(methodId.Value); var methodReader = new MethodReader(module, methodInfo.data, parameters); + methodReader.HasDelegateTypeFlag = MethodReaderHasDelegateTypeFlag; methodReader.Read(); RestoreMethod(method, methodReader); - delegateTypes.Add(methodReader.DelegateType); + if (methodReader.DelegateType != null) + delegateTypes.Add(methodReader.DelegateType); return true; } diff --git a/de4dot.code/deobfuscators/ILProtector/RuntimeFileInfo.cs b/de4dot.code/deobfuscators/ILProtector/RuntimeFileInfo.cs index b6333553..2cef7981 100644 --- a/de4dot.code/deobfuscators/ILProtector/RuntimeFileInfo.cs +++ b/de4dot.code/deobfuscators/ILProtector/RuntimeFileInfo.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. @@ -24,9 +24,6 @@ using dnlib.DotNet; namespace de4dot.code.deobfuscators.ILProtector { class RuntimeFileInfo { - const uint HASH_FILE_OFFSET = 0x00040000; - const int HASH_SIZE = 0x1000; - public MethodDef ProtectMethod { get; private set; } public string PathName { get; private set; } public string Name { get; private set; } @@ -45,45 +42,53 @@ namespace de4dot.code.deobfuscators.ILProtector { } static readonly VersionInfo[] versionInfo32 = new VersionInfo[] { - new VersionInfo(new Version(1, 0, 7, 0), new byte[] { 0x94, 0x79, 0x6E, 0xC1, 0x1F, 0x6D, 0xE9, 0xE3, 0x2F, 0x5E, 0xA3, 0x57, 0x71, 0x02, 0x22, 0x6A }), - new VersionInfo(new Version(1, 0, 7, 1), new byte[] { 0x8D, 0xCE, 0xAB, 0x0C, 0xA6, 0xA9, 0x4A, 0xA2, 0xCE, 0x43, 0xDE, 0x38, 0xEA, 0xDE, 0x0D, 0x3A }), - new VersionInfo(new Version(1, 0, 8, 0), new byte[] { 0x44, 0x09, 0x33, 0xCE, 0x90, 0x43, 0xF9, 0xC2, 0x2F, 0x11, 0x40, 0x1D, 0x18, 0xDA, 0x63, 0x3B }), - new VersionInfo(new Version(2, 0, 0, 0), new byte[] { 0xFD, 0x1D, 0x2B, 0x73, 0x2F, 0xD8, 0x27, 0x5F, 0xA3, 0x83, 0x76, 0x36, 0x29, 0x8E, 0x51, 0xA9 }), - new VersionInfo(new Version(2, 0, 1, 0), new byte[] { 0x0D, 0x5E, 0xC2, 0xA5, 0x0D, 0x7C, 0xE1, 0x8B, 0x57, 0x9F, 0xC8, 0x16, 0x25, 0x95, 0x70, 0xEB }), - new VersionInfo(new Version(2, 0, 2, 0), new byte[] { 0x9C, 0xED, 0x53, 0x3A, 0x97, 0x4B, 0x9E, 0xC7, 0xF4, 0x82, 0xE9, 0x84, 0xB4, 0x9A, 0xEB, 0xA6 }), - new VersionInfo(new Version(2, 0, 3, 0), new byte[] { 0x0C, 0xDD, 0xCF, 0x04, 0x20, 0x6E, 0x7A, 0x48, 0x26, 0x8B, 0x97, 0x8E, 0x58, 0x17, 0x9B, 0x51 }), - new VersionInfo(new Version(2, 0, 4, 0), new byte[] { 0x1D, 0x41, 0xE7, 0x6D, 0x17, 0xED, 0x51, 0x37, 0xA0, 0xFC, 0x98, 0x5F, 0x19, 0x97, 0xEF, 0x9D }), - new VersionInfo(new Version(2, 0, 5, 0), new byte[] { 0x60, 0xD8, 0x1D, 0x1C, 0x0C, 0xBF, 0x46, 0x82, 0x9C, 0xE3, 0x73, 0x8D, 0x88, 0x2E, 0x0E, 0xBA }), - new VersionInfo(new Version(2, 0, 6, 0), new byte[] { 0x85, 0x89, 0x66, 0x39, 0xC3, 0x04, 0x3D, 0x3F, 0xFD, 0xBC, 0xFA, 0x70, 0x1D, 0x04, 0x59, 0x89 }), - new VersionInfo(new Version(2, 0, 7, 0), new byte[] { 0x16, 0x5C, 0xE1, 0xA4, 0x30, 0xF7, 0x55, 0x26, 0x45, 0xB8, 0x43, 0x99, 0x2A, 0xC9, 0x6F, 0xD9 }), - new VersionInfo(new Version(2, 0, 7, 5), new byte[] { 0x11, 0x50, 0x25, 0x2C, 0x26, 0x03, 0x8B, 0xDA, 0xBC, 0x98, 0x7E, 0x81, 0x97, 0x3E, 0xCE, 0x31 }), - new VersionInfo(new Version(2, 0, 7, 6), new byte[] { 0x6F, 0x9C, 0xF2, 0xDB, 0x83, 0x76, 0x92, 0x6A, 0xC4, 0xAA, 0xAE, 0xFA, 0x3D, 0xB3, 0x69, 0x59 }), - new VersionInfo(new Version(2, 0, 8, 0), new byte[] { 0x96, 0x84, 0xA0, 0x32, 0x3A, 0xB5, 0xAD, 0x89, 0xD7, 0xCD, 0x69, 0x34, 0xF1, 0x5D, 0xF3, 0x3A }), - new VersionInfo(new Version(2, 0, 8, 5), new byte[] { 0xB8, 0xCF, 0xEA, 0xBA, 0xB6, 0xAD, 0xE5, 0xCC, 0xFB, 0xA4, 0xE4, 0xFE, 0x1A, 0x83, 0xE5, 0x85 }), - new VersionInfo(new Version(2, 0, 9, 0), new byte[] { 0xA4, 0x68, 0x70, 0xA2, 0x1E, 0xBB, 0x99, 0xAB, 0xDD, 0x8C, 0xCA, 0x55, 0x32, 0x12, 0x95, 0xB5 }), - new VersionInfo(new Version(2, 0, 10, 0), new byte[] { 0xC5, 0xDC, 0x27, 0x22, 0x8F, 0x09, 0xFB, 0x56, 0x84, 0x6E, 0x07, 0x62, 0x4E, 0xBF, 0x71, 0xA6 }), - new VersionInfo(new Version(2, 0, 11, 0), new byte[] { 0x57, 0xAD, 0xBC, 0xB0, 0x7F, 0x80, 0xEF, 0xEA, 0xC3, 0xB7, 0x9F, 0x27, 0x87, 0x0A, 0x4B, 0xFF }), + new VersionInfo(new Version(1, 0, 7, 0), new byte[] { 0x1B, 0x7A, 0x48, 0x9E, 0x70, 0x69, 0x3C, 0x51, 0xDB, 0x3E, 0xD8, 0x09, 0x71, 0x1F, 0x16, 0x33 }), + new VersionInfo(new Version(1, 0, 7, 1), new byte[] { 0xD2, 0x76, 0x37, 0xA2, 0xE4, 0xCC, 0x66, 0xAB, 0x6A, 0x72, 0x45, 0x25, 0x06, 0x64, 0x05, 0xD7 }), + new VersionInfo(new Version(1, 0, 8, 0), new byte[] { 0x0B, 0x3D, 0xFD, 0xB3, 0x8B, 0xCF, 0x59, 0x42, 0x9C, 0x4C, 0x2B, 0x43, 0xA4, 0x22, 0x91, 0xB0 }), + new VersionInfo(new Version(2, 0, 0, 0), new byte[] { 0xC5, 0x8A, 0x92, 0x92, 0xBD, 0xA4, 0x6D, 0xF2, 0xEA, 0xF8, 0x4F, 0x79, 0x89, 0xF2, 0x44, 0x38 }), + new VersionInfo(new Version(2, 0, 1, 0), new byte[] { 0xFD, 0x79, 0x53, 0x6C, 0xDA, 0x10, 0x3F, 0x29, 0xBF, 0x52, 0x4B, 0x70, 0xB2, 0xFF, 0x55, 0x25 }), + new VersionInfo(new Version(2, 0, 2, 0), new byte[] { 0xED, 0xC2, 0xB2, 0x07, 0x1F, 0x1A, 0xF0, 0x4D, 0x9B, 0x37, 0x6F, 0x10, 0x7A, 0xDA, 0xA2, 0xED }), + new VersionInfo(new Version(2, 0, 3, 0), new byte[] { 0xF3, 0xD8, 0x48, 0x69, 0x2B, 0x39, 0x99, 0x48, 0xB7, 0x8D, 0x0D, 0x72, 0xC5, 0xE4, 0xF5, 0x6D }), + new VersionInfo(new Version(2, 0, 4, 0), new byte[] { 0xBC, 0x39, 0x58, 0x38, 0x5C, 0x2F, 0x5A, 0x50, 0xCF, 0xF7, 0x47, 0xC7, 0xEC, 0x52, 0xC6, 0xD0 }), + new VersionInfo(new Version(2, 0, 5, 0), new byte[] { 0x90, 0x42, 0x0F, 0xB5, 0x84, 0x09, 0x90, 0xE5, 0xD8, 0x10, 0xF1, 0xAF, 0xF5, 0xBC, 0xA5, 0xF8 }), + new VersionInfo(new Version(2, 0, 6, 0), new byte[] { 0xD1, 0x8D, 0x0C, 0x3C, 0x51, 0xBD, 0x36, 0x37, 0x17, 0xAB, 0xEC, 0x92, 0x19, 0x1B, 0xB0, 0xD6 }), + new VersionInfo(new Version(2, 0, 7, 0), new byte[] { 0x02, 0xD1, 0x75, 0x77, 0x12, 0x6D, 0x4E, 0x86, 0x90, 0x34, 0x6A, 0xBB, 0x56, 0x0E, 0x6A, 0xEA }), + new VersionInfo(new Version(2, 0, 7, 5), new byte[] { 0x7D, 0x5C, 0xBE, 0x21, 0x0B, 0xA9, 0x15, 0xFF, 0xE6, 0xC9, 0xD5, 0xFD, 0x7C, 0xA0, 0xAA, 0xC1 }), + new VersionInfo(new Version(2, 0, 7, 6), new byte[] { 0x0D, 0x03, 0xB7, 0x1A, 0x74, 0x8E, 0x6B, 0x94, 0x2B, 0xD4, 0x33, 0x24, 0x49, 0xF8, 0x38, 0xD2 }), + new VersionInfo(new Version(2, 0, 8, 0), new byte[] { 0xE6, 0xD6, 0x07, 0x89, 0x03, 0xA8, 0xE3, 0xD7, 0x86, 0x5A, 0x3D, 0xC2, 0x86, 0xF5, 0x0F, 0x67 }), + new VersionInfo(new Version(2, 0, 8, 5), new byte[] { 0xFC, 0x79, 0x83, 0x61, 0xD2, 0x99, 0x8E, 0xE8, 0x2C, 0x5F, 0x14, 0xBA, 0xCB, 0xB9, 0x28, 0xF2 }), + new VersionInfo(new Version(2, 0, 9, 0), new byte[] { 0x7A, 0x88, 0xD8, 0xC3, 0xB8, 0x77, 0xAA, 0x13, 0xC0, 0x6C, 0x43, 0x88, 0x0D, 0x66, 0xFE, 0x7A }), + new VersionInfo(new Version(2, 0, 10, 0), new byte[] { 0xE5, 0x8E, 0xEB, 0x26, 0x1A, 0x1C, 0x44, 0xA8, 0xFF, 0x88, 0x14, 0xE7, 0x38, 0x13, 0xE5, 0x6D }), + new VersionInfo(new Version(2, 0, 11, 0), new byte[] { 0x67, 0xB8, 0xF7, 0x15, 0x70, 0x1D, 0xF2, 0x57, 0x00, 0x42, 0xF3, 0xA4, 0x83, 0x07, 0x62, 0xA3 }), + new VersionInfo(new Version(2, 0, 11, 1), new byte[] { 0x2E, 0xC9, 0x53, 0xA0, 0x3C, 0x9B, 0x08, 0xDA, 0x88, 0x84, 0x37, 0xFC, 0x07, 0xAE, 0x8B, 0xEC }), + new VersionInfo(new Version(2, 0, 12, 0), new byte[] { 0x63, 0x8B, 0x5C, 0xE9, 0x89, 0x83, 0x57, 0x9D, 0xDC, 0xC3, 0xBD, 0xD9, 0xDB, 0x54, 0xBE, 0x66 }), + new VersionInfo(new Version(2, 0, 12, 2), new byte[] { 0xD5, 0x46, 0x38, 0xC7, 0x48, 0xF6, 0x3C, 0x1C, 0x1E, 0x7F, 0x3B, 0x7B, 0x5B, 0xE0, 0x49, 0x46 }), + new VersionInfo(new Version(2, 0, 12, 3), new byte[] { 0x35, 0xA3, 0x53, 0xE9, 0x9E, 0x30, 0x6E, 0x9C, 0x0F, 0x46, 0x20, 0x9A, 0x91, 0xD2, 0x95, 0x18 }), }; static readonly VersionInfo[] versionInfo64 = new VersionInfo[] { // No sig for 1.0.7.0 x64 since I don't have it yet. - new VersionInfo(new Version(1, 0, 7, 1), new byte[] { 0x68, 0x4C, 0xC0, 0xC2, 0x55, 0x75, 0x72, 0x09, 0x12, 0x10, 0xA4, 0xF3, 0xFE, 0x95, 0x4D, 0x7A }), - new VersionInfo(new Version(1, 0, 8, 0), new byte[] { 0x99, 0xAF, 0x3D, 0x39, 0x16, 0xC2, 0xD6, 0x10, 0x6E, 0x09, 0x64, 0xDE, 0xA4, 0xB3, 0x30, 0xE5 }), - new VersionInfo(new Version(2, 0, 0, 0), new byte[] { 0x02, 0x90, 0xDA, 0xBD, 0x37, 0xEE, 0x20, 0x86, 0xA7, 0x30, 0x31, 0x6D, 0x92, 0xEF, 0xB3, 0x01 }), - new VersionInfo(new Version(2, 0, 1, 0), new byte[] { 0xE8, 0xE7, 0x11, 0x6B, 0x52, 0x60, 0x5A, 0x4D, 0x5A, 0xC6, 0x76, 0xF5, 0xD3, 0x64, 0xB1, 0x03 }), - new VersionInfo(new Version(2, 0, 2, 0), new byte[] { 0xD3, 0x37, 0xA1, 0x69, 0xF4, 0x25, 0x86, 0x19, 0xC6, 0x89, 0x70, 0x82, 0x9A, 0x3E, 0xCC, 0x04 }), - new VersionInfo(new Version(2, 0, 3, 0), new byte[] { 0xB1, 0xF8, 0xCB, 0xFD, 0x2D, 0x47, 0x36, 0xF1, 0x8A, 0x1D, 0xEF, 0xA7, 0x07, 0x0C, 0xD9, 0x74 }), - new VersionInfo(new Version(2, 0, 4, 0), new byte[] { 0x53, 0xC7, 0xA8, 0x3F, 0xD8, 0x9D, 0xA1, 0x85, 0x04, 0x50, 0x1D, 0x19, 0xF4, 0x1F, 0xF4, 0x44 }), - new VersionInfo(new Version(2, 0, 5, 0), new byte[] { 0x32, 0x82, 0x4B, 0xC7, 0xBB, 0x32, 0xBF, 0x9F, 0xB7, 0x9B, 0x06, 0x90, 0x7B, 0xB0, 0x7B, 0x7C }), - new VersionInfo(new Version(2, 0, 6, 0), new byte[] { 0x4F, 0x02, 0x86, 0xA6, 0xCA, 0xFD, 0xC1, 0x47, 0xA1, 0xDB, 0x2F, 0x73, 0x94, 0x38, 0x2B, 0xA7 }), - new VersionInfo(new Version(2, 0, 7, 0), new byte[] { 0x43, 0xA4, 0xC1, 0xA8, 0xC7, 0x36, 0x55, 0xEB, 0x3F, 0xFF, 0xA0, 0xB3, 0x85, 0x00, 0x21, 0x99 }), - new VersionInfo(new Version(2, 0, 7, 5), new byte[] { 0x6A, 0xA8, 0x2B, 0x28, 0x0B, 0xEE, 0x4C, 0xF0, 0x57, 0x3F, 0x43, 0xD4, 0xFB, 0xBC, 0x5E, 0x8C }), - new VersionInfo(new Version(2, 0, 7, 6), new byte[] { 0xE5, 0xD7, 0x81, 0xBD, 0x85, 0x02, 0x10, 0xAC, 0x92, 0x4A, 0xF0, 0x35, 0xD2, 0x4C, 0x50, 0xA5 }), - new VersionInfo(new Version(2, 0, 8, 0), new byte[] { 0x14, 0x44, 0xD1, 0x34, 0x69, 0x4D, 0xC7, 0xB7, 0x4D, 0x91, 0x0E, 0x6C, 0x4C, 0x9B, 0x46, 0x8E }), - new VersionInfo(new Version(2, 0, 8, 5), new byte[] { 0x5C, 0xEE, 0x47, 0x36, 0x2B, 0x10, 0xAD, 0x5F, 0x66, 0x6D, 0x3F, 0xD4, 0xF4, 0x4A, 0xFF, 0xA1 }), - new VersionInfo(new Version(2, 0, 9, 0), new byte[] { 0x2B, 0x80, 0x93, 0x78, 0x22, 0x29, 0x8C, 0xA1, 0xED, 0xE4, 0x59, 0x1A, 0xEC, 0x5B, 0xAF, 0xA7 }), - new VersionInfo(new Version(2, 0, 10, 0), new byte[] { 0xE3, 0x56, 0xB4, 0x98, 0x38, 0x27, 0x29, 0x27, 0x56, 0x87, 0x88, 0xAD, 0xA3, 0x50, 0x61, 0x24 }), - new VersionInfo(new Version(2, 0, 11, 0), new byte[] { 0x08, 0xDD, 0x40, 0x28, 0x08, 0x61, 0xDA, 0xD3, 0xD1, 0x38, 0x2F, 0x8A, 0xE0, 0x21, 0x0E, 0xE9 }), + new VersionInfo(new Version(1, 0, 7, 1), new byte[] { 0x8E, 0xB4, 0x61, 0x12, 0xDF, 0x76, 0x6F, 0xAB, 0xF0, 0x2C, 0x7A, 0x3A, 0x0D, 0x71, 0xE8, 0xB0 }), + new VersionInfo(new Version(1, 0, 8, 0), new byte[] { 0x04, 0xB1, 0xDA, 0x92, 0xE7, 0x59, 0x54, 0x82, 0x0F, 0x46, 0xD6, 0x08, 0xA2, 0x69, 0xB7, 0x75 }), + new VersionInfo(new Version(2, 0, 0, 0), new byte[] { 0xC7, 0xD9, 0x62, 0x7E, 0xEC, 0x6D, 0x10, 0x8A, 0xBF, 0x71, 0x7A, 0x4C, 0xC0, 0x3E, 0xAE, 0x9E }), + new VersionInfo(new Version(2, 0, 1, 0), new byte[] { 0xD3, 0xCF, 0x89, 0x80, 0xFD, 0xB7, 0x38, 0xC2, 0x3C, 0xDF, 0x4E, 0x9D, 0xCE, 0xDD, 0x95, 0xDE }), + new VersionInfo(new Version(2, 0, 2, 0), new byte[] { 0x44, 0xB7, 0xBA, 0xF9, 0x0A, 0x5B, 0xD6, 0xE7, 0xBE, 0x7A, 0x47, 0x82, 0x3B, 0x24, 0xB3, 0x73 }), + new VersionInfo(new Version(2, 0, 3, 0), new byte[] { 0x8D, 0x25, 0x16, 0x40, 0xB6, 0xCF, 0x54, 0xF8, 0x78, 0xBE, 0x3A, 0xE5, 0x3D, 0x5E, 0xF9, 0x60 }), + new VersionInfo(new Version(2, 0, 4, 0), new byte[] { 0x7F, 0x49, 0xEA, 0x93, 0x8E, 0x81, 0xFC, 0xF5, 0x56, 0x94, 0x73, 0xA8, 0x52, 0x61, 0x79, 0x60 }), + new VersionInfo(new Version(2, 0, 5, 0), new byte[] { 0x08, 0xDB, 0xA2, 0x8E, 0xD7, 0x27, 0xBB, 0xD0, 0x69, 0xF5, 0x63, 0x28, 0x46, 0xBF, 0xBB, 0xB3 }), + new VersionInfo(new Version(2, 0, 6, 0), new byte[] { 0x09, 0xFC, 0x92, 0x18, 0xC8, 0x34, 0xD6, 0x55, 0xE3, 0x7C, 0xA5, 0xCB, 0x15, 0x28, 0x59, 0x94 }), + new VersionInfo(new Version(2, 0, 7, 0), new byte[] { 0x7B, 0x36, 0x68, 0xA0, 0x9E, 0xCB, 0xB9, 0x73, 0x5B, 0x1A, 0xAC, 0x50, 0x7E, 0x59, 0x1C, 0xB7 }), + new VersionInfo(new Version(2, 0, 7, 5), new byte[] { 0x14, 0x13, 0x30, 0x60, 0x1A, 0xB0, 0x6F, 0x37, 0x82, 0xE3, 0x67, 0x16, 0x6C, 0x62, 0x30, 0x16 }), + new VersionInfo(new Version(2, 0, 7, 6), new byte[] { 0x98, 0xDE, 0x41, 0x4B, 0x15, 0x2C, 0xF7, 0x34, 0x2A, 0xEF, 0xE3, 0x91, 0x07, 0x7F, 0x0F, 0xE7 }), + new VersionInfo(new Version(2, 0, 8, 0), new byte[] { 0x21, 0x40, 0xED, 0xC6, 0xA2, 0x13, 0x3D, 0xCA, 0x22, 0x11, 0x02, 0x75, 0xFC, 0xE6, 0x3A, 0x51 }), + new VersionInfo(new Version(2, 0, 8, 5), new byte[] { 0xF5, 0x67, 0xC1, 0x44, 0xF6, 0x2F, 0xBA, 0x01, 0xA3, 0x01, 0x91, 0x60, 0xDF, 0x99, 0xAB, 0x0C }), + new VersionInfo(new Version(2, 0, 9, 0), new byte[] { 0x04, 0x17, 0xF3, 0xEA, 0x97, 0x24, 0x48, 0xC0, 0x01, 0x2E, 0x45, 0x80, 0x9D, 0x5B, 0x7C, 0xDF }), + new VersionInfo(new Version(2, 0, 10, 0), new byte[] { 0xD8, 0x79, 0x05, 0xC9, 0x2D, 0xA6, 0x5B, 0x7D, 0xEE, 0xA6, 0x13, 0x25, 0x7D, 0x29, 0x73, 0xB4 }), + new VersionInfo(new Version(2, 0, 11, 0), new byte[] { 0x49, 0xAD, 0x40, 0x10, 0xD4, 0x03, 0x04, 0xB4, 0x3C, 0xD2, 0x36, 0x67, 0x38, 0x62, 0x9C, 0xE8 }), + new VersionInfo(new Version(2, 0, 11, 1), new byte[] { 0x1D, 0x6C, 0xB6, 0xC8, 0xB3, 0x07, 0x53, 0x24, 0x6F, 0xC0, 0xF3, 0x4F, 0x5E, 0x8B, 0x9F, 0xD1 }), + new VersionInfo(new Version(2, 0, 12, 0), new byte[] { 0x5F, 0x42, 0xA5, 0x6C, 0x19, 0xC6, 0x73, 0x9E, 0xE6, 0x74, 0x62, 0x3B, 0x8A, 0x51, 0xBB, 0x93 }), + new VersionInfo(new Version(2, 0, 12, 2), new byte[] { 0x10, 0x91, 0xED, 0x05, 0x9C, 0x31, 0x0B, 0x63, 0x76, 0xD7, 0x4A, 0xEC, 0xDE, 0x99, 0x6D, 0xD0 }), + new VersionInfo(new Version(2, 0, 12, 3), new byte[] { 0x38, 0x86, 0xE0, 0xBF, 0xC6, 0x64, 0xB9, 0xA0, 0x07, 0xED, 0xDB, 0x02, 0x40, 0xD0, 0x57, 0xE8 }), }; public RuntimeFileInfo(MethodDef protectMethod) { @@ -125,19 +130,12 @@ namespace de4dot.code.deobfuscators.ILProtector { static byte[] GetHash(string fullPath) { try { - using (var reader = new BinaryReader(new FileStream(fullPath, FileMode.Open, FileAccess.Read, FileShare.Read))) { - reader.BaseStream.Position = HASH_FILE_OFFSET; - var bytes = reader.ReadBytes(HASH_SIZE); - if (bytes.Length != HASH_SIZE) - return null; - - using (var hasher = MD5.Create()) { - using (var outStream = new NullStream()) { - using (var csStream = new CryptoStream(outStream, hasher, CryptoStreamMode.Write)) - new BinaryWriter(csStream).Write(bytes); - } - return hasher.Hash; + using (var hasher = MD5.Create()) { + using (var outStream = new NullStream()) { + using (var csStream = new CryptoStream(outStream, hasher, CryptoStreamMode.Write)) + new BinaryWriter(csStream).Write(File.ReadAllBytes(fullPath)); } + return hasher.Hash; } } catch { diff --git a/de4dot.code/deobfuscators/ILProtector/StaticMethodsDecrypter.cs b/de4dot.code/deobfuscators/ILProtector/StaticMethodsDecrypter.cs index 7bd1e9ee..83d90c08 100644 --- a/de4dot.code/deobfuscators/ILProtector/StaticMethodsDecrypter.cs +++ b/de4dot.code/deobfuscators/ILProtector/StaticMethodsDecrypter.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.code/deobfuscators/ISimpleDeobfuscator.cs b/de4dot.code/deobfuscators/ISimpleDeobfuscator.cs index b549aea2..b39edc2f 100644 --- a/de4dot.code/deobfuscators/ISimpleDeobfuscator.cs +++ b/de4dot.code/deobfuscators/ISimpleDeobfuscator.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.code/deobfuscators/InitializedDataCreator.cs b/de4dot.code/deobfuscators/InitializedDataCreator.cs index ba0c0ebe..bf5dc9b3 100644 --- a/de4dot.code/deobfuscators/InitializedDataCreator.cs +++ b/de4dot.code/deobfuscators/InitializedDataCreator.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.code/deobfuscators/InlinedMethodsFinder.cs b/de4dot.code/deobfuscators/InlinedMethodsFinder.cs index 8daa6761..b4cb39fc 100644 --- a/de4dot.code/deobfuscators/InlinedMethodsFinder.cs +++ b/de4dot.code/deobfuscators/InlinedMethodsFinder.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.code/deobfuscators/MPRESS/Deobfuscator.cs b/de4dot.code/deobfuscators/MPRESS/Deobfuscator.cs index 508951c3..4356b95c 100644 --- a/de4dot.code/deobfuscators/MPRESS/Deobfuscator.cs +++ b/de4dot.code/deobfuscators/MPRESS/Deobfuscator.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.code/deobfuscators/MaxtoCode/CryptDecrypter.cs b/de4dot.code/deobfuscators/MaxtoCode/CryptDecrypter.cs index dcfb7fe2..e73c6227 100644 --- a/de4dot.code/deobfuscators/MaxtoCode/CryptDecrypter.cs +++ b/de4dot.code/deobfuscators/MaxtoCode/CryptDecrypter.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.code/deobfuscators/MaxtoCode/Decrypter6.cs b/de4dot.code/deobfuscators/MaxtoCode/Decrypter6.cs index 64286ae1..a0f91677 100644 --- a/de4dot.code/deobfuscators/MaxtoCode/Decrypter6.cs +++ b/de4dot.code/deobfuscators/MaxtoCode/Decrypter6.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.code/deobfuscators/MaxtoCode/DecrypterInfo.cs b/de4dot.code/deobfuscators/MaxtoCode/DecrypterInfo.cs index 2767b93b..9f3e15c6 100644 --- a/de4dot.code/deobfuscators/MaxtoCode/DecrypterInfo.cs +++ b/de4dot.code/deobfuscators/MaxtoCode/DecrypterInfo.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.code/deobfuscators/MaxtoCode/Deobfuscator.cs b/de4dot.code/deobfuscators/MaxtoCode/Deobfuscator.cs index 969e3473..fbda187f 100644 --- a/de4dot.code/deobfuscators/MaxtoCode/Deobfuscator.cs +++ b/de4dot.code/deobfuscators/MaxtoCode/Deobfuscator.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.code/deobfuscators/MaxtoCode/EncryptionInfos.cs b/de4dot.code/deobfuscators/MaxtoCode/EncryptionInfos.cs index f5efc42e..d1f4808d 100644 --- a/de4dot.code/deobfuscators/MaxtoCode/EncryptionInfos.cs +++ b/de4dot.code/deobfuscators/MaxtoCode/EncryptionInfos.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.code/deobfuscators/MaxtoCode/MainType.cs b/de4dot.code/deobfuscators/MaxtoCode/MainType.cs index 93d0f420..fb32f232 100644 --- a/de4dot.code/deobfuscators/MaxtoCode/MainType.cs +++ b/de4dot.code/deobfuscators/MaxtoCode/MainType.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.code/deobfuscators/MaxtoCode/McKey.cs b/de4dot.code/deobfuscators/MaxtoCode/McKey.cs index 37b77e56..55339d52 100644 --- a/de4dot.code/deobfuscators/MaxtoCode/McKey.cs +++ b/de4dot.code/deobfuscators/MaxtoCode/McKey.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.code/deobfuscators/MaxtoCode/MethodsDecrypter.cs b/de4dot.code/deobfuscators/MaxtoCode/MethodsDecrypter.cs index af2489a7..92c01b54 100644 --- a/de4dot.code/deobfuscators/MaxtoCode/MethodsDecrypter.cs +++ b/de4dot.code/deobfuscators/MaxtoCode/MethodsDecrypter.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.code/deobfuscators/MaxtoCode/PeHeader.cs b/de4dot.code/deobfuscators/MaxtoCode/PeHeader.cs index 5eeeb246..ab96efe4 100644 --- a/de4dot.code/deobfuscators/MaxtoCode/PeHeader.cs +++ b/de4dot.code/deobfuscators/MaxtoCode/PeHeader.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.code/deobfuscators/MaxtoCode/StringDecrypter.cs b/de4dot.code/deobfuscators/MaxtoCode/StringDecrypter.cs index 7ad0f443..f68101dd 100644 --- a/de4dot.code/deobfuscators/MaxtoCode/StringDecrypter.cs +++ b/de4dot.code/deobfuscators/MaxtoCode/StringDecrypter.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.code/deobfuscators/MemberReferenceBuilder.cs b/de4dot.code/deobfuscators/MemberReferenceBuilder.cs index 58bbb7eb..a76f61c9 100644 --- a/de4dot.code/deobfuscators/MemberReferenceBuilder.cs +++ b/de4dot.code/deobfuscators/MemberReferenceBuilder.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.code/deobfuscators/MethodBodyParser.cs b/de4dot.code/deobfuscators/MethodBodyParser.cs index dad9b07c..49101dd3 100644 --- a/de4dot.code/deobfuscators/MethodBodyParser.cs +++ b/de4dot.code/deobfuscators/MethodBodyParser.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.code/deobfuscators/MethodCallRestorerBase.cs b/de4dot.code/deobfuscators/MethodCallRestorerBase.cs index 189549df..6dadfd02 100644 --- a/de4dot.code/deobfuscators/MethodCallRestorerBase.cs +++ b/de4dot.code/deobfuscators/MethodCallRestorerBase.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.code/deobfuscators/MethodCollection.cs b/de4dot.code/deobfuscators/MethodCollection.cs index 5f63b4ea..b31cc10e 100644 --- a/de4dot.code/deobfuscators/MethodCollection.cs +++ b/de4dot.code/deobfuscators/MethodCollection.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.code/deobfuscators/MethodStack.cs b/de4dot.code/deobfuscators/MethodStack.cs index 717bf510..093a8bd9 100644 --- a/de4dot.code/deobfuscators/MethodStack.cs +++ b/de4dot.code/deobfuscators/MethodStack.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.code/deobfuscators/MethodsDecrypter.cs b/de4dot.code/deobfuscators/MethodsDecrypter.cs index 46e52442..fd5bdd11 100644 --- a/de4dot.code/deobfuscators/MethodsDecrypter.cs +++ b/de4dot.code/deobfuscators/MethodsDecrypter.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.code/deobfuscators/NullStream.cs b/de4dot.code/deobfuscators/NullStream.cs index a88b0728..9b5c0021 100644 --- a/de4dot.code/deobfuscators/NullStream.cs +++ b/de4dot.code/deobfuscators/NullStream.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.code/deobfuscators/Operations.cs b/de4dot.code/deobfuscators/Operations.cs index afac7f61..e1dc7f7f 100644 --- a/de4dot.code/deobfuscators/Operations.cs +++ b/de4dot.code/deobfuscators/Operations.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.code/deobfuscators/ProxyCallFixerBase.cs b/de4dot.code/deobfuscators/ProxyCallFixerBase.cs index 02be8fda..2a14920d 100644 --- a/de4dot.code/deobfuscators/ProxyCallFixerBase.cs +++ b/de4dot.code/deobfuscators/ProxyCallFixerBase.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.code/deobfuscators/RandomNameChecker.cs b/de4dot.code/deobfuscators/RandomNameChecker.cs index a5b7e6a9..139ec9fb 100644 --- a/de4dot.code/deobfuscators/RandomNameChecker.cs +++ b/de4dot.code/deobfuscators/RandomNameChecker.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.code/deobfuscators/Rummage/Deobfuscator.cs b/de4dot.code/deobfuscators/Rummage/Deobfuscator.cs index 6a4088bd..510d7670 100644 --- a/de4dot.code/deobfuscators/Rummage/Deobfuscator.cs +++ b/de4dot.code/deobfuscators/Rummage/Deobfuscator.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.code/deobfuscators/Rummage/RummageVersion.cs b/de4dot.code/deobfuscators/Rummage/RummageVersion.cs index cddbd5b7..90ad76c9 100644 --- a/de4dot.code/deobfuscators/Rummage/RummageVersion.cs +++ b/de4dot.code/deobfuscators/Rummage/RummageVersion.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.code/deobfuscators/Rummage/StringDecrypter.cs b/de4dot.code/deobfuscators/Rummage/StringDecrypter.cs index a166be6f..4c3584ca 100644 --- a/de4dot.code/deobfuscators/Rummage/StringDecrypter.cs +++ b/de4dot.code/deobfuscators/Rummage/StringDecrypter.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.code/deobfuscators/Skater_NET/Deobfuscator.cs b/de4dot.code/deobfuscators/Skater_NET/Deobfuscator.cs index 46b11a80..9a462a4b 100644 --- a/de4dot.code/deobfuscators/Skater_NET/Deobfuscator.cs +++ b/de4dot.code/deobfuscators/Skater_NET/Deobfuscator.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.code/deobfuscators/Skater_NET/EnumClassFinder.cs b/de4dot.code/deobfuscators/Skater_NET/EnumClassFinder.cs index 1f895500..3ace2708 100644 --- a/de4dot.code/deobfuscators/Skater_NET/EnumClassFinder.cs +++ b/de4dot.code/deobfuscators/Skater_NET/EnumClassFinder.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.code/deobfuscators/Skater_NET/StringDecrypter.cs b/de4dot.code/deobfuscators/Skater_NET/StringDecrypter.cs index 31f5f9d5..378812e9 100644 --- a/de4dot.code/deobfuscators/Skater_NET/StringDecrypter.cs +++ b/de4dot.code/deobfuscators/Skater_NET/StringDecrypter.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.code/deobfuscators/SmartAssembly/AssemblyResolver.cs b/de4dot.code/deobfuscators/SmartAssembly/AssemblyResolver.cs index 0451e176..e55b0279 100644 --- a/de4dot.code/deobfuscators/SmartAssembly/AssemblyResolver.cs +++ b/de4dot.code/deobfuscators/SmartAssembly/AssemblyResolver.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.code/deobfuscators/SmartAssembly/AssemblyResolverInfo.cs b/de4dot.code/deobfuscators/SmartAssembly/AssemblyResolverInfo.cs index da322687..c2a8130b 100644 --- a/de4dot.code/deobfuscators/SmartAssembly/AssemblyResolverInfo.cs +++ b/de4dot.code/deobfuscators/SmartAssembly/AssemblyResolverInfo.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.code/deobfuscators/SmartAssembly/AutomatedErrorReportingFinder.cs b/de4dot.code/deobfuscators/SmartAssembly/AutomatedErrorReportingFinder.cs index ff1c2f2c..8a2e784b 100644 --- a/de4dot.code/deobfuscators/SmartAssembly/AutomatedErrorReportingFinder.cs +++ b/de4dot.code/deobfuscators/SmartAssembly/AutomatedErrorReportingFinder.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.code/deobfuscators/SmartAssembly/Deobfuscator.cs b/de4dot.code/deobfuscators/SmartAssembly/Deobfuscator.cs index 70632d60..b4c9b6b3 100644 --- a/de4dot.code/deobfuscators/SmartAssembly/Deobfuscator.cs +++ b/de4dot.code/deobfuscators/SmartAssembly/Deobfuscator.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.code/deobfuscators/SmartAssembly/MemoryManagerInfo.cs b/de4dot.code/deobfuscators/SmartAssembly/MemoryManagerInfo.cs index 260cd8ba..61459b11 100644 --- a/de4dot.code/deobfuscators/SmartAssembly/MemoryManagerInfo.cs +++ b/de4dot.code/deobfuscators/SmartAssembly/MemoryManagerInfo.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.code/deobfuscators/SmartAssembly/ProxyCallFixer.cs b/de4dot.code/deobfuscators/SmartAssembly/ProxyCallFixer.cs index 7a5f2d5d..429063c9 100644 --- a/de4dot.code/deobfuscators/SmartAssembly/ProxyCallFixer.cs +++ b/de4dot.code/deobfuscators/SmartAssembly/ProxyCallFixer.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.code/deobfuscators/SmartAssembly/ResolverInfoBase.cs b/de4dot.code/deobfuscators/SmartAssembly/ResolverInfoBase.cs index 222bfca3..23ae7342 100644 --- a/de4dot.code/deobfuscators/SmartAssembly/ResolverInfoBase.cs +++ b/de4dot.code/deobfuscators/SmartAssembly/ResolverInfoBase.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.code/deobfuscators/SmartAssembly/ResourceDecrypter.cs b/de4dot.code/deobfuscators/SmartAssembly/ResourceDecrypter.cs index 140c9085..90908652 100644 --- a/de4dot.code/deobfuscators/SmartAssembly/ResourceDecrypter.cs +++ b/de4dot.code/deobfuscators/SmartAssembly/ResourceDecrypter.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.code/deobfuscators/SmartAssembly/ResourceDecrypterInfo.cs b/de4dot.code/deobfuscators/SmartAssembly/ResourceDecrypterInfo.cs index 9904c1e1..5b405da2 100644 --- a/de4dot.code/deobfuscators/SmartAssembly/ResourceDecrypterInfo.cs +++ b/de4dot.code/deobfuscators/SmartAssembly/ResourceDecrypterInfo.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.code/deobfuscators/SmartAssembly/ResourceResolver.cs b/de4dot.code/deobfuscators/SmartAssembly/ResourceResolver.cs index 4ca75e60..48cc0172 100644 --- a/de4dot.code/deobfuscators/SmartAssembly/ResourceResolver.cs +++ b/de4dot.code/deobfuscators/SmartAssembly/ResourceResolver.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.code/deobfuscators/SmartAssembly/ResourceResolverInfo.cs b/de4dot.code/deobfuscators/SmartAssembly/ResourceResolverInfo.cs index 77d408ad..ee3ef79e 100644 --- a/de4dot.code/deobfuscators/SmartAssembly/ResourceResolverInfo.cs +++ b/de4dot.code/deobfuscators/SmartAssembly/ResourceResolverInfo.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.code/deobfuscators/SmartAssembly/SimpleZipInfo.cs b/de4dot.code/deobfuscators/SmartAssembly/SimpleZipInfo.cs index bdfe1b1d..eff67fdc 100644 --- a/de4dot.code/deobfuscators/SmartAssembly/SimpleZipInfo.cs +++ b/de4dot.code/deobfuscators/SmartAssembly/SimpleZipInfo.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.code/deobfuscators/SmartAssembly/StringDecrypter.cs b/de4dot.code/deobfuscators/SmartAssembly/StringDecrypter.cs index 3fd66fbf..a00c9cdc 100644 --- a/de4dot.code/deobfuscators/SmartAssembly/StringDecrypter.cs +++ b/de4dot.code/deobfuscators/SmartAssembly/StringDecrypter.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.code/deobfuscators/SmartAssembly/StringDecrypterInfo.cs b/de4dot.code/deobfuscators/SmartAssembly/StringDecrypterInfo.cs index d8bf8de3..63c83897 100644 --- a/de4dot.code/deobfuscators/SmartAssembly/StringDecrypterInfo.cs +++ b/de4dot.code/deobfuscators/SmartAssembly/StringDecrypterInfo.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.code/deobfuscators/SmartAssembly/StringEncoderClassFinder.cs b/de4dot.code/deobfuscators/SmartAssembly/StringEncoderClassFinder.cs index 48430aa3..6b5c2fb4 100644 --- a/de4dot.code/deobfuscators/SmartAssembly/StringEncoderClassFinder.cs +++ b/de4dot.code/deobfuscators/SmartAssembly/StringEncoderClassFinder.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.code/deobfuscators/SmartAssembly/TamperProtectionRemover.cs b/de4dot.code/deobfuscators/SmartAssembly/TamperProtectionRemover.cs index e314ba75..b3207567 100644 --- a/de4dot.code/deobfuscators/SmartAssembly/TamperProtectionRemover.cs +++ b/de4dot.code/deobfuscators/SmartAssembly/TamperProtectionRemover.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.code/deobfuscators/Spices_Net/Deobfuscator.cs b/de4dot.code/deobfuscators/Spices_Net/Deobfuscator.cs index 715bd614..32719880 100644 --- a/de4dot.code/deobfuscators/Spices_Net/Deobfuscator.cs +++ b/de4dot.code/deobfuscators/Spices_Net/Deobfuscator.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. @@ -159,7 +159,6 @@ namespace de4dot.code.deobfuscators.Spices_Net { if (options.RestoreResourceNames) { resourceNamesRestorer = new ResourceNamesRestorer(module); resourceNamesRestorer.Find(); - resourceNamesRestorer.RenameResources(); } stringDecrypter.Initialize(); @@ -184,6 +183,7 @@ namespace de4dot.code.deobfuscators.Spices_Net { RemoveInlinedMethods(); if (options.RestoreResourceNames) { + resourceNamesRestorer.RenameResources(); AddTypeToBeRemoved(resourceNamesRestorer.ResourceManagerType, "Obfuscator ResourceManager type"); AddTypeToBeRemoved(resourceNamesRestorer.ComponentResourceManagerType, "Obfuscator ComponentResourceManager type"); } diff --git a/de4dot.code/deobfuscators/Spices_Net/QclzDecompressor.cs b/de4dot.code/deobfuscators/Spices_Net/QclzDecompressor.cs index be9cf922..23250af2 100644 --- a/de4dot.code/deobfuscators/Spices_Net/QclzDecompressor.cs +++ b/de4dot.code/deobfuscators/Spices_Net/QclzDecompressor.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.code/deobfuscators/Spices_Net/ResourceNamesRestorer.cs b/de4dot.code/deobfuscators/Spices_Net/ResourceNamesRestorer.cs index 00121522..37553866 100644 --- a/de4dot.code/deobfuscators/Spices_Net/ResourceNamesRestorer.cs +++ b/de4dot.code/deobfuscators/Spices_Net/ResourceNamesRestorer.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. @@ -29,6 +29,7 @@ namespace de4dot.code.deobfuscators.Spices_Net { TypeDef componentResourceManagerType; MethodDefAndDeclaringTypeDict resourceManagerCtors = new MethodDefAndDeclaringTypeDict(); MethodDefAndDeclaringTypeDict componentManagerCtors = new MethodDefAndDeclaringTypeDict(); + Dictionary callsResourceManager = new Dictionary(); public TypeDef ResourceManagerType { get { return resourceManagerType; } @@ -101,23 +102,68 @@ namespace de4dot.code.deobfuscators.Spices_Net { numToResource[extNum] = resource; } - foreach (var type in module.GetTypes()) { - Rename(numToResource, "", type.FullName); - Rename(numToResource, "", type.FullName + ".g"); - Rename(numToResource, type.Namespace.String, type.Name.String); - Rename(numToResource, type.Namespace.String, type.Name.String + ".g"); + if (module.Assembly != null) + Rename(numToResource, "", module.Assembly.Name + ".g"); + + foreach (var type in callsResourceManager.Keys) + Rename(numToResource, type); + + if (numToResource.Count != 0) { + foreach (var type in module.GetTypes()) { + if (numToResource.Count == 0) + break; + if (!IsWinFormType(type)) + continue; + Rename(numToResource, type); + } } - if (module.Assembly != null) - Rename(numToResource, "", module.Assembly.Name.String + ".g"); + if (numToResource.Count != 0) { + foreach (var type in module.GetTypes()) { + if (numToResource.Count == 0) + break; + Rename(numToResource, type); + } + } + + if (numToResource.Count != 0) + Logger.e("Couldn't restore all renamed resource names"); } - static void Rename(Dictionary numToResource, string ns, string name) { + static bool IsWinFormType(TypeDef type) { + for (int i = 0; i < 100; i++) { + var baseType = type.BaseType; + if (baseType == null) + break; + if (baseType.FullName == "System.Object" || + baseType.FullName == "System.ValueType") + return false; + // Speed up common cases + if (baseType.FullName == "System.Windows.Forms.Control" || + baseType.FullName == "System.Windows.Forms.Form" || + baseType.FullName == "System.Windows.Forms.UserControl") + return true; + var resolvedBaseType = baseType.ResolveTypeDef(); + if (resolvedBaseType == null) + break; + type = resolvedBaseType; + } + return false; + } + + static bool Rename(Dictionary numToResource, TypeDef type) { + return Rename(numToResource, "", type.FullName) || + Rename(numToResource, "", type.FullName + ".g") || + Rename(numToResource, type.Namespace, type.Name) || + Rename(numToResource, type.Namespace, type.Name + ".g"); + } + + static bool Rename(Dictionary numToResource, string ns, string name) { var resourceName = name + ".resources"; uint hash = GetResourceHash(resourceName); Resource resource; if (!numToResource.TryGetValue(hash, out resource)) - return; + return false; int index = resource.Name.String.LastIndexOf('.'); string resourceNamespace, newName; @@ -130,13 +176,14 @@ namespace de4dot.code.deobfuscators.Spices_Net { newName = resourceNamespace + "." + resourceName; } if (resourceNamespace != ns) - return; + return false; Logger.v("Restoring resource name: '{0}' => '{1}'", Utils.RemoveNewlines(resource.Name), Utils.RemoveNewlines(newName)); resource.Name = newName; numToResource.Remove(hash); + return true; } static uint GetResourceHash(string name) { @@ -169,6 +216,7 @@ namespace de4dot.code.deobfuscators.Spices_Net { if (newCtor == null) continue; instr.Operand = newCtor; + callsResourceManager[blocks.Method.DeclaringType] = true; } } } diff --git a/de4dot.code/deobfuscators/Spices_Net/SpicesMethodCallInliner.cs b/de4dot.code/deobfuscators/Spices_Net/SpicesMethodCallInliner.cs index 863f093c..baca1e16 100644 --- a/de4dot.code/deobfuscators/Spices_Net/SpicesMethodCallInliner.cs +++ b/de4dot.code/deobfuscators/Spices_Net/SpicesMethodCallInliner.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.code/deobfuscators/Spices_Net/StringDecrypter.cs b/de4dot.code/deobfuscators/Spices_Net/StringDecrypter.cs index a73699c5..5a39f211 100644 --- a/de4dot.code/deobfuscators/Spices_Net/StringDecrypter.cs +++ b/de4dot.code/deobfuscators/Spices_Net/StringDecrypter.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.code/deobfuscators/StringCounts.cs b/de4dot.code/deobfuscators/StringCounts.cs index 48b12660..bed73163 100644 --- a/de4dot.code/deobfuscators/StringCounts.cs +++ b/de4dot.code/deobfuscators/StringCounts.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.code/deobfuscators/TypesRestorer.cs b/de4dot.code/deobfuscators/TypesRestorer.cs index dbac15d5..131ccf04 100644 --- a/de4dot.code/deobfuscators/TypesRestorer.cs +++ b/de4dot.code/deobfuscators/TypesRestorer.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.code/deobfuscators/Unknown/Deobfuscator.cs b/de4dot.code/deobfuscators/Unknown/Deobfuscator.cs index b7639915..8fc4fee0 100644 --- a/de4dot.code/deobfuscators/Unknown/Deobfuscator.cs +++ b/de4dot.code/deobfuscators/Unknown/Deobfuscator.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.code/deobfuscators/UnpackedFile.cs b/de4dot.code/deobfuscators/UnpackedFile.cs index f137f8d2..8d3a154e 100644 --- a/de4dot.code/deobfuscators/UnpackedFile.cs +++ b/de4dot.code/deobfuscators/UnpackedFile.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.code/deobfuscators/UnusedMethodsFinder.cs b/de4dot.code/deobfuscators/UnusedMethodsFinder.cs index 4ce59d2b..c9157e83 100644 --- a/de4dot.code/deobfuscators/UnusedMethodsFinder.cs +++ b/de4dot.code/deobfuscators/UnusedMethodsFinder.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.code/deobfuscators/ValueInlinerBase.cs b/de4dot.code/deobfuscators/ValueInlinerBase.cs index a8163a3b..36b0aabe 100644 --- a/de4dot.code/deobfuscators/ValueInlinerBase.cs +++ b/de4dot.code/deobfuscators/ValueInlinerBase.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.code/deobfuscators/Xenocode/Deobfuscator.cs b/de4dot.code/deobfuscators/Xenocode/Deobfuscator.cs index f42cb14d..83f6ae8f 100644 --- a/de4dot.code/deobfuscators/Xenocode/Deobfuscator.cs +++ b/de4dot.code/deobfuscators/Xenocode/Deobfuscator.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.code/deobfuscators/Xenocode/StringDecrypter.cs b/de4dot.code/deobfuscators/Xenocode/StringDecrypter.cs index 6142e2ae..84e0031d 100644 --- a/de4dot.code/deobfuscators/Xenocode/StringDecrypter.cs +++ b/de4dot.code/deobfuscators/Xenocode/StringDecrypter.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.code/deobfuscators/dotNET_Reactor/v3/AntiStrongName.cs b/de4dot.code/deobfuscators/dotNET_Reactor/v3/AntiStrongName.cs index 4359f7f4..4e30f9fc 100644 --- a/de4dot.code/deobfuscators/dotNET_Reactor/v3/AntiStrongName.cs +++ b/de4dot.code/deobfuscators/dotNET_Reactor/v3/AntiStrongName.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.code/deobfuscators/dotNET_Reactor/v3/ApplicationModeDecrypter.cs b/de4dot.code/deobfuscators/dotNET_Reactor/v3/ApplicationModeDecrypter.cs index 5f10ccef..6986a777 100644 --- a/de4dot.code/deobfuscators/dotNET_Reactor/v3/ApplicationModeDecrypter.cs +++ b/de4dot.code/deobfuscators/dotNET_Reactor/v3/ApplicationModeDecrypter.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.code/deobfuscators/dotNET_Reactor/v3/ApplicationModeUnpacker.cs b/de4dot.code/deobfuscators/dotNET_Reactor/v3/ApplicationModeUnpacker.cs index e3111412..8df5f13b 100644 --- a/de4dot.code/deobfuscators/dotNET_Reactor/v3/ApplicationModeUnpacker.cs +++ b/de4dot.code/deobfuscators/dotNET_Reactor/v3/ApplicationModeUnpacker.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.code/deobfuscators/dotNET_Reactor/v3/AssemblyResolver.cs b/de4dot.code/deobfuscators/dotNET_Reactor/v3/AssemblyResolver.cs index 4a1dbc69..7423c147 100644 --- a/de4dot.code/deobfuscators/dotNET_Reactor/v3/AssemblyResolver.cs +++ b/de4dot.code/deobfuscators/dotNET_Reactor/v3/AssemblyResolver.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.code/deobfuscators/dotNET_Reactor/v3/DecryptMethod.cs b/de4dot.code/deobfuscators/dotNET_Reactor/v3/DecryptMethod.cs index 02ec1857..7ef8a169 100644 --- a/de4dot.code/deobfuscators/dotNET_Reactor/v3/DecryptMethod.cs +++ b/de4dot.code/deobfuscators/dotNET_Reactor/v3/DecryptMethod.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.code/deobfuscators/dotNET_Reactor/v3/DecrypterType.cs b/de4dot.code/deobfuscators/dotNET_Reactor/v3/DecrypterType.cs index ba911b93..ef1718cb 100644 --- a/de4dot.code/deobfuscators/dotNET_Reactor/v3/DecrypterType.cs +++ b/de4dot.code/deobfuscators/dotNET_Reactor/v3/DecrypterType.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.code/deobfuscators/dotNET_Reactor/v3/Deobfuscator.cs b/de4dot.code/deobfuscators/dotNET_Reactor/v3/Deobfuscator.cs index 070c1dd8..b45e69c6 100644 --- a/de4dot.code/deobfuscators/dotNET_Reactor/v3/Deobfuscator.cs +++ b/de4dot.code/deobfuscators/dotNET_Reactor/v3/Deobfuscator.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.code/deobfuscators/dotNET_Reactor/v3/LibAssemblyResolver.cs b/de4dot.code/deobfuscators/dotNET_Reactor/v3/LibAssemblyResolver.cs index 262e6bdb..0def45f4 100644 --- a/de4dot.code/deobfuscators/dotNET_Reactor/v3/LibAssemblyResolver.cs +++ b/de4dot.code/deobfuscators/dotNET_Reactor/v3/LibAssemblyResolver.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.code/deobfuscators/dotNET_Reactor/v3/MemoryPatcher.cs b/de4dot.code/deobfuscators/dotNET_Reactor/v3/MemoryPatcher.cs index 08f592dc..79095035 100644 --- a/de4dot.code/deobfuscators/dotNET_Reactor/v3/MemoryPatcher.cs +++ b/de4dot.code/deobfuscators/dotNET_Reactor/v3/MemoryPatcher.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.code/deobfuscators/dotNET_Reactor/v3/NativeLibSaver.cs b/de4dot.code/deobfuscators/dotNET_Reactor/v3/NativeLibSaver.cs index 82fc1653..2075999e 100644 --- a/de4dot.code/deobfuscators/dotNET_Reactor/v3/NativeLibSaver.cs +++ b/de4dot.code/deobfuscators/dotNET_Reactor/v3/NativeLibSaver.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.code/deobfuscators/dotNET_Reactor/v4/AntiStrongname.cs b/de4dot.code/deobfuscators/dotNET_Reactor/v4/AntiStrongname.cs index 987e5a82..e137dc53 100644 --- a/de4dot.code/deobfuscators/dotNET_Reactor/v4/AntiStrongname.cs +++ b/de4dot.code/deobfuscators/dotNET_Reactor/v4/AntiStrongname.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.code/deobfuscators/dotNET_Reactor/v4/AssemblyResolver.cs b/de4dot.code/deobfuscators/dotNET_Reactor/v4/AssemblyResolver.cs index 8a4ce825..e5d2c220 100644 --- a/de4dot.code/deobfuscators/dotNET_Reactor/v4/AssemblyResolver.cs +++ b/de4dot.code/deobfuscators/dotNET_Reactor/v4/AssemblyResolver.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.code/deobfuscators/dotNET_Reactor/v4/BooleanDecrypter.cs b/de4dot.code/deobfuscators/dotNET_Reactor/v4/BooleanDecrypter.cs index f6f7f132..fb79048c 100644 --- a/de4dot.code/deobfuscators/dotNET_Reactor/v4/BooleanDecrypter.cs +++ b/de4dot.code/deobfuscators/dotNET_Reactor/v4/BooleanDecrypter.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.code/deobfuscators/dotNET_Reactor/v4/Deobfuscator.cs b/de4dot.code/deobfuscators/dotNET_Reactor/v4/Deobfuscator.cs index 0cbca43c..eccc159e 100644 --- a/de4dot.code/deobfuscators/dotNET_Reactor/v4/Deobfuscator.cs +++ b/de4dot.code/deobfuscators/dotNET_Reactor/v4/Deobfuscator.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.code/deobfuscators/dotNET_Reactor/v4/DnrMethodCallInliner.cs b/de4dot.code/deobfuscators/dotNET_Reactor/v4/DnrMethodCallInliner.cs index 2a3324b6..1af3a573 100644 --- a/de4dot.code/deobfuscators/dotNET_Reactor/v4/DnrMethodCallInliner.cs +++ b/de4dot.code/deobfuscators/dotNET_Reactor/v4/DnrMethodCallInliner.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.code/deobfuscators/dotNET_Reactor/v4/EmptyClass.cs b/de4dot.code/deobfuscators/dotNET_Reactor/v4/EmptyClass.cs index 61b23bf3..39d1a1a5 100644 --- a/de4dot.code/deobfuscators/dotNET_Reactor/v4/EmptyClass.cs +++ b/de4dot.code/deobfuscators/dotNET_Reactor/v4/EmptyClass.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.code/deobfuscators/dotNET_Reactor/v4/EncryptedResource.cs b/de4dot.code/deobfuscators/dotNET_Reactor/v4/EncryptedResource.cs index 9660c66e..4ea0301a 100644 --- a/de4dot.code/deobfuscators/dotNET_Reactor/v4/EncryptedResource.cs +++ b/de4dot.code/deobfuscators/dotNET_Reactor/v4/EncryptedResource.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.code/deobfuscators/dotNET_Reactor/v4/MetadataTokenObfuscator.cs b/de4dot.code/deobfuscators/dotNET_Reactor/v4/MetadataTokenObfuscator.cs index 4ee649ef..825580d2 100644 --- a/de4dot.code/deobfuscators/dotNET_Reactor/v4/MetadataTokenObfuscator.cs +++ b/de4dot.code/deobfuscators/dotNET_Reactor/v4/MetadataTokenObfuscator.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.code/deobfuscators/dotNET_Reactor/v4/MethodsDecrypter.cs b/de4dot.code/deobfuscators/dotNET_Reactor/v4/MethodsDecrypter.cs index cc9a7dc3..fedb2f96 100644 --- a/de4dot.code/deobfuscators/dotNET_Reactor/v4/MethodsDecrypter.cs +++ b/de4dot.code/deobfuscators/dotNET_Reactor/v4/MethodsDecrypter.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.code/deobfuscators/dotNET_Reactor/v4/NativeFileDecrypter.cs b/de4dot.code/deobfuscators/dotNET_Reactor/v4/NativeFileDecrypter.cs index d809b161..b422b4ee 100644 --- a/de4dot.code/deobfuscators/dotNET_Reactor/v4/NativeFileDecrypter.cs +++ b/de4dot.code/deobfuscators/dotNET_Reactor/v4/NativeFileDecrypter.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.code/deobfuscators/dotNET_Reactor/v4/NativeImageUnpacker.cs b/de4dot.code/deobfuscators/dotNET_Reactor/v4/NativeImageUnpacker.cs index 1edb590a..d6bbc3d5 100644 --- a/de4dot.code/deobfuscators/dotNET_Reactor/v4/NativeImageUnpacker.cs +++ b/de4dot.code/deobfuscators/dotNET_Reactor/v4/NativeImageUnpacker.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.code/deobfuscators/dotNET_Reactor/v4/ProxyCallFixer.cs b/de4dot.code/deobfuscators/dotNET_Reactor/v4/ProxyCallFixer.cs index 88d9321c..31a40b5e 100644 --- a/de4dot.code/deobfuscators/dotNET_Reactor/v4/ProxyCallFixer.cs +++ b/de4dot.code/deobfuscators/dotNET_Reactor/v4/ProxyCallFixer.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.code/deobfuscators/dotNET_Reactor/v4/ResourceResolver.cs b/de4dot.code/deobfuscators/dotNET_Reactor/v4/ResourceResolver.cs index 11a03668..b4f83831 100644 --- a/de4dot.code/deobfuscators/dotNET_Reactor/v4/ResourceResolver.cs +++ b/de4dot.code/deobfuscators/dotNET_Reactor/v4/ResourceResolver.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.code/deobfuscators/dotNET_Reactor/v4/StringDecrypter.cs b/de4dot.code/deobfuscators/dotNET_Reactor/v4/StringDecrypter.cs index 0b53ff8b..9ca0ac58 100644 --- a/de4dot.code/deobfuscators/dotNET_Reactor/v4/StringDecrypter.cs +++ b/de4dot.code/deobfuscators/dotNET_Reactor/v4/StringDecrypter.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.code/renamer/DerivedFrom.cs b/de4dot.code/renamer/DerivedFrom.cs index 177b40a8..fefc1b8e 100644 --- a/de4dot.code/renamer/DerivedFrom.cs +++ b/de4dot.code/renamer/DerivedFrom.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.code/renamer/ExistingNames.cs b/de4dot.code/renamer/ExistingNames.cs index 167a89e9..5f4e1287 100644 --- a/de4dot.code/renamer/ExistingNames.cs +++ b/de4dot.code/renamer/ExistingNames.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.code/renamer/INameChecker.cs b/de4dot.code/renamer/INameChecker.cs index 211c9a9f..a976cd33 100644 --- a/de4dot.code/renamer/INameChecker.cs +++ b/de4dot.code/renamer/INameChecker.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.code/renamer/MemberInfos.cs b/de4dot.code/renamer/MemberInfos.cs index fd052fe0..86910c61 100644 --- a/de4dot.code/renamer/MemberInfos.cs +++ b/de4dot.code/renamer/MemberInfos.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.code/renamer/NameCreators.cs b/de4dot.code/renamer/NameCreators.cs index 36186e4c..e326365d 100644 --- a/de4dot.code/renamer/NameCreators.cs +++ b/de4dot.code/renamer/NameCreators.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.code/renamer/Renamer.cs b/de4dot.code/renamer/Renamer.cs index fe3b0133..28d1d7d9 100644 --- a/de4dot.code/renamer/Renamer.cs +++ b/de4dot.code/renamer/Renamer.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. @@ -222,7 +222,7 @@ namespace de4dot.code.renamer { rsrc.Data.Position = 0; var rsrcSet = ResourceReader.Read(module, rsrc.Data); foreach (var elem in rsrcSet.ResourceElements) { - if (elem.Name.EndsWith(".baml")) + if (elem.Name.EndsWith(".baml") || elem.Name.EndsWith(".xaml")) return true; } } diff --git a/de4dot.code/renamer/ResourceKeysRenamer.cs b/de4dot.code/renamer/ResourceKeysRenamer.cs index a01d2482..25ea4187 100644 --- a/de4dot.code/renamer/ResourceKeysRenamer.cs +++ b/de4dot.code/renamer/ResourceKeysRenamer.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.code/renamer/ResourceRenamer.cs b/de4dot.code/renamer/ResourceRenamer.cs index e38b6795..9ba72644 100644 --- a/de4dot.code/renamer/ResourceRenamer.cs +++ b/de4dot.code/renamer/ResourceRenamer.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.code/renamer/TypeInfo.cs b/de4dot.code/renamer/TypeInfo.cs index 4f41f0f0..58f8dff9 100644 --- a/de4dot.code/renamer/TypeInfo.cs +++ b/de4dot.code/renamer/TypeInfo.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.code/renamer/TypeNames.cs b/de4dot.code/renamer/TypeNames.cs index 82f84db4..05ab7a0d 100644 --- a/de4dot.code/renamer/TypeNames.cs +++ b/de4dot.code/renamer/TypeNames.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.code/renamer/TypeRenamerState.cs b/de4dot.code/renamer/TypeRenamerState.cs index 7eaeea75..03560bbe 100644 --- a/de4dot.code/renamer/TypeRenamerState.cs +++ b/de4dot.code/renamer/TypeRenamerState.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.code/renamer/VariableNameState.cs b/de4dot.code/renamer/VariableNameState.cs index 4e122028..4e2ea22d 100644 --- a/de4dot.code/renamer/VariableNameState.cs +++ b/de4dot.code/renamer/VariableNameState.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.code/renamer/asmmodules/EventDef.cs b/de4dot.code/renamer/asmmodules/EventDef.cs index 7908c197..8729d0f4 100644 --- a/de4dot.code/renamer/asmmodules/EventDef.cs +++ b/de4dot.code/renamer/asmmodules/EventDef.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.code/renamer/asmmodules/FieldDef.cs b/de4dot.code/renamer/asmmodules/FieldDef.cs index ade45a72..706cb560 100644 --- a/de4dot.code/renamer/asmmodules/FieldDef.cs +++ b/de4dot.code/renamer/asmmodules/FieldDef.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.code/renamer/asmmodules/GenericParamDef.cs b/de4dot.code/renamer/asmmodules/GenericParamDef.cs index c4498b74..b37f9848 100644 --- a/de4dot.code/renamer/asmmodules/GenericParamDef.cs +++ b/de4dot.code/renamer/asmmodules/GenericParamDef.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.code/renamer/asmmodules/IResolver.cs b/de4dot.code/renamer/asmmodules/IResolver.cs index 92ec0827..a4754ae6 100644 --- a/de4dot.code/renamer/asmmodules/IResolver.cs +++ b/de4dot.code/renamer/asmmodules/IResolver.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.code/renamer/asmmodules/MemberRefFinder.cs b/de4dot.code/renamer/asmmodules/MemberRefFinder.cs index da7b169f..3aeff2a9 100644 --- a/de4dot.code/renamer/asmmodules/MemberRefFinder.cs +++ b/de4dot.code/renamer/asmmodules/MemberRefFinder.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.code/renamer/asmmodules/MethodDef.cs b/de4dot.code/renamer/asmmodules/MethodDef.cs index b021dc63..7c9ae288 100644 --- a/de4dot.code/renamer/asmmodules/MethodDef.cs +++ b/de4dot.code/renamer/asmmodules/MethodDef.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.code/renamer/asmmodules/MethodNameGroups.cs b/de4dot.code/renamer/asmmodules/MethodNameGroups.cs index fea4e014..7b0fbf57 100644 --- a/de4dot.code/renamer/asmmodules/MethodNameGroups.cs +++ b/de4dot.code/renamer/asmmodules/MethodNameGroups.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.code/renamer/asmmodules/Module.cs b/de4dot.code/renamer/asmmodules/Module.cs index 9b20f423..e1031d5d 100644 --- a/de4dot.code/renamer/asmmodules/Module.cs +++ b/de4dot.code/renamer/asmmodules/Module.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.code/renamer/asmmodules/Modules.cs b/de4dot.code/renamer/asmmodules/Modules.cs index 83e4ec2a..b88e81a2 100644 --- a/de4dot.code/renamer/asmmodules/Modules.cs +++ b/de4dot.code/renamer/asmmodules/Modules.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.code/renamer/asmmodules/ParamDef.cs b/de4dot.code/renamer/asmmodules/ParamDef.cs index 1b555095..1c2c7ffe 100644 --- a/de4dot.code/renamer/asmmodules/ParamDef.cs +++ b/de4dot.code/renamer/asmmodules/ParamDef.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.code/renamer/asmmodules/PropertyDef.cs b/de4dot.code/renamer/asmmodules/PropertyDef.cs index 247af712..a848972e 100644 --- a/de4dot.code/renamer/asmmodules/PropertyDef.cs +++ b/de4dot.code/renamer/asmmodules/PropertyDef.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.code/renamer/asmmodules/Ref.cs b/de4dot.code/renamer/asmmodules/Ref.cs index 98343fbb..39c9e4e0 100644 --- a/de4dot.code/renamer/asmmodules/Ref.cs +++ b/de4dot.code/renamer/asmmodules/Ref.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.code/renamer/asmmodules/RefDict.cs b/de4dot.code/renamer/asmmodules/RefDict.cs index afd35442..60a583a9 100644 --- a/de4dot.code/renamer/asmmodules/RefDict.cs +++ b/de4dot.code/renamer/asmmodules/RefDict.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.code/renamer/asmmodules/TypeDef.cs b/de4dot.code/renamer/asmmodules/TypeDef.cs index 7d7990f3..24a62871 100644 --- a/de4dot.code/renamer/asmmodules/TypeDef.cs +++ b/de4dot.code/renamer/asmmodules/TypeDef.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.code/resources/BuiltInResourceData.cs b/de4dot.code/resources/BuiltInResourceData.cs index 66164eff..ce23a0dc 100644 --- a/de4dot.code/resources/BuiltInResourceData.cs +++ b/de4dot.code/resources/BuiltInResourceData.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.code/resources/IResourceData.cs b/de4dot.code/resources/IResourceData.cs index be3ab6a1..b8995e2f 100644 --- a/de4dot.code/resources/IResourceData.cs +++ b/de4dot.code/resources/IResourceData.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.code/resources/ResourceDataCreator.cs b/de4dot.code/resources/ResourceDataCreator.cs index 12b88e44..4ebd012b 100644 --- a/de4dot.code/resources/ResourceDataCreator.cs +++ b/de4dot.code/resources/ResourceDataCreator.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.code/resources/ResourceElement.cs b/de4dot.code/resources/ResourceElement.cs index 7a81b5f3..8cf6ea95 100644 --- a/de4dot.code/resources/ResourceElement.cs +++ b/de4dot.code/resources/ResourceElement.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.code/resources/ResourceElementSet.cs b/de4dot.code/resources/ResourceElementSet.cs index fe0c8940..128414b8 100644 --- a/de4dot.code/resources/ResourceElementSet.cs +++ b/de4dot.code/resources/ResourceElementSet.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.code/resources/ResourceReader.cs b/de4dot.code/resources/ResourceReader.cs index 6c515123..3c4b5a68 100644 --- a/de4dot.code/resources/ResourceReader.cs +++ b/de4dot.code/resources/ResourceReader.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.code/resources/ResourceTypeCode.cs b/de4dot.code/resources/ResourceTypeCode.cs index cb20ab80..972f1dd6 100644 --- a/de4dot.code/resources/ResourceTypeCode.cs +++ b/de4dot.code/resources/ResourceTypeCode.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.code/resources/ResourceWriter.cs b/de4dot.code/resources/ResourceWriter.cs index c403571f..f9e0d7aa 100644 --- a/de4dot.code/resources/ResourceWriter.cs +++ b/de4dot.code/resources/ResourceWriter.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.code/resources/UserResourceData.cs b/de4dot.code/resources/UserResourceData.cs index 04add74b..db515453 100644 --- a/de4dot.code/resources/UserResourceData.cs +++ b/de4dot.code/resources/UserResourceData.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.code/resources/UserResourceType.cs b/de4dot.code/resources/UserResourceType.cs index d5fe63c1..3b7489fc 100644 --- a/de4dot.code/resources/UserResourceType.cs +++ b/de4dot.code/resources/UserResourceType.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.cui/CommandLineParser.cs b/de4dot.cui/CommandLineParser.cs index d7c2efb7..c86125c4 100644 --- a/de4dot.cui/CommandLineParser.cs +++ b/de4dot.cui/CommandLineParser.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.cui/FilesDeobfuscator.cs b/de4dot.cui/FilesDeobfuscator.cs index e16a2d35..40677985 100644 --- a/de4dot.cui/FilesDeobfuscator.cs +++ b/de4dot.cui/FilesDeobfuscator.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.cui/Program.cs b/de4dot.cui/Program.cs index 48d3d29c..54610085 100644 --- a/de4dot.cui/Program.cs +++ b/de4dot.cui/Program.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. @@ -73,7 +73,7 @@ namespace de4dot.cui { Logger.Instance.CanIgnoreMessages = !HasEnv(showAllMessagesEnvName); Logger.n(""); - Logger.n("de4dot v{0} Copyright (C) 2011-2013 de4dot@gmail.com", System.Reflection.Assembly.GetExecutingAssembly().GetName().Version); + Logger.n("de4dot v{0} Copyright (C) 2011-2014 de4dot@gmail.com", System.Reflection.Assembly.GetExecutingAssembly().GetName().Version); Logger.n("Latest version and source code: https://bitbucket.org/0xd4d/de4dot"); Logger.n(""); diff --git a/de4dot.cui/Properties/AssemblyInfo.cs b/de4dot.cui/Properties/AssemblyInfo.cs index bab31dd0..b208b36e 100644 --- a/de4dot.cui/Properties/AssemblyInfo.cs +++ b/de4dot.cui/Properties/AssemblyInfo.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. @@ -26,11 +26,11 @@ using System.Runtime.InteropServices; [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("")] [assembly: AssemblyProduct("de4dot.cui")] -[assembly: AssemblyCopyright("Copyright (C) 2011-2013 de4dot@gmail.com")] +[assembly: AssemblyCopyright("Copyright (C) 2011-2014 de4dot@gmail.com")] [assembly: AssemblyTrademark("")] [assembly: AssemblyCulture("")] [assembly: ComVisible(false)] -[assembly: AssemblyVersion("3.0.2.3405")] -[assembly: AssemblyFileVersion("3.0.2.3405")] +[assembly: AssemblyVersion("3.0.3.3405")] +[assembly: AssemblyFileVersion("3.0.3.3405")] [assembly: InternalsVisibleTo("de4dot, PublicKey=00240000048000009400000006020000002400005253413100040000010001007b5ffd8f48f1397cd4e21c9e30a5cb36b2c013d6f20688c90e3f0c2d24e6d67cbeea7a6ec3faf9ba081f3d6b6fbe389677adbb8337d3a16187cd13b16a34008a22b89089da41c4a08fd35615c77de0827adcca6d49b08c0ed3e0404a1c44b7d083be614acb1779e4fb275e14427f3687f375d03f3b465c8a6cdeebd1f8c7f4ea")] [assembly: InternalsVisibleTo("de4dot-x64, PublicKey=00240000048000009400000006020000002400005253413100040000010001007b5ffd8f48f1397cd4e21c9e30a5cb36b2c013d6f20688c90e3f0c2d24e6d67cbeea7a6ec3faf9ba081f3d6b6fbe389677adbb8337d3a16187cd13b16a34008a22b89089da41c4a08fd35615c77de0827adcca6d49b08c0ed3e0404a1c44b7d083be614acb1779e4fb275e14427f3687f375d03f3b465c8a6cdeebd1f8c7f4ea")] diff --git a/de4dot.mdecrypt/DecryptMethodsInfo.cs b/de4dot.mdecrypt/DecryptMethodsInfo.cs index d5deda76..ba45efa4 100644 --- a/de4dot.mdecrypt/DecryptMethodsInfo.cs +++ b/de4dot.mdecrypt/DecryptMethodsInfo.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.mdecrypt/DynamicMethodsDecrypter.cs b/de4dot.mdecrypt/DynamicMethodsDecrypter.cs index 9d40208c..24fa5816 100644 --- a/de4dot.mdecrypt/DynamicMethodsDecrypter.cs +++ b/de4dot.mdecrypt/DynamicMethodsDecrypter.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. @@ -581,6 +581,23 @@ namespace de4dot.mdecrypt { return hModule; } + class PatchInfo { + public int RVA; + public byte[] Data; + public byte[] Orig; + + public PatchInfo(int rva, byte[] data, byte[] orig) { + this.RVA = rva; + this.Data = data; + this.Orig = orig; + } + } + static readonly PatchInfo[] patches = new PatchInfo[] { + new PatchInfo(0x000110A5, new byte[] { 0x33, 0xC0, 0xC2, 0x04, 0x00 }, new byte[] { 0xE9, 0x36, 0x3A, 0x00, 0x00 }), + new PatchInfo(0x000110AF, new byte[] { 0x33, 0xC0, 0xC2, 0x04, 0x00 }, new byte[] { 0xE9, 0x4C, 0x3C, 0x00, 0x00 }), + new PatchInfo(0x000110AA, new byte[] { 0x33, 0xC0, 0xC2, 0x04, 0x00 }, new byte[] { 0xE9, 0xF1, 0x3A, 0x00, 0x00 }), + }; + static unsafe bool PatchCM(IntPtr addr, IntPtr origValue, IntPtr newValue) { var baseAddr = GetModuleHandle(addr); IntPtr patchAddr; @@ -590,6 +607,45 @@ namespace de4dot.mdecrypt { return false; *(IntPtr*)patchAddr = newValue; + PatchRT(baseAddr); + return true; + } + + [HandleProcessCorruptedStateExceptions, SecurityCritical] // Req'd on .NET 4.0 + static unsafe bool PatchRT(IntPtr baseAddr) { + foreach (var info in patches) { + try { + var addr = new IntPtr(baseAddr.ToInt64() + info.RVA); + + var data = new byte[info.Orig.Length]; + Marshal.Copy(addr, data, 0, data.Length); + if (!Equals(data, info.Orig)) + continue; + + uint oldProtect; + if (!VirtualProtect(addr, info.Data.Length, PAGE_EXECUTE_READWRITE, out oldProtect)) + throw new ApplicationException("Could not enable write access"); + Marshal.Copy(info.Data, 0, addr, info.Data.Length); + VirtualProtect(addr, info.Data.Length, oldProtect, out oldProtect); + return true; + } + catch { + } + } + return false; + } + + static bool Equals(byte[] a, byte[] b) { + if (a == b) + return true; + if (a == null || b == null) + return false; + if (a.Length != b.Length) + return false; + for (int i = 0; i < a.Length; i++) { + if (a[i] != b[i]) + return false; + } return true; } diff --git a/de4dot.mdecrypt/NativeCodeGenerator.cs b/de4dot.mdecrypt/NativeCodeGenerator.cs index a77028c1..e302055c 100644 --- a/de4dot.mdecrypt/NativeCodeGenerator.cs +++ b/de4dot.mdecrypt/NativeCodeGenerator.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot.mdecrypt/Properties/AssemblyInfo.cs b/de4dot.mdecrypt/Properties/AssemblyInfo.cs index 9966c65e..a148ef31 100644 --- a/de4dot.mdecrypt/Properties/AssemblyInfo.cs +++ b/de4dot.mdecrypt/Properties/AssemblyInfo.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. @@ -25,9 +25,9 @@ using System.Runtime.InteropServices; [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("")] [assembly: AssemblyProduct("de4dot.mdecrypt")] -[assembly: AssemblyCopyright("Copyright (C) 2011-2013 de4dot@gmail.com")] +[assembly: AssemblyCopyright("Copyright (C) 2011-2014 de4dot@gmail.com")] [assembly: AssemblyTrademark("")] [assembly: AssemblyCulture("")] [assembly: ComVisible(false)] -[assembly: AssemblyVersion("3.0.2.3405")] -[assembly: AssemblyFileVersion("3.0.2.3405")] +[assembly: AssemblyVersion("3.0.3.3405")] +[assembly: AssemblyFileVersion("3.0.3.3405")] diff --git a/de4dot/Program.cs b/de4dot/Program.cs index e03518cf..fb0b31bd 100644 --- a/de4dot/Program.cs +++ b/de4dot/Program.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. diff --git a/de4dot/Properties/AssemblyInfo.cs b/de4dot/Properties/AssemblyInfo.cs index 4822cc61..aea00aa1 100644 --- a/de4dot/Properties/AssemblyInfo.cs +++ b/de4dot/Properties/AssemblyInfo.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2011-2013 de4dot@gmail.com + Copyright (C) 2011-2014 de4dot@gmail.com This file is part of de4dot. @@ -25,9 +25,9 @@ using System.Runtime.InteropServices; [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("")] [assembly: AssemblyProduct("de4dot")] -[assembly: AssemblyCopyright("Copyright (C) 2011-2013 de4dot@gmail.com")] +[assembly: AssemblyCopyright("Copyright (C) 2011-2014 de4dot@gmail.com")] [assembly: AssemblyTrademark("")] [assembly: AssemblyCulture("")] [assembly: ComVisible(false)] -[assembly: AssemblyVersion("3.0.2.3405")] -[assembly: AssemblyFileVersion("3.0.2.3405")] +[assembly: AssemblyVersion("3.0.3.3405")] +[assembly: AssemblyFileVersion("3.0.3.3405")] diff --git a/dnlib b/dnlib index 08030682..d854e20b 160000 --- a/dnlib +++ b/dnlib @@ -1 +1 @@ -Subproject commit 080306826f27fc4205f79a64b56247a04073991a +Subproject commit d854e20b2d4245245efc19e676e6862cdbd162f6