添加string-length-range和array-length-range 白名单
parent
96282b6c91
commit
f4aa76ca39
|
@ -45,6 +45,8 @@ namespace Obfuz.ObfusPasses.ConstObfus.Policies
|
||||||
public List<NumberRange<long>> notEncryptLongRanges = new List<NumberRange<long>>();
|
public List<NumberRange<long>> notEncryptLongRanges = new List<NumberRange<long>>();
|
||||||
public List<NumberRange<float>> notEncryptFloatRanges = new List<NumberRange<float>>();
|
public List<NumberRange<float>> notEncryptFloatRanges = new List<NumberRange<float>>();
|
||||||
public List<NumberRange<double>> notEncryptDoubleRanges = new List<NumberRange<double>>();
|
public List<NumberRange<double>> notEncryptDoubleRanges = new List<NumberRange<double>>();
|
||||||
|
public List<NumberRange<int>> notEncryptArrayLengthRanges = new List<NumberRange<int>>();
|
||||||
|
public List<NumberRange<int>> notEncryptStringLengthRanges = new List<NumberRange<int>>();
|
||||||
|
|
||||||
public void InheritParent(ObfuscationRule parentRule)
|
public void InheritParent(ObfuscationRule parentRule)
|
||||||
{
|
{
|
||||||
|
@ -76,6 +78,8 @@ namespace Obfuz.ObfusPasses.ConstObfus.Policies
|
||||||
notEncryptLongRanges.AddRange(parentRule.notEncryptLongRanges);
|
notEncryptLongRanges.AddRange(parentRule.notEncryptLongRanges);
|
||||||
notEncryptFloatRanges.AddRange(parentRule.notEncryptFloatRanges);
|
notEncryptFloatRanges.AddRange(parentRule.notEncryptFloatRanges);
|
||||||
notEncryptDoubleRanges.AddRange(parentRule.notEncryptDoubleRanges);
|
notEncryptDoubleRanges.AddRange(parentRule.notEncryptDoubleRanges);
|
||||||
|
notEncryptArrayLengthRanges.AddRange(parentRule.notEncryptArrayLengthRanges);
|
||||||
|
notEncryptStringLengthRanges.AddRange(parentRule.notEncryptStringLengthRanges);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -366,6 +370,26 @@ namespace Obfuz.ObfusPasses.ConstObfus.Policies
|
||||||
rule.notEncryptDoubleRanges.Add(new NumberRange<double>(ParseNullableDouble(parts[0]), ParseNullableDouble(parts[1])));
|
rule.notEncryptDoubleRanges.Add(new NumberRange<double>(ParseNullableDouble(parts[0]), ParseNullableDouble(parts[1])));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
case "string-length-range":
|
||||||
|
{
|
||||||
|
var parts = value.Split(",");
|
||||||
|
if (parts.Length != 2)
|
||||||
|
{
|
||||||
|
throw new Exception($"Invalid xml file, string-length-range {value} is invalid");
|
||||||
|
}
|
||||||
|
rule.notEncryptStringLengthRanges.Add(new NumberRange<int>(ParseNullableInt(parts[0]), ParseNullableInt(parts[1])));
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case "array-length-range":
|
||||||
|
{
|
||||||
|
var parts = value.Split(",");
|
||||||
|
if (parts.Length != 2)
|
||||||
|
{
|
||||||
|
throw new Exception($"Invalid xml file, array-length-range {value} is invalid");
|
||||||
|
}
|
||||||
|
rule.notEncryptArrayLengthRanges.Add(new NumberRange<int>(ParseNullableInt(parts[0]), ParseNullableInt(parts[1])));
|
||||||
|
break;
|
||||||
|
}
|
||||||
default: throw new Exception($"Invalid xml file, unknown whitelist type {type} in {childEle.Name} node");
|
default: throw new Exception($"Invalid xml file, unknown whitelist type {type} in {childEle.Name} node");
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
@ -592,13 +616,41 @@ namespace Obfuz.ObfusPasses.ConstObfus.Policies
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
foreach (var range in rule.notEncryptStringLengthRanges)
|
||||||
|
{
|
||||||
|
if (range.min != null && value.Length < range.min)
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if (range.max != null && value.Length > range.max)
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
public override bool NeedObfuscateArray(MethodDef method, byte[] array)
|
public override bool NeedObfuscateArray(MethodDef method, byte[] array)
|
||||||
{
|
{
|
||||||
ObfuscationRule rule = GetMethodObfuscationRule(method);
|
ObfuscationRule rule = GetMethodObfuscationRule(method);
|
||||||
return rule.encryptArray != false;
|
if (rule.encryptArray == false)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
foreach (var range in rule.notEncryptArrayLengthRanges)
|
||||||
|
{
|
||||||
|
if (range.min != null && array.Length < range.min)
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if (range.max != null && array.Length > range.max)
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue