使用Dotfuscator混淆处理融入DotNet ClickOnce发布(超经典,测试已通过,转发的,吐血推荐,不看也收藏了)简称:混淆发布

热情的菜鸟 2010-01-17 12:55:37
原文地址: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了,不好意思,我太澎湃了。
...全文
1441 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
小case 2012-03-07
  • 打赏
  • 举报
回复
有谁做成功过?
"用下面的xml代码段替换掉这部分注释,"替换后没什么反应,还是正常发布了。单独Dotfuscator混淆都没问题。
连风 2011-04-27
  • 打赏
  • 举报
回复
太感谢了,收藏!
忧郁马赛克 2011-04-18
  • 打赏
  • 举报
回复
LZ```这篇文章不错```对我非常有用``在此留言感谢
wint_li 2010-07-07
  • 打赏
  • 举报
回复
感谢作者们的无私奉献!
热情的菜鸟 2010-01-17
  • 打赏
  • 举报
回复
再一次的对原作者表示感谢。
wuyq11 2010-01-17
  • 打赏
  • 举报
回复
不错
starj1 2010-01-17
  • 打赏
  • 举报
回复
都是高手,向你们学习了
热情的菜鸟 2010-01-17
  • 打赏
  • 举报
回复
都不需要阿?没人顶,这么管用的东西。
热情的菜鸟 2010-01-17
  • 打赏
  • 举报
回复
OK,哥们自己搞定了

多项目需要注意2点
1,用 Dotfuscator 建立混淆项目文件的时候,选择所有需要混淆的程序集,还是保存为 obfuscator.xml,位置也不变
2,添加 N(程序集个数总和-1)个拷贝文件的代码,假设我还有一个名为 HRD.dll 的net程序集
<Target Name="AfterCompile" Condition=" '$(Obfuscate)' != '' ">
<Exec Command="$(XenocodeLocation) $(XenocodeProjectLocation)" />
<Copy SourceFiles="$(ProjectDir)temp\$(TargetFileName)" DestinationFiles="$(IntermediateOutputPath)$(TargetFileName)" />
//注视语句,下面是单独拷贝 HRD.dll 程序集的代码
//目的,将混淆完成的 HRD.dll 拷贝到 HRD 项目的 bin\Release目录下 等待发布调用
<Copy SourceFiles="$(ProjectDir)temp\HRD.dll" DestinationFiles="$(SolutionDir)HRD\bin\Release\HRD.dll" />
</Target>


就这样了,睡觉了。各位好运。
热情的菜鸟 2010-01-17
  • 打赏
  • 举报
回复
UP
热情的菜鸟 2010-01-17
  • 打赏
  • 举报
回复
有点遗憾,多个项目的时候失败了。

期待CSDN的高手完善。

110,536

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