Clear deobfuscated state for each restored method
This commit is contained in:
parent
01dbcd0632
commit
e70e226916
|
@ -221,7 +221,7 @@ namespace de4dot.code.deobfuscators.CryptoObfuscator {
|
||||||
DeobfuscatedFile.StringDecryptersAdded();
|
DeobfuscatedFile.StringDecryptersAdded();
|
||||||
}
|
}
|
||||||
|
|
||||||
methodsDecrypter.Decrypt(resourceDecrypter);
|
methodsDecrypter.Decrypt(resourceDecrypter, DeobfuscatedFile);
|
||||||
|
|
||||||
if (methodsDecrypter.Detected) {
|
if (methodsDecrypter.Detected) {
|
||||||
if (!assemblyResolver.Detected)
|
if (!assemblyResolver.Detected)
|
||||||
|
|
|
@ -112,7 +112,7 @@ namespace de4dot.code.deobfuscators.CryptoObfuscator {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Decrypt(ResourceDecrypter resourceDecrypter) {
|
public void Decrypt(ResourceDecrypter resourceDecrypter, ISimpleDeobfuscator simpleDeobfuscator) {
|
||||||
if (decryptMethod == null)
|
if (decryptMethod == null)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
@ -129,13 +129,13 @@ namespace de4dot.code.deobfuscators.CryptoObfuscator {
|
||||||
uint codeOffset = reader.ReadUInt32();
|
uint codeOffset = reader.ReadUInt32();
|
||||||
var origOffset = reader.Position;
|
var origOffset = reader.Position;
|
||||||
reader.Position = codeOffset;
|
reader.Position = codeOffset;
|
||||||
Decrypt(reader, delegateTypeToken);
|
Decrypt(reader, delegateTypeToken, simpleDeobfuscator);
|
||||||
reader.Position = origOffset;
|
reader.Position = origOffset;
|
||||||
}
|
}
|
||||||
Logger.Instance.DeIndent();
|
Logger.Instance.DeIndent();
|
||||||
}
|
}
|
||||||
|
|
||||||
void Decrypt(IBinaryReader reader, int delegateTypeToken) {
|
void Decrypt(IBinaryReader reader, int delegateTypeToken, ISimpleDeobfuscator simpleDeobfuscator) {
|
||||||
var delegateType = module.ResolveToken(delegateTypeToken) as TypeDef;
|
var delegateType = module.ResolveToken(delegateTypeToken) as TypeDef;
|
||||||
if (delegateType == null)
|
if (delegateType == null)
|
||||||
throw new ApplicationException("Couldn't find delegate type");
|
throw new ApplicationException("Couldn't find delegate type");
|
||||||
|
@ -162,6 +162,7 @@ namespace de4dot.code.deobfuscators.CryptoObfuscator {
|
||||||
encMethod.Body.Variables.Count,
|
encMethod.Body.Variables.Count,
|
||||||
encMethod.Body.ExceptionHandlers.Count);
|
encMethod.Body.ExceptionHandlers.Count);
|
||||||
delegateTypes.Add(delegateType);
|
delegateTypes.Add(delegateType);
|
||||||
|
simpleDeobfuscator.MethodModified(encMethod);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool GetTokens(TypeDef delegateType, out int delegateToken, out int encMethodToken, out int encDeclaringTypeToken) {
|
bool GetTokens(TypeDef delegateType, out int delegateToken, out int encMethodToken, out int encDeclaringTypeToken) {
|
||||||
|
|
|
@ -154,7 +154,7 @@ namespace de4dot.code.deobfuscators.Spices_Net {
|
||||||
public override void DeobfuscateBegin() {
|
public override void DeobfuscateBegin() {
|
||||||
base.DeobfuscateBegin();
|
base.DeobfuscateBegin();
|
||||||
|
|
||||||
methodCallInliner.Initialize();
|
methodCallInliner.Initialize(DeobfuscatedFile);
|
||||||
|
|
||||||
if (options.RestoreResourceNames) {
|
if (options.RestoreResourceNames) {
|
||||||
resourceNamesRestorer = new ResourceNamesRestorer(module);
|
resourceNamesRestorer = new ResourceNamesRestorer(module);
|
||||||
|
|
|
@ -52,12 +52,12 @@ namespace de4dot.code.deobfuscators.Spices_Net {
|
||||||
return CheckCanInline(method);
|
return CheckCanInline(method);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Initialize() {
|
public void Initialize(ISimpleDeobfuscator simpleDeobfuscator) {
|
||||||
InitializeMethodsTypes();
|
InitializeMethodsTypes();
|
||||||
RestoreMethodBodies();
|
RestoreMethodBodies(simpleDeobfuscator);
|
||||||
}
|
}
|
||||||
|
|
||||||
void RestoreMethodBodies() {
|
void RestoreMethodBodies(ISimpleDeobfuscator simpleDeobfuscator) {
|
||||||
var methodToOrigMethods = new MethodDefAndDeclaringTypeDict<List<MethodDef>>();
|
var methodToOrigMethods = new MethodDefAndDeclaringTypeDict<List<MethodDef>>();
|
||||||
foreach (var t in module.Types) {
|
foreach (var t in module.Types) {
|
||||||
var types = new List<TypeDef>(AllTypesHelper.Types(new List<TypeDef> { t }));
|
var types = new List<TypeDef>(AllTypesHelper.Types(new List<TypeDef> { t }));
|
||||||
|
@ -95,6 +95,7 @@ namespace de4dot.code.deobfuscators.Spices_Net {
|
||||||
calledMethod.MDToken.ToInt32());
|
calledMethod.MDToken.ToInt32());
|
||||||
DotNetUtils.CopyBodyFromTo(calledMethod, method);
|
DotNetUtils.CopyBodyFromTo(calledMethod, method);
|
||||||
classMethods.Add(calledMethod, method);
|
classMethods.Add(calledMethod, method);
|
||||||
|
simpleDeobfuscator.MethodModified(method);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user