反射和动态类加载

在 .NET 结构中,反射和动态类加载是功能极其强大的工具。此级别的运行时程序自定义会使 Dotfuscator 无法绝对无误地确定重命名加载到给定程序中的所有类型是否安全。

请看以下 (C#) 代码片段:

public object GetNewType() { 
Type type = Type.GetType( GetUserInputString(), true ); 
object newInstance = Activator.CreateInstance( type ); 
return newInstance; 
} 

此代码按名称加载类型,并动态地对其进行实例化。另外,该名称来自用户输入的字符串(或者,来自运行时数据库或另一个程序等)!

显然,Dotfuscator 无法预知用户会输入哪些类型名称。解决办法是将所有潜在可加载类型的名称排除在外(请注意,仍然可以执行方法和字段的重命名操作)。正是在这种情况下,手动用户配置(以及有关要使用 Dotfuscator 处理的应用程序的某些知识)可以起到重要作用。

通常,这种情况不太严重。请看一个微小的变化情况:

public MyInterface GetNewType() { 
Type type = Type.GetType( GetUserInputString(), true ); 
object newInstance = Activator.CreateInstance( type ); 
return newInstance as MyInterface; 
} 

现在,可以立即清楚地看出,只有这些类型的一个子集需要排除:即那些实现 MyInterface 的类型。

© 2002-2007 PreEmptive Solutions. 保留所有权利。