有没有办法检查您的代码库是否以编程方式进行模糊处理?
在我的项目中,我使用反射从外部DLL(我控制)加载类。加载信息的数据(程序集和类名)存储在资源文件中。
一旦我对项目进行了模糊处理,我就无法将外部DLL链接到输出EXE(即将所有程序集汇总到单个输出可执行文件中),因为资源文件中的程序集名称不再正确(DLL具有成为EXE的一部分)。但是我必须保留未混淆的功能以及调试目的。
我喜欢要做的事情,就是检查代码是否在运行时被混淆了。如果没有,请使用资源文件中的程序集名称;如果有,请使用应用程序的名称。这样的事情可能吗?
答案 0 :(得分:3)
询问您知道将被混淆的类的类型信息,并检查该名称是否仍然是未经模糊处理的。在代码typeof(MyClass).Name == "MyClass"
中(可能需要包含命名空间)。
答案 1 :(得分:3)
大多数混淆器,例如Dotfuscate,都会在程序集上放置一个程序集级自定义属性。如果是混淆器的情况,请检查属性是否存在,例如:
bool foundObfuscatationAttribute = false;
foreach (object attribute in attributes)
{
if (attribute.GetType().FullName = "DotfuscatorAttribute")
{
foundObfuscatationAttribute = true;
break;
}
}
//If found...
由于我们不想引用包含属性本身的程序集,因此我们按名称进行检查。
答案 2 :(得分:0)
使用Reflection设置编译标记或某种标记,以检查它是否为
答案 3 :(得分:0)
检查程序集(dll)是否从Dotfuscator进行模糊处理而不需要文件夹中的依赖项的另一种方法是:
public static bool IsDllOfuscated(string dirFile)
{
return Assembly.Load(File.ReadAllBytes(dirFile)).GetType("DotfuscatorAttribute") != null;
}