混淆装配和反思

时间:2011-09-15 14:59:57

标签: c# obfuscation dotfuscator

我想通过 Dotfuscator 对我的程序集文件(* .dll,* .exe)进行模糊处理。我的问题是,如果我这样做,我仍然可以使用原始名称(我的意思是混淆之前的名称)并使用System.Reflection方法来处理这些程序集中的类和类型吗?

如果您需要更多详细信息,请告诉我

4 个答案:

答案 0 :(得分:8)

混淆是反射会给你带来一些问题。即使你采取建议使用选项不混淆公共方法,一些反映的代码可能会调用私有方法。问题是混淆会改变一些代码的名称,这些代码可能需要保持不变。

如果您知道或可以找到易于使用反射的区域,您可以使用

[global::System.Reflection.Obfuscation(Exclude=true, Feature="renaming")]

这将告诉混淆器保留名称。

使用反射运行模糊处理需要进行更多测试,但仍然可以......

答案 1 :(得分:2)

在此处阅读http://msdn.microsoft.com/en-us/library/ms227298(v=vs.80).aspx有一种“库模式”可以禁用公共成员的模糊处理。其他你可能无法访问这些方法。在类型级别有一个控制混淆的属性:http://msdn.microsoft.com/en-us/library/ms227281(v=vs.80).aspx

答案 2 :(得分:1)

您可以在混淆程序集上使用System.Reflection,但由于某些混淆点是将程序集中的所有内容重命名为随机且无意义的内容,因此您无法对相同的名称和标识符进行反映。你会在一个非混淆的集合中。如果要对模糊处理的程序集进行反射,则需要以不依赖于命名的类型和成员的方式执行此操作。

答案 3 :(得分:0)

您可以创建自己的私有地图,以获取旧名称的新名称。 Mapper必须将一个排序表写入disk / db,结构如下: 模块(可执行),索引,OriginalType,ObfuscatedType

创建" Mapper"基于参数在两种模式下运行的控制台应用程序: 应用程序将接收作为参数可执行路径

  1. 加载程序集
  2. 来自loadedAssembly的GetTypes
  3. PreObfuscation删除所有条目并重新写入索引和OriginalType值。 PostObfuscation按索引更新ObfuscatedType。 后期构建事件必须如下:
    1. Mapper.exe" target.exe" "预"
    2. [模糊处理]
    3. Mapper.exe" target.exe" "邮政"
  4. 现在你需要一个来自OriginalName的getObfuscatedName函数,你就完成了。

    请注意,此解决方案不适用于修剪,因为类型的数量将更改且索引将不再匹配

    OriginalAssembly.GetTypes()
    

    ObfuscatedAssembly.GetTypes()