refactor: refactor CallObfus rule schema
parent
685f5f5530
commit
570033520e
|
@ -17,7 +17,7 @@ namespace Obfuz.ObfusPasses.CallObfus
|
||||||
{
|
{
|
||||||
public string name;
|
public string name;
|
||||||
public NameMatcher nameMatcher;
|
public NameMatcher nameMatcher;
|
||||||
public bool? obfuscateNone;
|
public bool? obfuscate;
|
||||||
public List<WhiteListType> types = new List<WhiteListType>();
|
public List<WhiteListType> types = new List<WhiteListType>();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -25,7 +25,7 @@ namespace Obfuz.ObfusPasses.CallObfus
|
||||||
{
|
{
|
||||||
public string name;
|
public string name;
|
||||||
public NameMatcher nameMatcher;
|
public NameMatcher nameMatcher;
|
||||||
public bool? obfuscateNone;
|
public bool? obfuscate;
|
||||||
public List<WhiteListMethod> methods = new List<WhiteListMethod>();
|
public List<WhiteListMethod> methods = new List<WhiteListMethod>();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -33,6 +33,7 @@ namespace Obfuz.ObfusPasses.CallObfus
|
||||||
{
|
{
|
||||||
public string name;
|
public string name;
|
||||||
public NameMatcher nameMatcher;
|
public NameMatcher nameMatcher;
|
||||||
|
public bool? obfuscate;
|
||||||
}
|
}
|
||||||
|
|
||||||
class ObfuscationRule : IRule<ObfuscationRule>
|
class ObfuscationRule : IRule<ObfuscationRule>
|
||||||
|
@ -112,6 +113,28 @@ namespace Obfuz.ObfusPasses.CallObfus
|
||||||
_global.InheritParent(s_default);
|
_global.InheritParent(s_default);
|
||||||
}
|
}
|
||||||
_configParser.InheritParentRules(_global);
|
_configParser.InheritParentRules(_global);
|
||||||
|
InheritWhitelistRules();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void InheritWhitelistRules()
|
||||||
|
{
|
||||||
|
foreach (var ass in _whiteListAssemblies)
|
||||||
|
{
|
||||||
|
foreach (var type in ass.types)
|
||||||
|
{
|
||||||
|
if (type.obfuscate == null)
|
||||||
|
{
|
||||||
|
type.obfuscate = ass.obfuscate;
|
||||||
|
}
|
||||||
|
foreach (var method in type.methods)
|
||||||
|
{
|
||||||
|
if (method.obfuscate == null)
|
||||||
|
{
|
||||||
|
method.obfuscate = type.obfuscate;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void ParseGlobalElement(string configFile, XmlElement ele)
|
private void ParseGlobalElement(string configFile, XmlElement ele)
|
||||||
|
@ -172,10 +195,9 @@ namespace Obfuz.ObfusPasses.CallObfus
|
||||||
var ass = new WhiteListAssembly();
|
var ass = new WhiteListAssembly();
|
||||||
ass.name = element.GetAttribute("name");
|
ass.name = element.GetAttribute("name");
|
||||||
ass.nameMatcher = new NameMatcher(ass.name);
|
ass.nameMatcher = new NameMatcher(ass.name);
|
||||||
if (element.HasAttribute("obfuscateNone"))
|
|
||||||
{
|
ass.obfuscate = ConfigUtil.ParseNullableBool(element.GetAttribute("obfuscate")) ?? false;
|
||||||
ass.obfuscateNone = ConfigUtil.ParseBool(element.GetAttribute("obfuscateNone"));
|
|
||||||
}
|
|
||||||
foreach (XmlNode node in element.ChildNodes)
|
foreach (XmlNode node in element.ChildNodes)
|
||||||
{
|
{
|
||||||
if (!(node is XmlElement ele))
|
if (!(node is XmlElement ele))
|
||||||
|
@ -199,10 +221,7 @@ namespace Obfuz.ObfusPasses.CallObfus
|
||||||
var type = new WhiteListType();
|
var type = new WhiteListType();
|
||||||
type.name = element.GetAttribute("name");
|
type.name = element.GetAttribute("name");
|
||||||
type.nameMatcher = new NameMatcher(type.name);
|
type.nameMatcher = new NameMatcher(type.name);
|
||||||
if (element.HasAttribute("obfuscateNone"))
|
type.obfuscate = ConfigUtil.ParseNullableBool(element.GetAttribute("obfuscate"));
|
||||||
{
|
|
||||||
type.obfuscateNone = ConfigUtil.ParseBool(element.GetAttribute("obfuscateNone"));
|
|
||||||
}
|
|
||||||
|
|
||||||
foreach (XmlNode node in element.ChildNodes)
|
foreach (XmlNode node in element.ChildNodes)
|
||||||
{
|
{
|
||||||
|
@ -229,6 +248,7 @@ namespace Obfuz.ObfusPasses.CallObfus
|
||||||
var method = new WhiteListMethod();
|
var method = new WhiteListMethod();
|
||||||
method.name = element.GetAttribute("name");
|
method.name = element.GetAttribute("name");
|
||||||
method.nameMatcher = new NameMatcher(method.name);
|
method.nameMatcher = new NameMatcher(method.name);
|
||||||
|
method.obfuscate = ConfigUtil.ParseNullableBool(element.GetAttribute("obfuscate"));
|
||||||
return method;
|
return method;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -324,28 +344,22 @@ namespace Obfuz.ObfusPasses.CallObfus
|
||||||
{
|
{
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
if (ass.obfuscateNone == true)
|
|
||||||
{
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
foreach (var type in ass.types)
|
foreach (var type in ass.types)
|
||||||
{
|
{
|
||||||
if (!type.nameMatcher.IsMatch(typeFullName))
|
if (!type.nameMatcher.IsMatch(typeFullName))
|
||||||
{
|
{
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
if (type.obfuscateNone == true)
|
|
||||||
{
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
foreach (var method in type.methods)
|
foreach (var method in type.methods)
|
||||||
{
|
{
|
||||||
if (method.nameMatcher.IsMatch(methodName))
|
if (method.nameMatcher.IsMatch(methodName))
|
||||||
{
|
{
|
||||||
return true;
|
return !method.obfuscate.Value;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
return !type.obfuscate.Value;
|
||||||
}
|
}
|
||||||
|
return !ass.obfuscate.Value;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue