有没有办法对C#中的代码是否进行模糊处理进行条件检查?

时间:2011-03-23 17:55:09

标签: c# reflection obfuscation

有没有办法检查您的代码库是否以编程方式进行模糊处理?

在我的项目中,我使用反射从外部DLL(我控制)加载类。加载信息的数据(程序集和类名)存储在资源文件中。

一旦我对项目进行了模糊处理,我就无法将外部DLL链接到输出EXE(即将所有程序集汇总到单个输出可执行文件中),因为资源文件中的程序集名称不再正确(DLL具有成为EXE的一部分)。但是我必须保留未混淆的功能以及调试目的。

喜欢要做的事情,就是检查代码是否在运行时被混淆了。如果没有,请使用资源文件中的程序集名称;如果有,请使用应用程序的名称。这样的事情可能吗?

4 个答案:

答案 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;        
}