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>();
|
||||
bool Check(MethodDef method, SimpleDeobFlags flag) {
|
||||
if (method == null)
|
||||
return false;
|
||||
SimpleDeobFlags oldFlags;
|
||||
simpleDeobfuscatorFlags.TryGetValue(method, out oldFlags);
|
||||
simpleDeobfuscatorFlags[method] = oldFlags | 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) {
|
||||
if (savedMethodBodies != null)
|
||||
|
@ -784,12 +795,16 @@ namespace de4dot.code {
|
|||
Logger.Instance.DeIndent();
|
||||
}
|
||||
|
||||
void ISimpleDeobfuscator.MethodModified(MethodDef method) {
|
||||
Clear(method, SimpleDeobFlags.HasDeobfuscated);
|
||||
}
|
||||
|
||||
void ISimpleDeobfuscator.Deobfuscate(MethodDef method) {
|
||||
((ISimpleDeobfuscator)this).Deobfuscate(method, false);
|
||||
}
|
||||
|
||||
void ISimpleDeobfuscator.Deobfuscate(MethodDef method, bool force) {
|
||||
if (!force && Check(method, SimpleDeobFlags.HasDeobfuscated))
|
||||
if (method == null || !force && Check(method, SimpleDeobFlags.HasDeobfuscated))
|
||||
return;
|
||||
|
||||
Deobfuscate(method, "Deobfuscating control flow", (blocks) => {
|
||||
|
|
|
@ -21,6 +21,7 @@ using dnlib.DotNet;
|
|||
|
||||
namespace de4dot.code.deobfuscators {
|
||||
public interface ISimpleDeobfuscator {
|
||||
void MethodModified(MethodDef method);
|
||||
void Deobfuscate(MethodDef method);
|
||||
void Deobfuscate(MethodDef method, bool force);
|
||||
void DecryptStrings(MethodDef method, IDeobfuscator deob);
|
||||
|
|
Loading…
Reference in New Issue
Block a user