Tad*_*ada 5 c# reflection .net-assembly
我很好奇是否可以确定大会是否引用了某个特定的类.我目前正在使用Reflection来加载Assemblies,然后我确定正在加载的程序集中引用了哪些程序集:
foreach (var vReferencedAssembly in vSomeAssembly.GetReferencedAssemblies())
Run Code Online (Sandbox Code Playgroud)
现在我知道引用了哪些程序集,我想深入研究那些vReferencedAssembly,并确定是否会出现这样的情况:
File.Create(vSomeFile);
Run Code Online (Sandbox Code Playgroud)
用简单的英语,我不想从提供给我的列表中加载一个可能包含我认为是威胁的程序集.所以我可能想要阻止可能操纵文件的东西等等.
我相信您正在寻找的是将程序集加载到仅反射上下文中。这允许您将它们加载到安全区域,在检查它们之前不会执行任何代码。
请参阅:http ://msdn.microsoft.com/en-us/library/ms172331.aspx
更新:您可以使用反射来查看变量、属性、参数、返回类型等内容,但这仍然无法帮助您检测完全包含在方法内的恶意代码。据我了解,区分安全代码和不安全代码最好留给系统管理员。这些应用程序与 PC 上的安全位置具有隐式信任关系。IE:全局程序集缓存、当前工作目录或由应用程序确定的某些固定路径。然后,PC 仅授予管理员管理该位置中的程序集的能力。
更新 2:您还可以考虑在其自己的应用程序域中运行此潜在不安全的代码。您可以在此处设置允许的内容和不允许的内容。请参阅http://msdn.microsoft.com/en-us/library/bb763046.aspx。
更新 3:虽然我仍然认为使用适当的权限在其自己的应用程序域中加载不受信任的代码是最干净的方法,但可以确定方法在运行时内部引用的内容,正如此问题所询问的那样。其要点是使用反射来获取方法的原始 IL 字节(MethodBody.GetILAsByteArray),并使用您选择的 IL 解析器对其进行分析。