引用混淆的 DLL
Referencing an Obfuscated DLL
我使用 DotfuscatorCLI 和 Visual Studio 2015 Update 3 Post 构建事件命令混淆了一个 .Net DLL。它似乎已成功混淆,因为该命令后没有出现错误。
这是命令:
dotfuscatorcli.exe /q
/p=SourceDirectory="$(TargetDir)\",SourceFile=$(TargetFileName)
"$(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 构建事件命令方法。简而言之,我需要做的就是按下构建解决方案按钮,然后就完成了。
希望这对其他人有所帮助。如果有任何歧义或疑虑,或者您有任何其他建议,请告诉我。
我使用 DotfuscatorCLI 和 Visual Studio 2015 Update 3 Post 构建事件命令混淆了一个 .Net DLL。它似乎已成功混淆,因为该命令后没有出现错误。
这是命令:
dotfuscatorcli.exe /q /p=SourceDirectory="$(TargetDir)\",SourceFile=$(TargetFileName) "$(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 构建事件命令方法。简而言之,我需要做的就是按下构建解决方案按钮,然后就完成了。
希望这对其他人有所帮助。如果有任何歧义或疑虑,或者您有任何其他建议,请告诉我。