SmartAssembly 6 + ClickOne 混淆发布,妈妈再也不用担心程序裸奔了

最近有个客户端项目用到ClickOne发布,用它主要也是因为它能检测并自动安装framework,而且也能自动更新。

后来由于项目需要,领导要求对程序进行加密处理,我们也当然照办了,于是找来了SmartAssembly,找到发布后的程序集是这样子的

使用ClickOne发布后程序集都是.deploy后缀的,那么只要把要加密的程序集改回dll,然后放到SmartAssembly里面进行混淆处理后再改回去,是不是就可以了呢?

答案是NO

因为这样做了之后自动更新就会异常,具体原因不明,不过根据个人推测好像是ClickOne对程序集做了Hash校验,混淆后的程序集文件改变了文件的hash值导致ClickOne校验失败而无法更新,也就是说你要在程序发布前就要先混淆。。。

SmartAssembly专注混淆20年,好用还有破解版,关键是还支持MsBuild(注意:此处运用夸张手法,请大家不必在意)

于是根据SmartAssembly的官方文档,链接如下

http://documentation.red-gate.com/display/SA6/Using+SmartAssembly+with+ClickOnce+and+MSI

根据官方文档,我们创建一个SmartAssembly.targets文件,内容如下:

 1 <Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
 2   <UsingTask TaskName="SmartAssembly.MSBuild.Tasks.Build" AssemblyName="SmartAssembly.MSBuild.Tasks, Version=6.0.0.0, Culture=neutral, PublicKeyToken=7f465a1c156d4d57" />
 3   <Target Name="BeforeBuild" Condition=" ‘$(Configuration)‘ == ‘Release‘ ">
 4     <CreateProperty Value="true">
 5       <Output TaskParameter="Value" PropertyName="RunSmartAssembly" />
 6     </CreateProperty>
 7   </Target>
 8   <Target Name="AfterCompile" Condition=" ‘$(RunSmartAssembly)‘ != ‘‘ ">
 9     <Copy SourceFiles=".\obj\Release\$(TargetFileName)" DestinationFiles=".\obj\Release\$(TargetName).temp$(TargetExt)" />
10     <SmartAssembly.MSBuild.Tasks.Build ProjectFile="$(SolutionDir)\Build\$(TargetName).saproj" OverwriteAssembly="True" />
11   </Target>
12 </Project>

然后创建混淆项目,我这里要对三个程序集进行混淆,所以我建了三个项目,最终所有文件如下:

最后以XML方式打开各项目的csproj文件,在最下面加入如下代码:

<Import Project="$(SolutionDir)\Build\SmartAssembly.targets" />

可能有人会问,为什么同样都加这么一段话就可以对各个项目进行混淆,其实仔细看SmartAssembly.targets这个文件,里面有这么一段:

<SmartAssembly.MSBuild.Tasks.Build ProjectFile="$(SolutionDir)\Build\$(TargetName).saproj" OverwriteAssembly="True" />

这里读取混淆项目(.saproj)文件时,是根据当前程序集项目名称去找的,也就是 $(SolutionDir)\Build\$(TargetName)

所以这样每个程序集项目生成的时候就会分别读取各自的混淆项目文件,然后对各自的程序集进行加密了^_^!

这是撸主第一篇自创博文,可能写的不是很清晰,希望大家多多指正!

相关下载:

SmartAssembly+Keygen.rar

时间: 2024-10-13 16:19:46

SmartAssembly 6 + ClickOne 混淆发布,妈妈再也不用担心程序裸奔了的相关文章

Xcode7的发布后的crash跟踪,轻松定位崩溃代码 Address Sanitizer: 妈妈再也不用担心 EXC_BAD_ACCESS

Xcode7中苹果为我们增加了两个重要的debug相关功能.了解之后觉得非常实用,介绍给大家. 1.Address Sanitizer: 妈妈再也不用担心 EXC_BAD_ACCESS? EXC_BAD_ACCESS一直是很多开发者的噩梦,因为这个错误很不直观,出现后往往要花很长时间才能定位到错误.苹果这次带来了革命性的提升. 在项目的Scheme中Diagnostics下,选中enable address sanitizer(注意选中后Xcode会重新编译整个项目). 这样设置后,如果再出现类

妈妈再也不用担心我找不到文件了---find

