Dotfuscator 5 CE - 通过签名重命名排除

时间:2012-01-23 13:02:17

标签: obfuscation dotfuscator

我正在使用配置文件从命令行运行dotfuscator 5。这或多或少都可行,除了刚刚出现的一个新要求。

我有一个有少量(少于半打)的类,需要从重命名中排除的void方法(对于按名称调用反射方法的环形系统;不要问......)

他们的签名是(改名以保护无辜的人)void Method(System.Xml.XmlNode xnode, ref System.String str)

我的问题是双重的:

  • 如何在dotfuscator配置语法中表达ref参数?
  • 为什么不使用Map文件中引用的方法的签名工作?

重命名这些方法时,映射文件包含元素<signature>void(System.Xml.XmlNode, string&amp;)</signature>。因此,我希望能够在配置文件中指定:

<type name="ParentClass" excludetype="false">
<method signature="void(System.Xml.XmlNode, string&amp;)"/>
</type>

这不起作用。命令行实用程序的输出声称配置文件无效。

如果我包含语法name=".*" regex="true"所有,则会排除该类型中的方法。我不希望这样。我理解为什么这是 - 规则是ORed在一起 - 但实用程序强迫我使用我不想要的选项拒绝指定我的实际要求的配置文件。

是什么给出了?

我觉得 - 因为我开始对此感到恼火 - 我应该指出我发现Dotfuscator文档不是很好。

1 个答案:

答案 0 :(得分:1)

配置文件无效,因为方法节点没有“名称”。

如果您只是尝试排除某个特定方法,您可以使用UI实际点击重命名中的该方法旁边的复选框 - &gt;排除左侧的树视图,它将为您生成正确的XML。如果您决定采用此路线,请先删除现有的<type>节点。

如果您希望它与ParentClass中的任何方法匹配该签名(即使只有一个),则xml应为(替换为<Namespace>的正确值):

 <type name="<Namespace>.ParentClass" excludetype="false">
    <method name=".*" regex="true" signature="void(System.Xml.XmlNode, string&amp;)"/>
 </type>

创建规则后,您可以使用UI导航到重命名 - &gt; “排除”选项卡,右键单击右侧“自定义规则”树视图中的方法节点,然后单击“预览”。它应该突出你正在寻找的方法。以下是点击预览时在界面中的外观截图:http://files.preemptive.com/Support/CustomRuleRefParam.png