Remove duplicate resources
This commit is contained in:
parent
278e62a4b3
commit
6c04a950e7
|
@ -138,6 +138,7 @@ namespace de4dot.code.deobfuscators.MaxtoCode {
|
||||||
addCctorInitCallToBeRemoved(method);
|
addCctorInitCallToBeRemoved(method);
|
||||||
addTypeToBeRemoved(mainType.Type, "Obfuscator type");
|
addTypeToBeRemoved(mainType.Type, "Obfuscator type");
|
||||||
addModuleReferencesToBeRemoved(mainType.ModuleReferences, "MC runtime module reference");
|
addModuleReferencesToBeRemoved(mainType.ModuleReferences, "MC runtime module reference");
|
||||||
|
removeDuplicateEmbeddedResources();
|
||||||
}
|
}
|
||||||
|
|
||||||
static Encoding getEncoding(int cp) {
|
static Encoding getEncoding(int cp) {
|
||||||
|
@ -149,6 +150,43 @@ namespace de4dot.code.deobfuscators.MaxtoCode {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void removeDuplicateEmbeddedResources() {
|
||||||
|
var resources = new Dictionary<uint, List<EmbeddedResource>>();
|
||||||
|
foreach (var tmp in module.Resources) {
|
||||||
|
var rsrc = tmp as EmbeddedResource;
|
||||||
|
if (rsrc == null)
|
||||||
|
continue;
|
||||||
|
if (rsrc.Offset == null)
|
||||||
|
continue;
|
||||||
|
List<EmbeddedResource> list;
|
||||||
|
if (!resources.TryGetValue(rsrc.Offset.Value, out list))
|
||||||
|
resources[rsrc.Offset.Value] = list = new List<EmbeddedResource>();
|
||||||
|
list.Add(rsrc);
|
||||||
|
}
|
||||||
|
|
||||||
|
foreach (var list in resources.Values) {
|
||||||
|
if (list.Count <= 1)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
EmbeddedResource resourceToKeep = null;
|
||||||
|
foreach (var rsrc in list) {
|
||||||
|
if (string.IsNullOrEmpty(rsrc.Name))
|
||||||
|
continue;
|
||||||
|
|
||||||
|
resourceToKeep = rsrc;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if (resourceToKeep == null)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
foreach (var rsrc in list) {
|
||||||
|
if (rsrc == resourceToKeep)
|
||||||
|
continue;
|
||||||
|
addResourceToBeRemoved(rsrc, string.Format("Duplicate of resource {0}", Utils.toCsharpString(resourceToKeep.Name)));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public override IEnumerable<int> getStringDecrypterMethods() {
|
public override IEnumerable<int> getStringDecrypterMethods() {
|
||||||
var list = new List<int>();
|
var list = new List<int>();
|
||||||
if (stringDecrypter != null && stringDecrypter.Detected)
|
if (stringDecrypter != null && stringDecrypter.Detected)
|
||||||
|
|
Loading…
Reference in New Issue
Block a user