日期:2014-05-18  浏览次数:21124 次

使用Dotfuscator混淆处理融入DotNet ClickOnce发布(超经典,测试已通过,转发的,吐血推荐,不看也收藏了)简称:混淆发布
原文地址:http://www.xzcms.cn/blog.aspx/view/63
我自己测试了,全部通过,太H了

使 Dotfuscator混淆处理融入 DotNet发布

大家可能都已经知道如何使用Dotfuscator作混淆处理,但是可能还不清楚如何将混淆过程融入项目的发布过程中,使其能顺利地通过ClickOnce 项目部署时的hash code的验证。早在2006年有位名为Judah的高人曾在msdn中指出如何将 XenoCode 的混淆处理过程融入到DotNet的项目发布过程中 [ 可以在msdn中以关键字查找 ClickOnce deployment and Dotfuscator ],本文是根据这篇帖子照猫画虎而来的。

首先,在项目文件夹(即项目文件 .csproj 或 .vbproj 所在的目录下)下建立一个名为 temp 的目录,该目录用于临时保存混淆结果文件。

然后,启动Dotfuscator,为要混淆的DotNet项目新建一个Dotfuscator工程。
(1)这里需要注意,选择要混淆的目标文件应该是在DotNet项目的 obj\release目录中的文件,而非 bin\release目录下的那个。
(2)将Dotfuscator的输出路径指到刚才建立的temp目录下,使将来作完混淆的文件保存到该位置。
(3)然后保存Dotfuscator工程到DotNet项目(.csproj 或 .vbproj)所在的目录下,命名为obfuscator。然后关闭 Dotfuscator。

接下来用文本编辑器打开DotNet项目文件(扩展名为 .csproj 或 .vbproj)。在项目文件的尾部你会看到以下注释:
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets.
……

-->

意思是:欲练此功,必先自Cut! ^_^ 开个玩笑,意思是若想修改编译进程,你可以添加任务到下面一个目标项中,并将其注释解除。存在其它类似的扩展结点,参见 Microsoft.Common.targets。

用下面的xml代码段替换掉这部分注释,或者直接插入到注释上方,紧挨着注释的位置。

<PropertyGroup>
<XenocodeLocation>"C:\Program Files\PreEmptive Solutions\Dotfuscator Professional Edition 4.2\Dotfuscator.exe"</XenocodeLocation>
<XenocodeProjectLocation>"$(ProjectDir)obfuscator.xml"</XenocodeProjectLocation>
<XenocodeOutputLocation>"$(ProjectDir)temp"</XenocodeOutputLocation>
<PostBuildEvent>
</PostBuildEvent>
</PropertyGroup>
<Target Name="BeforeBuild" Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<CreateProperty Value="true">
<Output TaskParameter="Value" PropertyName="Obfuscate" />
</CreateProperty>
</Target>
<Target Name="AfterCompile" Condition=" '$(Obfuscate)' != '' ">
<Exec Command="$(XenocodeLocation) $(XenocodeProjectLocation)" />
<Copy SourceFiles="$(ProjectDir)temp\$(TargetFileName)" DestinationFiles="$(IntermediateOutputPath)$(TargetFileName)" />
</Target>

(代码段的缩进都没有了,没办法谁叫俺寄人篱下呢。)
其中,
第二行的<XenocodeLocation>标记代表Dotfuscator的启动路径。在应用前,应当改成自己机器上的实际路径。
第三行<XenocodeProjectLocation>标记代表了前面Dotfuscator工程文件所在路径。
第四行<XenocodeOutputLocation>标记代表了混淆后的输出位置。

将上面Dotfuscator的路径改成自己机器上Dotfuscator的安装路径后,其它的应该不用改了。保存项目文件的更改。
这样每当在发布项目时,项目中的敏感文件就被混淆,而且文件也将有正确 Hash Code,所以在“一键部署”(ClickOnce Deployment)时也能通过验证。

注意 xml 文档的格式,在从网页复制到文本编辑器的过程中,可能会出现问题。应检查文档中尖括号还是不是半角的尖括号了,内容是否与看到的内容相符。空格还是不是半角的空格等等。
还有,应当保证Dotfuscator项目在创建时(在UI界面下)能够成功完成混淆后才能保证其在命令行情况下也能顺利完成混淆。否则,有可能在dotNet项目的发布过程中出现Dotfuscator返回-1的错误。说明,混淆过程没能成功完成。


太H了,不好意思,我太澎湃了。

------解决方案--------------------
都是高手,向你们学习了
------解决方案--------------------
不错