产品版权保护方案

上传人:宝路 文档编号:2871382 上传时间:2017-07-28 格式:DOC 页数:13 大小:628KB
返回 下载 相关 举报
产品版权保护方案_第1页
第1页 / 共13页
产品版权保护方案_第2页
第2页 / 共13页
产品版权保护方案_第3页
第3页 / 共13页
产品版权保护方案_第4页
第4页 / 共13页
产品版权保护方案_第5页
第5页 / 共13页
点击查看更多>>
资源描述

《产品版权保护方案》由会员分享,可在线阅读,更多相关《产品版权保护方案(13页珍藏版)》请在金锄头文库上搜索。

1、武汉.NET 俱乐部 , 培训讲议.NET 产品版权保护方案 (.NET 源码加密保护)一. 前言大家好,我是康世杰,大家可以叫我 Jason。我和大家一样,都是搞技术出身,也未当过讲师,所以口材有限,如果讲得不好之处,还希望大家多多海含,谢谢。今天是我们第一次见面,能认识你们,真的很高兴。下面我们不要耽误大家的宝贵时间,让我们马上开始上课吧。DotNet 是 ms 开发并推广的企业解决方案,也是 Ms 以后几年的核心发展战略之一,所以我觉得 DotNet 是有前途的,他有一个优秀的概念,还有一个强大的财团,想失败都很难啊。DotNet 缺乏的是大型企业高层管理人员对它的信心,这还需要时间和事

2、例去证明,世界上待开发的大案件还很多,Java 和 DotNet 最终谁的市场比例多,现在还说不清楚。二. 简介 DOTNET 编译原理相信大家都使用过 Dotnet ,可能还有不少高手。不过我还要讲讲 Dotnet 的基础知识,Dotnet 的编译原理。Dotnet 是一种建立在虚拟机上执行的语言,它直接生成 MSIL 的中间语言,再由DotNet 编译器 JIT 解释映象为本机代码并交付 CPU 执行。它和 Java 是一种机制的语言。这种语言的优点就是您不需要去考虑您的程序在那里运行,您只需要把功能做出来,虚拟机会在任何地方实现您的功能。这是一个很好的趋势和想法,但虚拟机的中间语言由于带

3、了大量的“元数据”信息,所以也极容易被反编译。MSIL 的代码事实上和 C# 或 VB 没有多大的区别,只要您记住 20 来个指令,您应该可以很容易的读懂它。保护代码和开源并不冲突,需要保护的一定有自己的理由,所以今天我也不是来反对开源的。 。呵呵三. 中间语言的缺点中间语言如此容易被反编译,有许多可怕之处。1. 我们最关心的知识产权辛苦研究出来的算法,多少个不眠夜研究出来的成果。这本来是你赚钱的法宝,可是被公开了,知识产权没有了,那个时候恨谁啊。2. 源代码泄漏,被竞争对手拿去和你竞争(这种事很多)就我知道的都有几起,不过不方便说出来。他们从客户那里想办法 copy 回一份别的公司的产品,然

4、后反编译后,改改图片,图片以及版权信息和注册信息,就拿出去卖了。正规的公司一套卖二万,它们一套才 8 千。功能基本上一样,你说你是客户,你买谁的?3. 自己产品的注册机满天飞做个共享软件吧,赚点钱改善一下生活吧,产品刚上市,还没几天注册机每个网站都有。影响了销售还影响心情,以后不做产品了,还是做服务靠得住,至少盗版不了啊, 呵呵,不过做服务,还没那么多资金,真是做什么都难啊。4. 被别人植入恶意程序,后果得由作者或开发商承担以上说的都只是被别人占便宜的事情,还好,只是让能占占便宜,算了,亏也亏不了多少。可是,我再讲一个,那可就不是被人占便宜那么简单了。比方说:贵公司出了套产品,放在网上给人下载

5、试用,定好版本为 1.0,某个恶意的公司不怀好意,把产品下载下来,用万恶的 Ildasm 反编译一下,然后在里面加入一段按条件触发的命令,命令的内容是 format c: or format d:. 然后再用万恶的 ilasm 编译一下,用贵公司的名义打个一模一样的包,升级为 1.2 试用版,然后放到 ftp 或 shareware site 上供人试用下载。试想一下,不久您就会接到用户的投诉,甚至是起诉。再比方说:要离开公司的员工,对公司的种种形为不满,在离职交接以后,把公司 Release 好的项目的某个 dll 改一改,必定造成这个项目的重大损失。当然,我可不是在教各位用这种方法对待自己

