修复当混淆程序集虚函数override了nonObfuscatedButReferencingObfuscatedModuleSet程序集中虚函数,错误地将nonObfuscatedButReferencingObfuscatedModuleSet中虚函数也混淆的bug
parent
83598d6805
commit
ea5a8e62ce
|
@ -23,6 +23,7 @@ namespace Obfuz.ObfusPasses.SymbolObfus
|
||||||
private List<ModuleDef> _toObfuscatedModules;
|
private List<ModuleDef> _toObfuscatedModules;
|
||||||
private List<ModuleDef> _obfuscatedAndNotObfuscatedModules;
|
private List<ModuleDef> _obfuscatedAndNotObfuscatedModules;
|
||||||
private HashSet<ModuleDef> _toObfuscatedModuleSet;
|
private HashSet<ModuleDef> _toObfuscatedModuleSet;
|
||||||
|
private HashSet<ModuleDef> _nonObfuscatedButReferencingObfuscatedModuleSet;
|
||||||
private IObfuscationPolicy _renamePolicy;
|
private IObfuscationPolicy _renamePolicy;
|
||||||
private INameMaker _nameMaker;
|
private INameMaker _nameMaker;
|
||||||
private readonly Dictionary<ModuleDef, List<CustomAttributeInfo>> _customAttributeArgumentsWithTypeByMods = new Dictionary<ModuleDef, List<CustomAttributeInfo>>();
|
private readonly Dictionary<ModuleDef, List<CustomAttributeInfo>> _customAttributeArgumentsWithTypeByMods = new Dictionary<ModuleDef, List<CustomAttributeInfo>>();
|
||||||
|
@ -67,6 +68,7 @@ namespace Obfuz.ObfusPasses.SymbolObfus
|
||||||
_toObfuscatedModules = ctx.modulesToObfuscate;
|
_toObfuscatedModules = ctx.modulesToObfuscate;
|
||||||
_obfuscatedAndNotObfuscatedModules = ctx.allObfuscationRelativeModules;
|
_obfuscatedAndNotObfuscatedModules = ctx.allObfuscationRelativeModules;
|
||||||
_toObfuscatedModuleSet = new HashSet<ModuleDef>(ctx.modulesToObfuscate);
|
_toObfuscatedModuleSet = new HashSet<ModuleDef>(ctx.modulesToObfuscate);
|
||||||
|
_nonObfuscatedButReferencingObfuscatedModuleSet = new HashSet<ModuleDef>(ctx.allObfuscationRelativeModules.Where(m => !_toObfuscatedModuleSet.Contains(m)));
|
||||||
|
|
||||||
var obfuscateRuleConfig = new ConfigurableRenamePolicy(ctx.coreSettings.assembliesToObfuscate, ctx.modulesToObfuscate, _obfuscationRuleFiles);
|
var obfuscateRuleConfig = new ConfigurableRenamePolicy(ctx.coreSettings.assembliesToObfuscate, ctx.modulesToObfuscate, _obfuscationRuleFiles);
|
||||||
var totalRenamePolicies = new List<IObfuscationPolicy>
|
var totalRenamePolicies = new List<IObfuscationPolicy>
|
||||||
|
@ -551,7 +553,10 @@ namespace Obfuz.ObfusPasses.SymbolObfus
|
||||||
VirtualMethodGroup group = _virtualMethodGroupCalculator.GetMethodGroup(method);
|
VirtualMethodGroup group = _virtualMethodGroupCalculator.GetMethodGroup(method);
|
||||||
if (!groupNeedRenames.TryGetValue(group, out var needRename))
|
if (!groupNeedRenames.TryGetValue(group, out var needRename))
|
||||||
{
|
{
|
||||||
if (!group.methods.Any(m => _toObfuscatedModuleSet.Contains(m.DeclaringType.Module)))
|
var rootBeInheritedTypes = group.GetRootBeInheritedTypes();
|
||||||
|
// - if the group contains no obfuscated methods
|
||||||
|
// - if the group contains method defined in non-obfuscated module but referencing obfuscated module and virtual method in obfuscated type overrides virtual method from non-obfuscated type
|
||||||
|
if (!group.methods.Any(m => _toObfuscatedModuleSet.Contains(m.DeclaringType.Module)) || group.methods.Any(m => _nonObfuscatedButReferencingObfuscatedModuleSet.Contains(m.Module) && rootBeInheritedTypes.Contains(m.DeclaringType)))
|
||||||
{
|
{
|
||||||
needRename = false;
|
needRename = false;
|
||||||
}
|
}
|
||||||
|
|
|
@ -11,6 +11,8 @@ namespace Obfuz.ObfusPasses.SymbolObfus
|
||||||
|
|
||||||
private HashSet<TypeDef> _nameScopes;
|
private HashSet<TypeDef> _nameScopes;
|
||||||
|
|
||||||
|
private HashSet<TypeDef> _rootNameScope;
|
||||||
|
|
||||||
public HashSet<TypeDef> GetNameConflictTypeScopes()
|
public HashSet<TypeDef> GetNameConflictTypeScopes()
|
||||||
{
|
{
|
||||||
if (_nameScopes != null)
|
if (_nameScopes != null)
|
||||||
|
@ -31,6 +33,25 @@ namespace Obfuz.ObfusPasses.SymbolObfus
|
||||||
return _nameScopes;
|
return _nameScopes;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public HashSet<TypeDef> GetRootBeInheritedTypes()
|
||||||
|
{
|
||||||
|
if (_rootNameScope != null)
|
||||||
|
{
|
||||||
|
return _rootNameScope;
|
||||||
|
}
|
||||||
|
_rootNameScope = new HashSet<TypeDef>();
|
||||||
|
var nameScopes = GetNameConflictTypeScopes();
|
||||||
|
foreach (var type in nameScopes)
|
||||||
|
{
|
||||||
|
TypeDef parentType = MetaUtil.GetBaseTypeDef(type);
|
||||||
|
if (parentType == null || !nameScopes.Contains(parentType))
|
||||||
|
{
|
||||||
|
_rootNameScope.Add(type);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return _rootNameScope;
|
||||||
|
}
|
||||||
|
|
||||||
public IEnumerable<TypeDef> GetNameDeclaringTypeScopes()
|
public IEnumerable<TypeDef> GetNameDeclaringTypeScopes()
|
||||||
{
|
{
|
||||||
foreach (var method in methods)
|
foreach (var method in methods)
|
||||||
|
|
Loading…
Reference in New Issue