Dotnet 产品版权保护方案
Dotnet 产品版权保护方案,Dotnet 源代码保护加密技术,讲师:康世杰(Jason.NET),Copyright (C) Aiasted.SOFT. All rights reserved.,议程,1.简介DOTNET 编译原理2.中间语言的缺点3.保护方案分类,一、简介DOTNET 编译原理,C#、VB.NET、MORE,MSIL,Machine Code,编译时由程序连接,运行时由JIT映象,二、中间语言的缺点,我们最关心的知识产权源代码泄漏,被竞争对手拿去和你竞争 自己产品的注册机满天飞 被别人植入恶意程序,后果得由作者或开发商承担,三、保护方案分类,我把Dotnet的保护分为三大类:,1.由Microsoft提供的非第三方保护方案,2.编程技巧保护方案,3.第三方保护工具,3.1 Microsoft 提供的非第三方保护方案,强名称使用命令:Sn.exe编译为本机代码使用命令:Negn.exe,【3.1.1强名称】,强名称是 Microsoft 提供的保护机制。它需要使用 Sn.exe 这个命令。强名称的作用就是防止程序集被非法修改,当对程序集修改后,必须重新用您的私钥再对程序集签名,这也是如果含有强名称的程序集在混淆或加密后必须要重新签名的原因。强名称并不能保护您的程序,将程序集编译为本机代码,使用 Microsoft 提供的命令 Ngen.exe 即可以将MSIL编译为本机代码运行运行速度加快,跳过JIT的解释映象但它不能称为一个保护方案,它是一个误区?,【3.1.2编译为本机代码 】,3.2.编程技巧保护方案,人为手工混淆隐藏程序集将程序集中的相关Method(方法)编译成Unmanaged(非托管代码),【3.2.1 人为手工混淆 】,优点:混淆顾名思意,就是混乱,不明确的意思。MetaData中都有一个RID,程序集运行时就已经和名称没什么关系了,都使用RID来调用的,所以可以将名称省去。什么叫人为混淆呢,就是人为的制造混淆。手工的折分类,折分方法,打乱一个整体的序顺,增加无用的代码,增加无用的跳转等等缺点:耐心的分析就是解决方案。建议使用反编译工具:Reflector 它具有反向逆推及对象连接的功能。,优点使程序集不可见,但又可被调用著名的 Reflector 就是使用的这种方案不会在物理磁盘上留下痕迹,【3.2.2 隐藏程序集】,主程序集,主程序集资源,被隐藏的程序集,运行中的主程序集,解码,缺点:耐心分析,因为加密的过程源代码不能被保护您可以通过分析入口代码得到核心程序集对于某些具备条件的人,无须费时即可破解,【3.2.2 隐藏程序集】,【3.2.3将Method编译成Unmanaged】,优点:绝对无法利用Dotnet反编工具进行反编译运行效率高不可被非法修改也不可以用Win32的反汇编工具进行反汇编缺点:只有使用 C+/CLI 结束 VC+.NET Managed 才能实现实现难度高,失去Dotnet优势,3.3 第三方保护工具,第三方保护工具较好的厂商有:Aiasted.SOFT 产品 :MaxtoCode,种类 :加密、混淆PerEmptive Solutions产品 :Dotfuscator Community,种类 :混淆Remotesoft产品 :Remotesoft Protect ,种类 :加密产品 :Remotesoft Dotfuscator ,种类 :混淆XenoCode产品 :XenoCode ,种类:混淆,3.3 第三方保护工具,混淆工具Dotfuscator CommunityRemotesoft DotfuscatorXenoCode 2005打包工具Thinstall加密工具MaxtoCodeRemotesoft Protect,【 3.3.1 混淆】,功能:字符串加密将程序集中所存在的字符串进行加密,防止字符串信息泄漏名称混淆将程序集中的某些 Class Name 或 Method Name 更改成一个无意义的字符串 流程混淆给程序中增加某些形式的跳转以破坏原有可读的流程但不改变执行流程,字符串加密是一个有效的功能,可以有效的防止程序中的字符串信息泄漏,可惜的是,解密的代码明文的呈现在攻击者面前。名称混淆也是一个不错的功能,但它不能阻止信息泄漏,因为他只是个碍眼法。流程混淆曾被当成救世主,它好象可以保护一切信息,但实际上它也只是一个鸡助下面我们详细分析一下流程混淆的行为。,【 3.3.1 混淆】,源程序集,流程混淆的示意图(我们为了方便了解,使用的是C#语言,实际上,流程混淆是基于MSIL上进行的),【 3.3.1 混淆原理】,I = 1;J = 2;return I;,目标程序集,goto G1;G2: J = 2;goto G3;G1: I = 1;goto G2;G3: return I;,示意图,Code 1,Code 2,Code 3,Code 2,Code 1,Code 3,执行入口,演示程序 XenoCodeTest.exe使用 XenoCode 进行流程混淆使用 Deflow 进行反流程混淆,【 3.3.1 流程反混淆演示】,我们把他的跳转去掉,并把程序块还原置原来的位置,那么您就得到了源来的程序,可以进行反编译的程序.如果您也想开发反混淆工具,很简单,您必须具备字符串操作知识混淆原理,【 3.3.1 流程反混淆原理】,优点:当前流行的保护概念、兼容性好混淆的产品依然是 MSIL 中间语言、可以跨平台运行如没有工具的支持,想完全改出源代码、几乎是不可能的事情缺点:无法保证程序集的安全、依然会被破坏、修改、取得核心代码达不到理想的保护效果,【 3.3.1 混淆优缺点】,Thinstall 打包工具优点:可以将主程序和 DLL 程序打包成一个程序,并执行可以打包 Dotnet 程序集,并正确执行打包后的程序集不可被反编译缺点:打包程序运行时解包,会在物理磁盘上释放文件。利用查看进程的工具,找到释放的文件,保护即可被解除。,【 3.3.2 打包保护】,较创新的 Dotnet 保护概念,现存的产品有:MaxtoCode 、 Remotesoft ProtectMaxtoCode 及 Protect 保护效果比较程序集中无法看到源代码 (同样)MaxtoCode 加密后的程序无法使用 Reflector 查看Remotesoft Protect 加密后可以使用 Reflector 查看都带着一个 Native 的 DLL 作为解密库加密后的软件必须运行在 Windows 平台上,【 3.3.3 加密保护】,作为目前保护强度最高的产品,它们的原理是什么呢?,【 3.3.3 加密保护原理】,MSIL,Machine Code,运行时由JIT映象,Runtime Native DLL 解密,优点:全新的保护概念高强度的保护,使您的软件固若金汤完全不可以被反编译完全杜绝了软件被非法修改缺点:只可以运行在 Windows 平台下您必须要为高强度的加密付出一点效率,【 3.3.3 加密保护优缺点】,MaxtoCode 下载地址:www.maxtocode.com 有中文试用版下载,试用版有时间限制Remotesoft Protect 目前不提供任何形式的下载,【 3.3.3 如何得到加密保护软件】,感谢参加武汉 .Net 俱乐部活动,我是康世杰(Jason.NET)再次感谢大家,