6、不满的公司。我只是告诉各位,Dotnet 的程序集,不保护是不行的。四. 保护方案分类下面,我开始介绍一下.NET 的各种保护方案。我把 Dotnet 的保护分为三大类1. 由 m$ 提供的非第三方保护方案a) 强名称强名称是 MS 提供的保护机制。它需要使用 sn 这个命令。强名称是什么意思呢?在这里稍作解释。强名称的作用就是防止程序集被非法修改,当对程序集修改后,必须重新用您的私钥再对程序集加一次强名称,这也是如果含有强名称的程序集在混淆或加密后必须要重新加强名称的原因。Sn / ? 可以看到它的使用方法,如果你安装的 Framework 是中文的,那么参数的解释也是中文的,我就不多讲了。

7、那么强名称有用吗?网上轻松破解强名称的方法很多,Ildasm 反编译加过强名称的程序集后,在 IL 文件中将强名称的相关信息去掉,再利用 Ilasm 编译,就可以解除强名称的限制了。这个我已经过测试过,您的强名称的 PublcKey不管是加在程序集中,还是加在 Class 中,都可以被去掉,所以强名称不是一个完善的保护方式。不过在这里要说一下,如果有一个好的方案能和强名称一起使用,那么将建立一个非常好的机制,防修改,防滥用。说到滥用,这是强名称的一个特殊用途,它可以使您的 dll 不被第三方调用,如果您的 dll 能保护自己的话。关于强命称讲到这里,他的使用方式有必要的情况下,我们以后再深入的

8、讲解。b) 编译 MSIL 为本机代码 (误区?)关于这一点,我经常能在 MS 上的社区看到有 MVP 这样面对问题:问:C#写的程序能编译成本机代码吗?答:可以,使用 Ngen.exe 即可以 MSIL 代码编译为 本机代码。MVP 这样回答错了吗?其实,严格的说,MVP 的回答是没错的,Ngen.exe的确是可以将 MSIL 编译为本机代码,并可以使 JIT 不需要进行再次编译MSIL。这样能加快程序的执行效率。但用户这样的问题其实,并不是对执行效率不满意,而是对中间语言不满意,可惜 Ngen 并不能解决用户的问题。让我们来浅浅的分析一下 Ngen 的工作吧。Ngen 是 MS 提供的 本

9、机映象生成器,它可以将中间语言程序集编译为本机代码存放在缓存中。这里请大家注意,是存放在缓存中,Dotnet 在内存中建立了一个缓存,这个缓存中存放了许多常用的程序集编译后的本机代码,它们是常驻的,由此来加快 Dotnet 的执行速度。所谓一个本机代码,因为本机映射时,会映射出一些 Framework 里需要的Method,编译为汇编就是 Call 0x0200000 这样的样子,而这些东西必须是事件编译好的。那么理论上说 Ngen 必须要在当前执行的机器上运行,而直接编译成本机代码的程序 copy 到另一个地方不一定可以用,而且我一直没有找到能将缓存中的本机代码 copy 出来的方法。讲到这

10、里,不知道大家明白我的意思没有,不管如何 Ngen.exe 只是一个提速的工具,因为要执行编译为本机代码必须还是要原程序集,而原程序集中存在 MSIL,所以让程序无法脱离被反编译的目地。大家回家,如果有空,可以做做试验。Ngen /show 就可以看到缓存中所有的已编译好的程序集,所以 Dotnet 并不慢。Ngen 可以把指定程序集映象为本机代码。Ngen /? 可以看到其它参数以上是 ms 提供的工具,下在讲讲,自己在编程的过程中,如何使用技巧来防止破解或反编译。2. 编程技巧保护方案在这里,我会给大家介绍两种三种方式1. 人为混淆在这里,我就要先简单的讲讲什么叫做混淆混淆顾名思意,就是混

11、乱,不明确的意思。MetaData 中都有一个 Rid,程序集运行时就已经和名称没什么关系了,都使用 Rid 来调用的,所以可以将名称省去。什么叫人为混淆呢,就是人为的制造混淆。曾经看过一个程序集,手工的将一个 Method 折成几十个或上百个,从而达到让你看不懂的目的。不过可惜的说一句:现在的 Dotnet 程序集的分析工具都很强大,正引用,反调用都可以用程序来实现,所以即实这么做,了没多大用处。著名的 Reflector 就有这些功能。2. 隐藏程序集刚刚谈到了 Reflector,它就是使用这种方式来隐藏自己的核心程序集的。相信我,Reflector 并不是您看到的那一个可执行程序,它的

