Add ISimpleDeobfuscator::MethodModified() to reset deobfuscated state
This commit is contained in:
parent
24b22268e3
commit
01dbcd0632
|
@ -752,11 +752,22 @@ namespace de4dot.code {
|
||||||
}
|
}
|
||||||
Dictionary<MethodDef, SimpleDeobFlags> simpleDeobfuscatorFlags = new Dictionary<MethodDef, SimpleDeobFlags>();
|
Dictionary<MethodDef, SimpleDeobFlags> simpleDeobfuscatorFlags = new Dictionary<MethodDef, SimpleDeobFlags>();
|
||||||
bool Check(MethodDef method, SimpleDeobFlags flag) {
|
bool Check(MethodDef method, SimpleDeobFlags flag) {
|
||||||
|
if (method == null)
|
||||||
|
return false;
|
||||||
SimpleDeobFlags oldFlags;
|
SimpleDeobFlags oldFlags;
|
||||||
simpleDeobfuscatorFlags.TryGetValue(method, out oldFlags);
|
simpleDeobfuscatorFlags.TryGetValue(method, out oldFlags);
|
||||||
simpleDeobfuscatorFlags[method] = oldFlags | flag;
|
simpleDeobfuscatorFlags[method] = oldFlags | flag;
|
||||||
return (oldFlags & flag) == flag;
|
return (oldFlags & flag) == flag;
|
||||||
}
|
}
|
||||||
|
bool Clear(MethodDef method, SimpleDeobFlags flag) {
|
||||||
|
if (method == null)
|
||||||
|
return false;
|
||||||
|
SimpleDeobFlags oldFlags;
|
||||||
|
if (!simpleDeobfuscatorFlags.TryGetValue(method, out oldFlags))
|
||||||
|
return false;
|
||||||
|
simpleDeobfuscatorFlags[method] = oldFlags & ~flag;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
void Deobfuscate(MethodDef method, string msg, Action<Blocks> handler) {
|
void Deobfuscate(MethodDef method, string msg, Action<Blocks> handler) {
|
||||||
if (savedMethodBodies != null)
|
if (savedMethodBodies != null)
|
||||||
|
@ -784,12 +795,16 @@ namespace de4dot.code {
|
||||||
Logger.Instance.DeIndent();
|
Logger.Instance.DeIndent();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ISimpleDeobfuscator.MethodModified(MethodDef method) {
|
||||||
|
Clear(method, SimpleDeobFlags.HasDeobfuscated);
|
||||||
|
}
|
||||||
|
|
||||||
void ISimpleDeobfuscator.Deobfuscate(MethodDef method) {
|
void ISimpleDeobfuscator.Deobfuscate(MethodDef method) {
|
||||||
((ISimpleDeobfuscator)this).Deobfuscate(method, false);
|
((ISimpleDeobfuscator)this).Deobfuscate(method, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
void ISimpleDeobfuscator.Deobfuscate(MethodDef method, bool force) {
|
void ISimpleDeobfuscator.Deobfuscate(MethodDef method, bool force) {
|
||||||
if (!force && Check(method, SimpleDeobFlags.HasDeobfuscated))
|
if (method == null || !force && Check(method, SimpleDeobFlags.HasDeobfuscated))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
Deobfuscate(method, "Deobfuscating control flow", (blocks) => {
|
Deobfuscate(method, "Deobfuscating control flow", (blocks) => {
|
||||||
|
|
|
@ -21,6 +21,7 @@ using dnlib.DotNet;
|
||||||
|
|
||||||
namespace de4dot.code.deobfuscators {
|
namespace de4dot.code.deobfuscators {
|
||||||
public interface ISimpleDeobfuscator {
|
public interface ISimpleDeobfuscator {
|
||||||
|
void MethodModified(MethodDef method);
|
||||||
void Deobfuscate(MethodDef method);
|
void Deobfuscate(MethodDef method);
|
||||||
void Deobfuscate(MethodDef method, bool force);
|
void Deobfuscate(MethodDef method, bool force);
|
||||||
void DecryptStrings(MethodDef method, IDeobfuscator deob);
|
void DecryptStrings(MethodDef method, IDeobfuscator deob);
|
||||||
|
|
Loading…
Reference in New Issue
Block a user