如何在Visual Studio中利用命令行集成Dotfuscator混淆处理

本文主要内容为使用命令行方式操作Dotfuscator,并将其集成到Visual Studio中,以便于直接生成发布。
另:本文使用的Dotfuscator版本为:集成在Visual Studio 2015 社区版中的Dotfuscator CE版本。

创建友好的Dotfuscator项目文件

Dotfuscator项目文件本质是一个xml,下文主要描述使用Dotfuscator可视化工具创建项目文件。

  1. 首先在Visual Studio中打开Dotfuscator:点击菜单栏中的工具 > PreEmptive Protection - Dotfuscator打开Dotfuscator。

  2. 此处默认新建了Dotfuscator项目,建议先进行保存,将文件保存至你要混淆项目的解决方案文件夹中,如,个人保存的位置为:E:\Projects\OpenSourceProject\ReferenceDoc\Dotfuscator\Samples\DotfuscatorSample\DotfuscatorSample.xml

保存到解决方案文件夹并非必须,此处如此处理可以为了后面进一步处理更加方便。

  1. 添加待混淆文件,如图所示:

添加待混淆文件

  1. 修改文件路径,将文件路径修改为如下图所示:点击属性,查看项目属性 - configdir(就是之前的保存位置),然后切换回输入,点击输入中第三个按钮编辑输入(那支笔),将路径中与configdir匹配的部分替换为**${configdir}**(注意是大括号)。

处理此步骤亦不是必须的,这样处理的原因是为了让我们的配置与本地无关(相对路径),方便其他人合作使用。

查看configdir

修改路径

  1. 至此,基本配置就可以了,点击生成项目就可以进行混淆了。至于其他更多配置见官方文档。

本地可以直接在Dotfuscator工具中点击菜单栏中的帮助 > 帮助目录(此为中文文档,基础的配置基本都有)。
帮助文件本地目录参考(中文帮助):C:\Program Files (x86)\Microsoft Visual Studio 14.0\PreEmptive Solutions\Dotfuscator and Analytics Community Edition\zh-Hans

配置Visual Studio命令调用Dotfuscator

  1. 主要操作就是编辑生成后事件:右击项目属性,切换到生成事件页面,编辑后期生成事件命令行,添加如下代码:

此处为了保证只有在Release的模式下使用混淆,故添加了Release判断。

    if $(ConfigurationName)==Release "C:\Program Files (x86)\Microsoft Visual Studio 14.0\PreEmptive Solutions\Dotfuscator and Analytics Community Edition\dotfuscatorcli.exe" /q "$(SolutionDir)DotfuscatorSample.xml"

代码解释:dotfuscator命令行工具+参数+项目混淆配置文件;其中配置文件之前保存到解决方案文件夹下,故此出可以直接用解决方案文件目录来索引。

代码中唯一不足就是命令行工具使用了绝对路径,vs中的宏参数没有可以直接使用的,若读者有啥好方法将此变为相对路径,望通知。 —— 但关于系统中添加环境变量的法子就不要了,个人不喜。

  1. 如果你在此处下一步需要进一步的打包处理,而你又需要Debug模式下一样可以打包测试。如,本人使用WiX打包,需要配置文件路径,方便一点就是要配置为生成路径,但是release模式下,需要将混淆的打包进去,而非直接生成的文件。此时,你不能改打包配置(改路径的话,debug会用不了),所以,你需要在将混淆过的文件拷贝到原来的release生成目录。所以我最后完整的生成事件就是如下代码了:

注意:经测试,如果在Dotfuscator中将生成路径设为文件来源路径,可以生成还会自动覆盖,但软件会用不了,具体原因不明。

    if $(ConfigurationName)==Release "C:\Program Files (x86)\Microsoft Visual Studio 14.0\PreEmptive Solutions\Dotfuscator and Analytics Community Edition\dotfuscatorcli.exe" /q "$(SolutionDir)DotfuscatorSample.xml"
    if $(ConfigurationName)==Release xcopy /e /y "$(SolutionDir)Dotfuscated\*.*" "$(TargetDir)" 

代码中的copy目录可以见Dotfuscator配置的生成目录:

查看Dotfuscator生成目录


奇葩史