12、可执行程序只是一个壳而以,里面是一个定义和接口,没有实例的方法。如果你想得到他是怎样反编译的核心,恐怕你会在它这个迷宫中迷失方向。它是怎样做的呢?让我来告诉你,它的核心程序集事实上就是它的一个资源。而这个资源是一个加密的资源。如果我没记错,他应该是在双击第一个需要反编译的 Method 的时候开始释放这个资源,并对资源解密然后动态的加载。这样做的优点核心程序集是不会在硬盘上留下任何痕迹的,它只解在内存中解密并被加载,你基本上无法得到这个程序集。而且 Dotnet 是不允许内存 Dump 的。大家是不是觉得这种保护方法不错呢?你可以把你的核心代码加密后做成资源包在程序里,在使用的时候再解密出来,

13、这只需要你自己去实现就可以了。不过我还得说句负责任的话,如果你有精力,并且很有耐心和技术,相信你还是可以在几天时间内找出它的核心程序集解密算法的位置。并成功的解出它的资源程序集。如果是高手又非常有经验,这种方式的加密手段应该是秒杀。3. 将程序集中的相关 Method(方法)编译成 Unmanaged(非托管代码)下面介绍的内容是不管你是菜鸟,或是高手,都无法得到核心代码的方它可称之为终极的保护手段,因为它就是“非托管代码” 。什么是托管代码,什么是非托管代码。简单的说,托管代码就是需要 Jit 去解释的中间语言代码,而非托管代码就是本机代码。下面要介绍的方式就是教您如何在自己的程序集中即拥有

14、托管代码,又拥有非托管代码。注意,非托管代码是无法被现在的反编译工具反编译的。特别注意一点,我没有自己试过,但我看人做过,并得到了证实。在 Dotnet 程序集中,允许托管代码和非托管代码共存,怎样实现呢?这并不是无偿的,这是需要条件的。它的条件就是必须使用 VC+.NET 非托管方式来写 dll,再用 VC+托管方式建立工程引入这个本机代码的 dll。最终生成一个Dotnet 程序集的 dll。那么这个程序集里面即有托管代码,又有非托管代码。托管代码是可以反编译的,而非托管代码不可能被反编译。有人可能要问了,这和自己用 VC+写个 dll 有什么区别?区别就是这样的结合更紧密一些,而且也不能

15、用常规的分析 Asm 的工具去分析这个 dll。这里还要解释一个误解,有人说,利用 Win32 的本机代码写注册算法,并生成 dll 供给 Dotnet 程序集调用,防止破解。其实这句话只说对了一半,这只能增加破解注册机的难度,并防止不了破解。为什么呢?因为注册对不对还是要在Dotnet 程序集中进行判断,所以,只要改掉这个判断,一样达到了破解效果。但是如果要分析注册算法,那可就是困难了一些了。3. 第三方保护工具下面,我们讲一讲第三方的保护工具和概念第三方保护工具较好的厂商有:1. Aiasted.SOFT a) 产品 :MaxtoCode ,种类 :加密、混淆2. PerEmptive S

16、olutionsa) 产品 :Dotfuscator Community ,种类 :混淆3. Remotesofta) 产品 :Remotesoft Protect ,种类 :加密b) 产品 :Remotesoft Dotfuscator ,种类 :混淆4. XenoCodea) 产品 :XenoCode ,种类:混淆5. 其它的一些公司,最近上海有一款公司出了国内第一款混淆工具,如果大家要选择混淆产品的话,支持一下国产也不错。第三方工具的保护方式分类1. 混淆 ?这是目前最流行的方式吧。今天我们就来做个剖析。让大家去衡量一下混淆的强度如何。混淆软件一般都有三个功能1. 字符串加密2. 名称混淆3. 流程混淆目前流行的混淆软件有XenoCode、Dotfuscator、Remotesoft,MaxtoCode 里也集成了少许混淆功能。利用幻灯片讲解流程混淆原理利用程序当场演示如何反流程混淆1.目标程序2.被混淆的程序使用 Reflector 查看3.使用 Ildasm 反编译出 IL 文件ildasm XenoCodeTest.

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 中学教育 > 其它中学文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号