Merge branch 'master' into newcode
This commit is contained in:
commit
68b78b0081
2
cecil
2
cecil
|
@ -1 +1 @@
|
|||
Subproject commit 2bc3f2014c697f697e8bb09e5ca004e5e252fe06
|
||||
Subproject commit dc6e952a549054a7a9e919f557992c375fe23ca5
|
|
@ -40,7 +40,7 @@ namespace de4dot.code {
|
|||
IDeobfuscator deob;
|
||||
AssemblyModule assemblyModule;
|
||||
IAssemblyClient assemblyClient;
|
||||
DynamicStringDecrypter dynamicStringDecrypter;
|
||||
DynamicStringInliner dynamicStringInliner;
|
||||
IAssemblyClientFactory assemblyClientFactory;
|
||||
SavedMethodBodies savedMethodBodies;
|
||||
bool userStringDecrypterMethods = false;
|
||||
|
@ -380,7 +380,7 @@ namespace de4dot.code {
|
|||
deob = deob.moduleReloaded(module);
|
||||
initializeDeobfuscator();
|
||||
deob.DeobfuscatedFile = this;
|
||||
updateDynamicStringDecrypter();
|
||||
updateDynamicStringInliner();
|
||||
}
|
||||
|
||||
void initAssemblyClient() {
|
||||
|
@ -397,13 +397,13 @@ namespace de4dot.code {
|
|||
else
|
||||
throw new ApplicationException(string.Format("Invalid string decrypter type '{0}'", options.StringDecrypterType));
|
||||
|
||||
dynamicStringDecrypter = new DynamicStringDecrypter(assemblyClient);
|
||||
updateDynamicStringDecrypter();
|
||||
dynamicStringInliner = new DynamicStringInliner(assemblyClient);
|
||||
updateDynamicStringInliner();
|
||||
}
|
||||
|
||||
void updateDynamicStringDecrypter() {
|
||||
if (dynamicStringDecrypter != null)
|
||||
dynamicStringDecrypter.init(getMethodTokens());
|
||||
void updateDynamicStringInliner() {
|
||||
if (dynamicStringInliner != null)
|
||||
dynamicStringInliner.init(getMethodTokens());
|
||||
}
|
||||
|
||||
IEnumerable<int> getMethodTokens() {
|
||||
|
@ -805,7 +805,7 @@ namespace de4dot.code {
|
|||
|
||||
case DecrypterType.Delegate:
|
||||
case DecrypterType.Emulate:
|
||||
dynamicStringDecrypter.decrypt(blocks);
|
||||
dynamicStringInliner.decrypt(blocks);
|
||||
break;
|
||||
|
||||
default:
|
||||
|
@ -915,7 +915,7 @@ namespace de4dot.code {
|
|||
}
|
||||
|
||||
void IDeobfuscatedFile.stringDecryptersAdded() {
|
||||
updateDynamicStringDecrypter();
|
||||
updateDynamicStringInliner();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -25,7 +25,7 @@ using de4dot.code.AssemblyClient;
|
|||
using de4dot.blocks;
|
||||
|
||||
namespace de4dot.code {
|
||||
abstract class StringDecrypter : MethodReturnValueInliner {
|
||||
abstract class StringInlinerBase : MethodReturnValueInliner {
|
||||
protected override void inlineReturnValues(IList<CallResult> callResults) {
|
||||
foreach (var callResult in callResults) {
|
||||
var block = callResult.block;
|
||||
|
@ -62,7 +62,7 @@ namespace de4dot.code {
|
|||
}
|
||||
}
|
||||
|
||||
class DynamicStringDecrypter : StringDecrypter {
|
||||
class DynamicStringInliner : StringInlinerBase {
|
||||
IAssemblyClient assemblyClient;
|
||||
Dictionary<int, int> methodTokenToId = new Dictionary<int, int>();
|
||||
|
||||
|
@ -78,7 +78,7 @@ namespace de4dot.code {
|
|||
get { return methodTokenToId.Count != 0; }
|
||||
}
|
||||
|
||||
public DynamicStringDecrypter(IAssemblyClient assemblyClient) {
|
||||
public DynamicStringInliner(IAssemblyClient assemblyClient) {
|
||||
this.assemblyClient = assemblyClient;
|
||||
}
|
||||
|
||||
|
@ -129,7 +129,7 @@ namespace de4dot.code {
|
|||
}
|
||||
}
|
||||
|
||||
class StaticStringDecrypter : StringDecrypter {
|
||||
class StaticStringInliner : StringInlinerBase {
|
||||
MethodDefinitionAndDeclaringTypeDict<Func<MethodDefinition, object[], string>> stringDecrypters = new MethodDefinitionAndDeclaringTypeDict<Func<MethodDefinition, object[], string>>();
|
||||
|
||||
public override bool HasHandlers {
|
|
@ -213,7 +213,7 @@
|
|||
<Compile Include="renamer\TypeNames.cs" />
|
||||
<Compile Include="renamer\TypeRenamerState.cs" />
|
||||
<Compile Include="renamer\VariableNameState.cs" />
|
||||
<Compile Include="StringDecrypter.cs" />
|
||||
<Compile Include="StringInliner.cs" />
|
||||
<Compile Include="UserException.cs" />
|
||||
<Compile Include="Utils.cs" />
|
||||
<Compile Include="Win32Path.cs" />
|
||||
|
|
|
@ -178,7 +178,7 @@ namespace de4dot.code.deobfuscators.CliSecure {
|
|||
|
||||
proxyDelegateFinder.find();
|
||||
|
||||
staticStringDecrypter.add(stringDecrypter.Method, (method, args) => stringDecrypter.decrypt((string)args[0]));
|
||||
staticStringInliner.add(stringDecrypter.Method, (method, args) => stringDecrypter.decrypt((string)args[0]));
|
||||
|
||||
if (options.DecryptMethods) {
|
||||
addCctorInitCallToBeRemoved(cliSecureRtType.InitializeMethod);
|
||||
|
|
|
@ -172,7 +172,7 @@ namespace de4dot.code.deobfuscators.CryptoObfuscator {
|
|||
stringDecrypter.init(resourceDecrypter);
|
||||
if (stringDecrypter.Method != null) {
|
||||
addResourceToBeRemoved(stringDecrypter.Resource, "Encrypted strings");
|
||||
staticStringDecrypter.add(stringDecrypter.Method, (method, args) => {
|
||||
staticStringInliner.add(stringDecrypter.Method, (method, args) => {
|
||||
return stringDecrypter.decrypt((int)args[0]);
|
||||
});
|
||||
DeobfuscatedFile.stringDecryptersAdded();
|
||||
|
|
|
@ -41,7 +41,7 @@ namespace de4dot.code.deobfuscators {
|
|||
|
||||
OptionsBase optionsBase;
|
||||
protected ModuleDefinition module;
|
||||
protected StaticStringDecrypter staticStringDecrypter = new StaticStringDecrypter();
|
||||
protected StaticStringInliner staticStringInliner = new StaticStringInliner();
|
||||
IList<RemoveInfo<TypeDefinition>> typesToRemove = new List<RemoveInfo<TypeDefinition>>();
|
||||
IList<RemoveInfo<MethodDefinition>> methodsToRemove = new List<RemoveInfo<MethodDefinition>>();
|
||||
IList<RemoveInfo<FieldDefinition>> fieldsToRemove = new List<RemoveInfo<FieldDefinition>>();
|
||||
|
@ -153,7 +153,7 @@ namespace de4dot.code.deobfuscators {
|
|||
}
|
||||
|
||||
public virtual void deobfuscateStrings(Blocks blocks) {
|
||||
staticStringDecrypter.decrypt(blocks);
|
||||
staticStringInliner.decrypt(blocks);
|
||||
}
|
||||
|
||||
public virtual bool deobfuscateOther(Blocks blocks) {
|
||||
|
|
|
@ -115,7 +115,7 @@ namespace de4dot.code.deobfuscators.Dotfuscator {
|
|||
public override void deobfuscateBegin() {
|
||||
base.deobfuscateBegin();
|
||||
foreach (var info in stringDecrypter.StringDecrypterInfos)
|
||||
staticStringDecrypter.add(info.method, (method, args) => stringDecrypter.decrypt(method, (string)args[0], (int)args[1]));
|
||||
staticStringInliner.add(info.method, (method, args) => stringDecrypter.decrypt(method, (string)args[0], (int)args[1]));
|
||||
}
|
||||
|
||||
public override void deobfuscateEnd() {
|
||||
|
|
|
@ -421,11 +421,11 @@ namespace de4dot.code.deobfuscators.SmartAssembly {
|
|||
Log.v("Adding string decrypter. Resource: {0}", Utils.toCsharpString(info.StringsResource.Name));
|
||||
var decrypter = new StringDecrypter(info);
|
||||
if (decrypter.CanDecrypt) {
|
||||
staticStringDecrypter.add(DotNetUtils.getMethod(info.GetStringDelegate, "Invoke"), (method, args) => {
|
||||
staticStringInliner.add(DotNetUtils.getMethod(info.GetStringDelegate, "Invoke"), (method, args) => {
|
||||
var fieldDefinition = DotNetUtils.getField(module, (FieldReference)args[0]);
|
||||
return decrypter.decrypt(fieldDefinition.MetadataToken.ToInt32(), (int)args[1]);
|
||||
});
|
||||
staticStringDecrypter.add(info.StringDecrypterMethod, (method, args) => {
|
||||
staticStringInliner.add(info.StringDecrypterMethod, (method, args) => {
|
||||
return decrypter.decrypt(0, (int)args[0]);
|
||||
});
|
||||
}
|
||||
|
@ -546,7 +546,7 @@ namespace de4dot.code.deobfuscators.SmartAssembly {
|
|||
|
||||
public override IEnumerable<string> getStringDecrypterMethods() {
|
||||
var list = new List<string>();
|
||||
foreach (var method in staticStringDecrypter.Methods)
|
||||
foreach (var method in staticStringInliner.Methods)
|
||||
list.Add(method.MetadataToken.ToInt32().ToString("X8"));
|
||||
return list;
|
||||
}
|
||||
|
|
|
@ -99,7 +99,7 @@ namespace de4dot.code.deobfuscators.Xenocode {
|
|||
public override void deobfuscateBegin() {
|
||||
base.deobfuscateBegin();
|
||||
|
||||
staticStringDecrypter.add(stringDecrypter.Method, (method, args) => stringDecrypter.decrypt((string)args[0], (int)args[1]));
|
||||
staticStringInliner.add(stringDecrypter.Method, (method, args) => stringDecrypter.decrypt((string)args[0], (int)args[1]));
|
||||
}
|
||||
|
||||
public override void deobfuscateEnd() {
|
||||
|
|
|
@ -249,10 +249,10 @@ namespace de4dot.code.deobfuscators.dotNET_Reactor.v3 {
|
|||
|
||||
antiStrongName = new AntiStrongName();
|
||||
|
||||
staticStringDecrypter.add(decrypterType.StringDecrypter1, (method2, args) => {
|
||||
staticStringInliner.add(decrypterType.StringDecrypter1, (method2, args) => {
|
||||
return decrypterType.decrypt1((string)args[0]);
|
||||
});
|
||||
staticStringDecrypter.add(decrypterType.StringDecrypter2, (method2, args) => {
|
||||
staticStringInliner.add(decrypterType.StringDecrypter2, (method2, args) => {
|
||||
return decrypterType.decrypt2((string)args[0]);
|
||||
});
|
||||
|
||||
|
|
|
@ -421,12 +421,12 @@ namespace de4dot.code.deobfuscators.dotNET_Reactor.v4 {
|
|||
}
|
||||
|
||||
foreach (var info in stringDecrypter.DecrypterInfos) {
|
||||
staticStringDecrypter.add(info.method, (method2, args) => {
|
||||
staticStringInliner.add(info.method, (method2, args) => {
|
||||
return stringDecrypter.decrypt(method2, (int)args[0]);
|
||||
});
|
||||
}
|
||||
if (stringDecrypter.OtherStringDecrypter != null) {
|
||||
staticStringDecrypter.add(stringDecrypter.OtherStringDecrypter, (method2, args) => {
|
||||
staticStringInliner.add(stringDecrypter.OtherStringDecrypter, (method2, args) => {
|
||||
return stringDecrypter.decrypt((string)args[0]);
|
||||
});
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue
Block a user