引用混淆的 DLL

Referencing an Obfuscated DLL

我使用 DotfuscatorCLI 和 Visual Studio 2015 Update 3 Post 构建事件命令混淆了一个 .Net DLL。它似乎已成功混淆,因为该命令后没有出现错误。

这是命令:

dotfuscatorcli.exe /q /p=SourceDirectory="$(TargetDir)\",SourceFile=$(TargetFileNa‌​me) "$(ProjectDir)Dotfuscator.xml"

这里是 Obfuscator.xml

<?xml version="1.0" encoding="utf-8" standalone="no"?>
<!DOCTYPE dotfuscator SYSTEM "http://www.preemptive.com/dotfuscator/dtd/dotfuscator_v1.1.dtd">
<dotfuscator version="1.1">
   <propertylist>
      <property name="SourceDirectory" value="This Path Will Be Replaced By Visual Studio" />
      <property name="SourceFile" value="This Filename Will Be Replaced By Visual Studio" />
   </propertylist>
   <trigger>
      <filelist>
         <file dir="${SourceDirectory}\" name="${SourceFile}" />
      </filelist>
   </trigger>
   <output>
      <file dir="${SourceDirectory}\Dotfuscator\" />
   </output>
</dotfuscator>

现在,当我在另一个项目中引用该 DLL 并尝试访问其 public 成员时;我无法再访问它们。就好像它们在那个 DLL 中不是 defined/public,而且它们在智能感知中也不可用。

如果我在对象浏览器中查看该 DLL,它会显示 类 以及一些奇怪的名称,例如h, I, m, n 等

为了使用那个 DLL,我是否遗漏了什么?

如有任何回应、提示或解决方案,我们将不胜感激。

听起来您可能 禁用了该程序集 Library Mode。试试 re-enabling 它,它会告诉 Dotfuscator 自动从重命名中排除 public 类型和成员。

在@Nathan 的帮助下,我解决了我遇到的问题。这是更新后的 Obfuscator.xml 文件的内容。

<?xml version="1.0" encoding="utf-8" standalone="no"?>
    <!DOCTYPE dotfuscator SYSTEM "http://www.preemptive.com/dotfuscator/dtd/dotfuscator_v2.3.dtd">
    <dotfuscator version="2.3">
       <propertylist>
          <property name="SourceDirectory" value="This Path Will Be Replaced By Visual Studio" />
          <property name="SourceFile" value="This Filename Will Be Replaced By Visual Studio" />
       </propertylist>
        <input>
        <asmlist>
          <inputassembly>
           <option>library</option>
             <file dir="${SourceDirectory}\" name="${SourceFile}" />
          </inputassembly>
       </asmlist>
      </input>
       <output>
          <file dir="${SourceDirectory}\Dotfuscator\" />
       </output>
    </dotfuscator>

我知道如果我使用 dotfuscator UI,它会自动启用库模式,但我故意选择 CLI 方法。我想自动化并为我在一个项目中引用的 35 多个 DLL 提供通用解决方案。 所以现在使用这种方法,我希望这不仅可以自动化我的混淆过程,还可以加快速度,因为它是一种 post 构建事件命令方法。简而言之,我需要做的就是按下构建解决方案按钮,然后就完成了。

希望这对其他人有所帮助。如果有任何歧义或疑虑,或者您有任何其他建议,请告诉我。