修复混淆bug
parent
2087abf08c
commit
c69af127c0
|
@ -11,6 +11,10 @@ namespace Obfuz
|
||||||
|
|
||||||
public NameMatcher(string nameOrPattern)
|
public NameMatcher(string nameOrPattern)
|
||||||
{
|
{
|
||||||
|
if (string.IsNullOrEmpty(nameOrPattern))
|
||||||
|
{
|
||||||
|
nameOrPattern = "*";
|
||||||
|
}
|
||||||
_str = nameOrPattern;
|
_str = nameOrPattern;
|
||||||
_regex = nameOrPattern.Contains('*') || nameOrPattern.Contains('?') ? new Regex(WildcardToRegex(nameOrPattern)) : null;
|
_regex = nameOrPattern.Contains('*') || nameOrPattern.Contains('?') ? new Regex(WildcardToRegex(nameOrPattern)) : null;
|
||||||
}
|
}
|
||||||
|
|
|
@ -124,7 +124,7 @@ namespace Obfuz
|
||||||
public bool obfuscateName;
|
public bool obfuscateName;
|
||||||
public bool obfuscateNamespace;
|
public bool obfuscateNamespace;
|
||||||
|
|
||||||
public List<TypeRuleSpec> nestTypeRuleSpecs;
|
//public List<TypeRuleSpec> nestTypeRuleSpecs;
|
||||||
public List<FieldRuleSpec> fieldRuleSpecs;
|
public List<FieldRuleSpec> fieldRuleSpecs;
|
||||||
public List<MethodRuleSpec> methodRuleSpecs;
|
public List<MethodRuleSpec> methodRuleSpecs;
|
||||||
public List<PropertyRuleSpec> propertyRuleSpecs;
|
public List<PropertyRuleSpec> propertyRuleSpecs;
|
||||||
|
@ -199,7 +199,7 @@ namespace Obfuz
|
||||||
ruleName = "none",
|
ruleName = "none",
|
||||||
obfuscateName = false,
|
obfuscateName = false,
|
||||||
obfuscateNamespace = false,
|
obfuscateNamespace = false,
|
||||||
nestTypeRuleSpecs = new List<TypeRuleSpec>(),
|
//nestTypeRuleSpecs = new List<TypeRuleSpec>(),
|
||||||
fieldRuleSpecs = new List<FieldRuleSpec> { new FieldRuleSpec { rule = s_noneFieldRule} },
|
fieldRuleSpecs = new List<FieldRuleSpec> { new FieldRuleSpec { rule = s_noneFieldRule} },
|
||||||
methodRuleSpecs = new List<MethodRuleSpec> { new MethodRuleSpec { rule = s_noneMethodRule} },
|
methodRuleSpecs = new List<MethodRuleSpec> { new MethodRuleSpec { rule = s_noneMethodRule} },
|
||||||
propertyRuleSpecs = new List<PropertyRuleSpec> { new PropertyRuleSpec { rule = s_nonePropertyRule} },
|
propertyRuleSpecs = new List<PropertyRuleSpec> { new PropertyRuleSpec { rule = s_nonePropertyRule} },
|
||||||
|
@ -213,13 +213,13 @@ namespace Obfuz
|
||||||
typeRuleSpecs = new List<TypeRuleSpec> { new TypeRuleSpec { rule = s_noneTypeRule } },
|
typeRuleSpecs = new List<TypeRuleSpec> { new TypeRuleSpec { rule = s_noneTypeRule } },
|
||||||
};
|
};
|
||||||
|
|
||||||
static ObfuscateRuleConfig()
|
//static ObfuscateRuleConfig()
|
||||||
{
|
//{
|
||||||
s_noneTypeRule.nestTypeRuleSpecs.Add(new TypeRuleSpec
|
// s_noneTypeRule.nestTypeRuleSpecs.Add(new TypeRuleSpec
|
||||||
{
|
// {
|
||||||
rule = s_noneTypeRule,
|
// rule = s_noneTypeRule,
|
||||||
});
|
// });
|
||||||
}
|
//}
|
||||||
|
|
||||||
private IRule GetOrParseRule(string ruleName, RuleType ruleType, XmlElement ele)
|
private IRule GetOrParseRule(string ruleName, RuleType ruleType, XmlElement ele)
|
||||||
{
|
{
|
||||||
|
@ -303,7 +303,7 @@ namespace Obfuz
|
||||||
{
|
{
|
||||||
var rule = new AssemblyRule();
|
var rule = new AssemblyRule();
|
||||||
rule.ruleName = ruleName;
|
rule.ruleName = ruleName;
|
||||||
rule.obfuscateName = ParseBoolNoneOrFalse(element.GetAttribute("ob:name"));
|
rule.obfuscateName = ParseBoolNoneOrFalse(element.GetAttribute("ob-name"));
|
||||||
rule.typeRuleSpecs = new List<TypeRuleSpec>();
|
rule.typeRuleSpecs = new List<TypeRuleSpec>();
|
||||||
foreach (XmlNode node in element.ChildNodes)
|
foreach (XmlNode node in element.ChildNodes)
|
||||||
{
|
{
|
||||||
|
@ -328,9 +328,9 @@ namespace Obfuz
|
||||||
{
|
{
|
||||||
var rule = new TypeRule();
|
var rule = new TypeRule();
|
||||||
rule.ruleName = ruleName;
|
rule.ruleName = ruleName;
|
||||||
rule.obfuscateName = ParseBoolNoneOrFalse(element.GetAttribute("ob:name"));
|
rule.obfuscateName = ParseBoolNoneOrFalse(element.GetAttribute("ob-name"));
|
||||||
rule.obfuscateNamespace = ParseBoolNoneOrFalse(element.GetAttribute("ob:namespace"));
|
rule.obfuscateNamespace = ParseBoolNoneOrFalse(element.GetAttribute("ob-namespace"));
|
||||||
rule.nestTypeRuleSpecs = new List<TypeRuleSpec>();
|
//rule.nestTypeRuleSpecs = new List<TypeRuleSpec>();
|
||||||
rule.fieldRuleSpecs = new List<FieldRuleSpec>();
|
rule.fieldRuleSpecs = new List<FieldRuleSpec>();
|
||||||
rule.methodRuleSpecs = new List<MethodRuleSpec>();
|
rule.methodRuleSpecs = new List<MethodRuleSpec>();
|
||||||
rule.propertyRuleSpecs = new List<PropertyRuleSpec>();
|
rule.propertyRuleSpecs = new List<PropertyRuleSpec>();
|
||||||
|
@ -343,15 +343,15 @@ namespace Obfuz
|
||||||
}
|
}
|
||||||
switch (childElement.Name)
|
switch (childElement.Name)
|
||||||
{
|
{
|
||||||
case "nesttype":
|
//case "nesttype":
|
||||||
{
|
//{
|
||||||
var typeRuleSpec = new TypeRuleSpec();
|
// var typeRuleSpec = new TypeRuleSpec();
|
||||||
typeRuleSpec.nameMatcher = new NameMatcher(childElement.GetAttribute("name"));
|
// typeRuleSpec.nameMatcher = new NameMatcher(childElement.GetAttribute("name"));
|
||||||
typeRuleSpec.modifierType = ParseModifierType(childElement.GetAttribute("modifier"));
|
// typeRuleSpec.modifierType = ParseModifierType(childElement.GetAttribute("modifier"));
|
||||||
typeRuleSpec.rule = (TypeRule)GetOrParseRule(childElement.GetAttribute("rule"), RuleType.Type, childElement);
|
// typeRuleSpec.rule = (TypeRule)GetOrParseRule(childElement.GetAttribute("rule"), RuleType.Type, childElement);
|
||||||
rule.nestTypeRuleSpecs.Add(typeRuleSpec);
|
// rule.nestTypeRuleSpecs.Add(typeRuleSpec);
|
||||||
break;
|
// break;
|
||||||
}
|
//}
|
||||||
case "field":
|
case "field":
|
||||||
{
|
{
|
||||||
var fieldRuleSpec = new FieldRuleSpec();
|
var fieldRuleSpec = new FieldRuleSpec();
|
||||||
|
@ -371,6 +371,7 @@ namespace Obfuz
|
||||||
var propertyRulerSpec = new PropertyRuleSpec();
|
var propertyRulerSpec = new PropertyRuleSpec();
|
||||||
propertyRulerSpec.nameMatcher = new NameMatcher(childElement.GetAttribute("name"));
|
propertyRulerSpec.nameMatcher = new NameMatcher(childElement.GetAttribute("name"));
|
||||||
propertyRulerSpec.rule = (PropertyRule)GetOrParseRule(childElement.GetAttribute("rule"), RuleType.Property, childElement);
|
propertyRulerSpec.rule = (PropertyRule)GetOrParseRule(childElement.GetAttribute("rule"), RuleType.Property, childElement);
|
||||||
|
rule.propertyRuleSpecs.Add(propertyRulerSpec);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case "event":
|
case "event":
|
||||||
|
@ -400,9 +401,9 @@ namespace Obfuz
|
||||||
{
|
{
|
||||||
var rule = new MethodRule();
|
var rule = new MethodRule();
|
||||||
rule.ruleName = ruleName;
|
rule.ruleName = ruleName;
|
||||||
rule.obfuscateName = ParseBoolNoneOrFalse(element.GetAttribute("ob:name"));
|
rule.obfuscateName = ParseBoolNoneOrFalse(element.GetAttribute("ob-name"));
|
||||||
rule.obfuscateParam = ParseBoolNoneOrFalse(element.GetAttribute("ob:param"));
|
rule.obfuscateParam = ParseBoolNoneOrFalse(element.GetAttribute("ob-param"));
|
||||||
rule.obfuscateBody = ParseBoolNoneOrFalse(element.GetAttribute("ob:body"));
|
rule.obfuscateBody = ParseBoolNoneOrFalse(element.GetAttribute("ob-body"));
|
||||||
return rule;
|
return rule;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -410,7 +411,7 @@ namespace Obfuz
|
||||||
{
|
{
|
||||||
var rule = new FieldRule();
|
var rule = new FieldRule();
|
||||||
rule.ruleName = ruleName;
|
rule.ruleName = ruleName;
|
||||||
rule.obfuscateName = ParseBoolNoneOrFalse(element.GetAttribute("ob:name"));
|
rule.obfuscateName = ParseBoolNoneOrFalse(element.GetAttribute("ob-name"));
|
||||||
return rule;
|
return rule;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -418,7 +419,7 @@ namespace Obfuz
|
||||||
{
|
{
|
||||||
var rule = new PropertyRule();
|
var rule = new PropertyRule();
|
||||||
rule.ruleName = ruleName;
|
rule.ruleName = ruleName;
|
||||||
rule.obfuscateName = ParseBoolNoneOrFalse(element.GetAttribute("ob:name"));
|
rule.obfuscateName = ParseBoolNoneOrFalse(element.GetAttribute("ob-name"));
|
||||||
|
|
||||||
foreach (XmlNode node in element.ChildNodes)
|
foreach (XmlNode node in element.ChildNodes)
|
||||||
{
|
{
|
||||||
|
@ -456,7 +457,7 @@ namespace Obfuz
|
||||||
{
|
{
|
||||||
var rule = new EventRule();
|
var rule = new EventRule();
|
||||||
rule.ruleName = ruleName;
|
rule.ruleName = ruleName;
|
||||||
rule.obfuscateName = ParseBoolNoneOrFalse(element.GetAttribute("ob:name"));
|
rule.obfuscateName = ParseBoolNoneOrFalse(element.GetAttribute("ob-name"));
|
||||||
|
|
||||||
foreach (XmlNode node in element.ChildNodes)
|
foreach (XmlNode node in element.ChildNodes)
|
||||||
{
|
{
|
||||||
|
@ -566,6 +567,8 @@ namespace Obfuz
|
||||||
{
|
{
|
||||||
Debug.Log($"ObfuscateRule::LoadXml {xmlFile}");
|
Debug.Log($"ObfuscateRule::LoadXml {xmlFile}");
|
||||||
var doc = new XmlDocument();
|
var doc = new XmlDocument();
|
||||||
|
//var nsManager = new XmlNamespaceManager(doc.NameTable);
|
||||||
|
//nsManager.AddNamespace("ob", "https://github.com/focus-creative-games/Obfuz"); // 绑定前缀到 URI
|
||||||
doc.Load(xmlFile);
|
doc.Load(xmlFile);
|
||||||
var root = doc.DocumentElement;
|
var root = doc.DocumentElement;
|
||||||
if (root.Name != "obfuz")
|
if (root.Name != "obfuz")
|
||||||
|
@ -709,7 +712,7 @@ namespace Obfuz
|
||||||
cache = new TypeDefComputeCache();
|
cache = new TypeDefComputeCache();
|
||||||
_typeRenameCache.Add(typeDef, cache);
|
_typeRenameCache.Add(typeDef, cache);
|
||||||
|
|
||||||
if (!_assemblyRuleSpecs.TryGetValue(typeDef.Module.Assembly.Name, out var assemblyRuleSpec))
|
if (!_assemblyRuleSpecs.TryGetValue(typeDef.Module.Assembly.Name, out var assemblyRuleSpec) || assemblyRuleSpec.rule == null)
|
||||||
{
|
{
|
||||||
return cache;
|
return cache;
|
||||||
}
|
}
|
||||||
|
@ -718,7 +721,7 @@ namespace Obfuz
|
||||||
var totalMethodSpecFromPropertyAndEvents = new List<(MethodDef, MethodRuleSpec)>();
|
var totalMethodSpecFromPropertyAndEvents = new List<(MethodDef, MethodRuleSpec)>();
|
||||||
foreach (var typeRule in assemblyRuleSpec.rule.typeRuleSpecs)
|
foreach (var typeRule in assemblyRuleSpec.rule.typeRuleSpecs)
|
||||||
{
|
{
|
||||||
if (!typeRule.nameMatcher.IsMatch(typeName) || !MatchModifier(typeRule.modifierType, typeDef))
|
if ((typeRule.nameMatcher != null && !typeRule.nameMatcher.IsMatch(typeName)) || !MatchModifier(typeRule.modifierType, typeDef))
|
||||||
{
|
{
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
@ -729,49 +732,51 @@ namespace Obfuz
|
||||||
|
|
||||||
foreach (var eventDef in typeDef.Events)
|
foreach (var eventDef in typeDef.Events)
|
||||||
{
|
{
|
||||||
foreach (var eventRule in typeRule.rule.eventRuleSpecs)
|
foreach (var eventSpec in typeRule.rule.eventRuleSpecs)
|
||||||
{
|
{
|
||||||
if (!eventRule.nameMatcher.IsMatch(eventDef.Name))
|
if (eventSpec.nameMatcher != null && !eventSpec.nameMatcher.IsMatch(eventDef.Name))
|
||||||
{
|
{
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
if (!eventRule.rule.obfuscateName)
|
EventRule eventRule = eventSpec.rule;
|
||||||
|
if (!eventRule.obfuscateName)
|
||||||
{
|
{
|
||||||
cache.notObfuscatedEvents.Add(eventDef);
|
cache.notObfuscatedEvents.Add(eventDef);
|
||||||
}
|
}
|
||||||
if (eventDef.AddMethod != null && MatchModifier(eventRule.rule.add.modifierType, eventDef.AddMethod))
|
if (eventDef.AddMethod != null && eventRule.add != null && MatchModifier(eventRule.add.modifierType, eventDef.AddMethod))
|
||||||
{
|
{
|
||||||
totalMethodSpecFromPropertyAndEvents.Add((eventDef.AddMethod,eventRule.rule.add));
|
totalMethodSpecFromPropertyAndEvents.Add((eventDef.AddMethod,eventRule.add));
|
||||||
}
|
}
|
||||||
if (eventDef.RemoveMethod != null && MatchModifier(eventRule.rule.remove.modifierType, eventDef.RemoveMethod))
|
if (eventDef.RemoveMethod != null && eventRule.remove != null && MatchModifier(eventRule.remove.modifierType, eventDef.RemoveMethod))
|
||||||
{
|
{
|
||||||
totalMethodSpecFromPropertyAndEvents.Add((eventDef.RemoveMethod, eventRule.rule.remove));
|
totalMethodSpecFromPropertyAndEvents.Add((eventDef.RemoveMethod, eventRule.remove));
|
||||||
}
|
}
|
||||||
if (eventDef.InvokeMethod != null && MatchModifier(eventRule.rule.fire.modifierType, eventDef.InvokeMethod))
|
if (eventDef.InvokeMethod != null && eventRule.fire != null && MatchModifier(eventRule.fire.modifierType, eventDef.InvokeMethod))
|
||||||
{
|
{
|
||||||
totalMethodSpecFromPropertyAndEvents.Add((eventDef.InvokeMethod, eventRule.rule.fire));
|
totalMethodSpecFromPropertyAndEvents.Add((eventDef.InvokeMethod, eventRule.fire));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
foreach (var propertyDef in typeDef.Properties)
|
foreach (var propertyDef in typeDef.Properties)
|
||||||
{
|
{
|
||||||
foreach (var propertyRule in typeRule.rule.propertyRuleSpecs)
|
foreach (var propertySpec in typeRule.rule.propertyRuleSpecs)
|
||||||
{
|
{
|
||||||
if (!propertyRule.nameMatcher.IsMatch(propertyDef.Name))
|
if (propertySpec.nameMatcher != null && !propertySpec.nameMatcher.IsMatch(propertyDef.Name))
|
||||||
{
|
{
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
if (!propertyRule.rule.obfuscateName)
|
PropertyRule propertyRule = propertySpec.rule;
|
||||||
|
if (!propertyRule.obfuscateName)
|
||||||
{
|
{
|
||||||
cache.notObfuscatedProperties.Add(propertyDef);
|
cache.notObfuscatedProperties.Add(propertyDef);
|
||||||
}
|
}
|
||||||
if (propertyDef.GetMethod != null && MatchModifier(propertyRule.rule.getter.modifierType, propertyDef.GetMethod))
|
if (propertyDef.GetMethod != null && propertyRule.getter != null && MatchModifier(propertyRule.getter.modifierType, propertyDef.GetMethod))
|
||||||
{
|
{
|
||||||
totalMethodSpecFromPropertyAndEvents.Add((propertyDef.GetMethod, propertyRule.rule.getter));
|
totalMethodSpecFromPropertyAndEvents.Add((propertyDef.GetMethod, propertyRule.getter));
|
||||||
}
|
}
|
||||||
if (propertyDef.SetMethod != null && MatchModifier(propertyRule.rule.setter.modifierType, propertyDef.SetMethod))
|
if (propertyDef.SetMethod != null && propertyRule.setter != null && MatchModifier(propertyRule.setter.modifierType, propertyDef.SetMethod))
|
||||||
{
|
{
|
||||||
totalMethodSpecFromPropertyAndEvents.Add((propertyDef.SetMethod, propertyRule.rule.setter));
|
totalMethodSpecFromPropertyAndEvents.Add((propertyDef.SetMethod, propertyRule.setter));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -780,7 +785,7 @@ namespace Obfuz
|
||||||
{
|
{
|
||||||
foreach (var fieldRule in typeRule.rule.fieldRuleSpecs)
|
foreach (var fieldRule in typeRule.rule.fieldRuleSpecs)
|
||||||
{
|
{
|
||||||
if (fieldRule.nameMatcher.IsMatch(fieldDef.Name) && MatchModifier(fieldRule.modifierType, fieldDef) && !fieldRule.rule.obfuscateName)
|
if ((fieldRule.nameMatcher == null || fieldRule.nameMatcher.IsMatch(fieldDef.Name)) && MatchModifier(fieldRule.modifierType, fieldDef) && !fieldRule.rule.obfuscateName)
|
||||||
{
|
{
|
||||||
cache.notObfuscatedFields.Add(fieldDef);
|
cache.notObfuscatedFields.Add(fieldDef);
|
||||||
}
|
}
|
||||||
|
@ -806,7 +811,7 @@ namespace Obfuz
|
||||||
}
|
}
|
||||||
foreach (MethodRuleSpec methodSpec in totalMethodSpecs)
|
foreach (MethodRuleSpec methodSpec in totalMethodSpecs)
|
||||||
{
|
{
|
||||||
if (!methodSpec.nameMatcher.IsMatch(methodDef.Name) || !MatchModifier(methodSpec.modifierType, methodDef))
|
if ((methodSpec.nameMatcher != null && !methodSpec.nameMatcher.IsMatch(methodDef.Name)) || !MatchModifier(methodSpec.modifierType, methodDef))
|
||||||
{
|
{
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
@ -846,21 +851,21 @@ namespace Obfuz
|
||||||
{
|
{
|
||||||
TypeDef typeDef = fieldDef.DeclaringType;
|
TypeDef typeDef = fieldDef.DeclaringType;
|
||||||
TypeDefComputeCache cache = GetOrCreateTypeDefRenameComputeCache(typeDef);
|
TypeDefComputeCache cache = GetOrCreateTypeDefRenameComputeCache(typeDef);
|
||||||
return cache.notObfuscatedFields.Contains(fieldDef);
|
return !cache.notObfuscatedFields.Contains(fieldDef);
|
||||||
}
|
}
|
||||||
|
|
||||||
public bool NeedRename(PropertyDef propertyDef)
|
public bool NeedRename(PropertyDef propertyDef)
|
||||||
{
|
{
|
||||||
TypeDef typeDef = propertyDef.DeclaringType;
|
TypeDef typeDef = propertyDef.DeclaringType;
|
||||||
TypeDefComputeCache cache = GetOrCreateTypeDefRenameComputeCache(typeDef);
|
TypeDefComputeCache cache = GetOrCreateTypeDefRenameComputeCache(typeDef);
|
||||||
return cache.notObfuscatedProperties.Contains(propertyDef);
|
return !cache.notObfuscatedProperties.Contains(propertyDef);
|
||||||
}
|
}
|
||||||
|
|
||||||
public bool NeedRename(EventDef eventDef)
|
public bool NeedRename(EventDef eventDef)
|
||||||
{
|
{
|
||||||
TypeDef typeDef = eventDef.DeclaringType;
|
TypeDef typeDef = eventDef.DeclaringType;
|
||||||
TypeDefComputeCache cache = GetOrCreateTypeDefRenameComputeCache(typeDef);
|
TypeDefComputeCache cache = GetOrCreateTypeDefRenameComputeCache(typeDef);
|
||||||
return cache.notObfuscatedEvents.Contains(eventDef);
|
return !cache.notObfuscatedEvents.Contains(eventDef);
|
||||||
}
|
}
|
||||||
|
|
||||||
public bool NeedRename(ParamDef paramDef)
|
public bool NeedRename(ParamDef paramDef)
|
||||||
|
|
Loading…
Reference in New Issue