1.find vs locate 在实际中,我们经常需要查找到一些特定文件,然后进行处理,LINUX提供了locate , find这两个命令用于文件查找. a.locate,非实时查找,非精确查找.linux会定期生成更新文件数据库,而locate将根据文件数据库进行查找.我们可以在使用locate命令前,更新文件数据库,使用updatedb即可.但是updatedb将会花费可能半天时间,SO LONG! b.find , 实时查找,精确查找.根据指定路径,查找标准,进行文件遍历(包括隐藏文件

Swift详解之四-------妈妈再也不用担心我的闭包了

妈妈再也不用担心我的闭包了 注:本文为作者自己总结,过于基础的就不再赘述 ,都是亲自测试的结果.如有错误或者遗漏的地方,欢迎指正,一起学习. swift中闭包是一个很强大的东西,闭包是自包含的函数代码块,可以在代码中被传递和使用.跟C 和 Objective-C 中的代码块(blocks)很相似 .这个大家必须掌握!必须掌握!必须掌握!重要的事情要说三遍 闭包可以捕获和存储其所在上下文中任意常量和变量的引用. 这就是所谓的闭合并包裹着这些常量和变量,俗称闭包.下面我们就来攻克它! 1.闭包函数

利用CH341A编程器刷新BIOS,恢复BIOS,妈妈再也不用担心BIOS刷坏了

前几天,修电脑主析就捣鼓刷BIOS,结果刷完黑屏开不了机,立刻意识到完了,BIOS刷错了.就从网上查资料,各种方法试了个遍,什么用处都没有.终于功夫不负有心人,找到了编码器,知道了怎么用.下面看看具体用法: 先买了一个便宜点的编码器: <ignore_js_op> 把刷错的BIOS芯片先拆下来:<ignore_js_op> 把芯片放到编码器上: 再找一台电脑,我的笔记本派上用场了,下载编码器的驱动程序和编码器软件:  <ignore_js_op> <ignore_

妈妈再也不用担心我js跨域了。。

$.getJSON('http://www.example.com/?aa=bb&callback=?', function(r){ console.log(r) }); //callback=?参数带上,妈妈再也不用担心我跨域了.jquery的getJSON利用的也是JSONP的原理去实现的.

Matlab命令合集 妈妈再也不用担心我不会用matlab了

matlab命令 一.常用对象操作:除了一般windows窗口的常用功能键外.1.!dir 可以查看当前工作目录的文件. !dir& 可以在dos状态下查看.2.who 可以查看当前工作空间变量名, whos 可以查看变量名细节.3.功能键:功能键 快捷键 说明方向上键 Ctrl+P 返回前一行输入方向下键 Ctrl+N 返回下一行输入方向左键 Ctrl+B 光标向后移一个字符方向右键 Ctrl+F 光标向前移一个字符Ctrl+方向右键 Ctrl+R 光标向右移一个字符Ctrl+方向左键 Ctr

收藏 | 15 个你非了解不可的 Linux 特殊字符,妈妈再也不用担心我看不懂这些符号了!

原文:收藏 | 15 个你非了解不可的 Linux 特殊字符,妈妈再也不用担心我看不懂这些符号了! 不知道大家接触 Linux 系统有多久了,可曾了解过 Linux 中有哪些特殊的字符呢?其实啊,那些特殊字符都大有用处呢,今天的文章就给大家简单地科普一下 Linux 中你需要了解的 15 个特殊字符,想学或刚学 Linux 的小伙伴赶紧上车了为! ~ 主目录 这个波浪号 ~ 指的是主目录,也就是我们用户的个人目录,无论你身在何方,输入 cd ~ 它将带你回家! cd ~ 更高端的玩法就是在它后面

妈妈再也不用担心我使用git了

Dec 29, 2014 git git由于其灵活,速度快,离线工作等特点而倍受青睐,下面一步步来总结下git的基本命令和常用操作. 安装msysgit 下载地址:msysgit,安装完成后配置系统环境变量,打开git bash,尽量少用图形化工具git gui,推荐使用命令行. 你可以在本地操作git,也可以在远程服务器仓库操作git,例如github,这样你就需要配置下ssh key,详情请查看官方文档说明generating-ssh-keys git操作 1.检出仓库(克隆仓库) 本地克隆

[尝鲜]妈妈再也不用担心 dotnet core 程序发布了: .NET Core Global Tools

什么是 .NET Core Global Tools? Global Tools是.NET Core 2.1 中一个初次出现的特性.Global Tools提供了一种方法,让开发人员编写的.NET Core应用可以打包成NuGet包交付.如果.NET Core运行在目标平台上,那么一个恰当打包的Global Tool就可以在那上面运行.JavaScript开发人员可能会发现一件有趣的事,就是这个工具直接借鉴了NPM Global Tools. 安装程序(工具)命令如下: dotnet insta