首页 Net源代码保护技术与工具的研究

Net源代码保护技术与工具的研究

举报
开通vip

Net源代码保护技术与工具的研究Net源代码保护技术与工具的研究 .Net 源代码保护技术与工具的研究 12唐明 ,杨永 刚 ,1.西安培华学院 ,陕西 西安 710125,2.西安交通大学 城市学院 ,陕西 西安 710018, 摘要,介绍了.Net 框架中源代码保护技术的原理和几种主要的工具软件 。 分析了源代码保护与破解技术的原理 ,列举并对比了几种 常见保护工具的性能 ,最终提供了一些.Net 源代码保护的建议 。 关键词,.NET,源代码保护,源代码混淆,编译原理,版权保护 中图分类号,TP311 文献标识码,A 文章编号,1...

Net源代码保护技术与工具的研究
Net源代码保护技术与工具的研究 .Net 源代码保护技术与工具的研究 12唐明 ,杨永 刚 ,1.西安培华学院 ,陕西 西安 710125,2.西安交通大学 城市学院 ,陕西 西安 710018, 摘要,介绍了.Net 框架中源代码保护技术的原理和几种主要的工具软件 。 分析了源代码保护与破解技术的原理 ,列举并对比了几种 常见保护工具的性能 ,最终提供了一些.Net 源代码保护的建议 。 关键词,.NET,源代码保护,源代码混淆,编译原理,版权保护 中图分类号,TP311 文献 标识 采样口标识规范化 下载危险废物标识 下载医疗器械外包装标识图下载科目一标识图大全免费下载产品包装标识下载 码,A 文章编号,1009-3044(2011)10-2330-03 .Net 框架,是微软公司面向互联网时代研发的新一代软件开发与应用平台 ,以其高效率的开发环境 ,正在逐渐取代旧的技术而 占领市场,是未来 Windows系统上 软件开发的 标准 excel标准偏差excel标准偏差函数exl标准差函数国标检验抽样标准表免费下载红头文件格式标准下载 。 因为其用了不同以往的新技术 ,源代码被编译为中间语言 ,IL,而 不 是 机 器 码 , 其中包含了很多源代码的信息与特征 ,可以轻易的被反汇编成高级语言的源代码 。 任何人只要下载一个.NET 反编译器就可以轻而 易举的反编译出接近原始源代码 ,进而研究软件 的 实 现 细 节 ,窃取版权人的创意 ,或者破解程序谋利等等 。 这就非常不利于软件版 权与知识产权的保护 。 为应对.Net 框架中软件的版权保护问 快递公司问题件快递公司问题件货款处理关于圆的周长面积重点题型关于解方程组的题及答案关于南海问题 , , 。 微软公司以及第三方公司都研究并给出了一些解决 方案 气瓶 现场处置方案 .pdf气瓶 现场处置方案 .doc见习基地管理方案.doc关于群访事件的化解方案建筑工地扬尘治理专项方案下载 并形成了一系列的产品通 过对程序进行混淆以及加密等措施 , 。 达到干扰反编译软件或使反编译出来的代码难于理解的目的本文的研究内容就是市场上这类软件的混淆以及加密的过程 。 当然我们的研究目的不是要非法破解他人软件 , 。 , 而是要推动版权保护技术得到更快的发展另外通过我们的研究 ,可以总结出一些软件开发过程中版权保护的规 范和几个主流工具的性能与安全指数 ,给相关的软件开发人员做 参考资料。 1 .Net 的源代码保护技术 1.1 微软提供的解决方案 1) 微软 Visual Studio中提供了一个 官方的反汇编程序 ildasm,可 以 将 可 执 行.Net 程 序 ,EXE,或 动 态 链 接 库 ,DLL,反 编 译 为 IL。 同时,提供给用户一个防止程序被 ildasm反汇编的方案 ,在用户工程的 AssemblyInfo.cs中加入一行代 码 , [assembly:System.Runtime.CompilerServices.SuppressIldasm] 作用是让 ILDasm.exe不要工作 。 加入该行后, 运行 ILDasm.exe进行反编译 。 显示 “受保护的模块 -- 无法进行反汇编 ”。 不过,目前黑客已经破解了 ILDasm.ex,e使其可以反编译做了上述标识的文件 。 所以,该种方案失去了实际的作用 。 2) 强名称 强名称是使用相应的私钥 ,通过程序集文件 ,包含程序集清 单 的 文 件 ,并因而也包含构成该程序集的所有文件的名称和散列 , 。 强名称的作用就是防止程序集被非法修改 。 当对程序集修改后 , 。 生成的必须重新用私钥再对程序集加一次强名称另外强名称还 ,就是它可以防止 dll 被第三方随意调用 。 给程序集加强名称的工具为 Sn.exe,可以通过 Sn / ? 命令看到它的具体使用方 有一个用途 。 法 那么强名称有用吗 , 网上关于破解强名称的文章很 多 ,ildasm反编译程序集 后 ,在 IL 文件中将强名称去 掉 ,再 利 用 ilasm编 译 , 就可以解除强名称的限制了 。 所以说强名称不是一个完善的保护方式 。 1.2 名称混淆技术 名称混淆是最简单的混淆 ,具体操作是将命名 空 间 、类 名 、函 数 名 、变量名等替换成没有具体含义的字符串 ,使原来代码中有含 , 义的名称都失去了原来的含义这对计算机运行这个程序没有任何 影 响 ,但是黑客将程序反编译后 ,得到的都是无法理解的名称 ,加 大 了黑客读懂程序的难度 。 举例来说,比如右图 1 是一个注册类。 如果想破解这个程序 ,反 编 译后一目了然就知道程序要做什么 。 但如果名称被混淆后 ,理解起来就没那么容易了 。 所有的混淆工具都可以 提供类似这样的名称混淆功能 。 某 些 混 工 具 , 如 Babel Obfuscato, 还可以将名称混淆成不可见r的 Unicode 淆 图 1 字 符 ,这样在反编译工具中 ,这 些 混 淆后的名称就都成为了不可见的 收稿日期,2011-02-26 作者简介,唐明,1982-,,男,陕西西安人,西安培华学院计算机系助教 ,西北工业大学计算机学院在职硕士研究生 ,主要研究方向为 智能决策与计算机辅助设计 ,杨永刚,1964-,,男,陕西西安市人 ,西安交通大学城市学院计算机系副教授 ,主 要 研 究 方 向 了,或者显示为乱码 。 进一步增强了程序的难读性 。 另 外 ,还需注意的一点是 ,使用名称混淆时 ,类 库 或 可 执 行程序中对外界提供的 Public方法不要做名称混 淆 ,否则该方法将无 法被外界调用。 实际上这种名称混淆的方式 ,在应用上是有 一 定 不 足 的 。 对 于 大 型 程 序 ,经过混淆的几百万行没有注释 ,变量名随机的代码是 没人能看懂的,对知识产权起到了保护 。 但是 ,虽说全部解读出原程序来比较困难 ,但破解者通过动态调试跟踪程序 ,是可以理解一 ,比如破解注册信息等还是能够办到的 。 些关键内容的 1.3 字符串加密 字符串里经常包含一些输入输出的信息 ,破解者通过分析这些信息很容易可以理解程序的意图 ,所以需要将字符串加密 ,防 止 。 这些信息被解读 字符串加密的实现方法主要分为两种 。 第一种方法是通过修改 IL 代码,把原来的字符串替换为一个加密函数 。 然后在程序的执行过程中 ,即时的还原原来的字符 串 。 大部分混淆工具提供的字符串加密方法都是这一种 。 我们举一个具体的例子 。 在加密前,代码为, MessageBox.Show("HelloWorld! "); 而在加密后,代码变成, MessageBox.Show(Helper.Decode("A34579dfbbeyu346563345/==")); 这里原来的字符串"Hello World! "被字符串解函数 Helper.Decode("A34579dfbbeyu346563345/=="取代。) 从中无法再看出原来字 符串里包含的信息 。 字符串加密通常会和名称混淆一起使用 ,所以真正使用中不会出现象 Helper.Decode这么明显的函数 名 。 但 是 ,这种方法的弊端是很明显的 ,破解者直接利用这个字 符串解函数的代码写一个小工具 ,就可以还原出原来的字符串 ,继 而再将字符串自动还原到源代码中 。 第二种方法是在加密壳中提供字符串加密技术 。 这种方法不修改 IL 代码,而是直接加密元数据中的字符串 。 工具 Remotesof、 tMaxtoCode等采用了这种方 法 。 这类保护也存在着一定弊端 ,当程序运行后元数据中的字符串会解密到在内存中 。 通过跟踪内存 ,可以读取出这些字符串 。 但 ,还是要增加很大破解难度的 。 比起第一种方法 1.4 流程混淆技术 流程混淆目的是使反编译的时候出错 ,让反编译工具失效 。 反编译工具通常使用的是静态分析的方法 ,为了防止静态分析 ,常 见的方式是使用跳转指令 ,跳转的目标位置是另一条指令的中间 ,这样在静态分析时便会出现混乱 。 具体操作起来即是把方法中的 ,并调整每一段在代码中的先后次序 ,然后利用跳转语句按照正确的次序连接出本来的流程 。 原理图如图 2 所示。 代码分成若干段 目前主流的混淆器都提供流程混淆 , 如 Dotfuscator Professional版 ,XenoCod ,e Babel Obfuscator 等。 不 过 ,流 程 混 淆也有它的不足 ,不 能 防 止 ILDasm反 编 译 出 IL,因为根据微软的 设 计 ,ILDasm无 法 理 解 的 IL,.Net Framework 也 是 无 法 理 解 的 。 IL 中 “br.s 行 号 ”和 “br 行 号 ”都是强行跳转的指令 ,而流程混淆主要是用这 2 个语句进行逻辑连接的 。 这就给破解者提供了一个 特 征 。 通过人为的分析 ,总 结 出 规 律 ,然后再编写代码 ,将 语句的顺序调整回来 ,代码最终又会被恢复成可以被静态分析工具反编译 。 1.5 编译成机器码 微软的 Ngen.exe工具 ,可以将 IL 编译为机器码。 那么是否可以用此来对源代码 ,就目前 Ngen.exe工具现状来看 ,答案是否定的。微软开发 Ngen.exe工 具 进行保护呐 图 2 的目的是加速.Net 程序的启动速度 ,而不是保护源代码 。 使 用 Ngen.exe生 成 机 器 码 的过程依赖于目标机器的具体软硬件环境 ,所以必须在目标机器上运行编译 ,此时必须提供原始的.Net 程序。 此 外 ,目前有一些产品号称可以使.Net 程 序 脱 离.Net Framework运 行 ,是 否 就 是 将.Net 程序编译为机器码了呐 , 根 据 笔 者 的 研 ,此类的产品的原理不过 是 将.Net Framework重 新 包 装 ,从而使程序运行的目标机器不用安装.Net Framework而 已 ,这 跟 把.Net 程 究 序编译为机器码是两回事 。 1.6 加壳技术 在传统的 Win32 程序中,经常采用加壳技术来保护软件不被非法修改或反编 译 。 原理是通过一段称为 “壳 ”的保护代码先于程 序运行,拿到控制权,然后在内存中完全解开被加密的程序代码 ,并将控制权移交给被加密的程序代码 。 目前加壳技术已经日臻完 善,破解的难度越来越大了 。 因为.Net 技术不同于传统的 Win32程序 ,最终的程序是 IL 而不是机器码,所以传统的加壳工具无法应用在.Net 程序中。 经过一 ,现在也出现了可以给.Net 加壳的工具,例如 MaxtoCod,e Remotesoft Protector等。 段时间的发展 解释原理前,首先需要了解一下 CLI,通用语言基础结构 ,Common LanguageInfrastructur e,的解释原理, CLI 接到程序集需要解释的请求后 ,动态的从内存中取出一段 IL 代码,然后交由 CLI 解释成机器语言 ,提交给 CPU执行 。 MaxtoCode之类工具的工作原理如 下 , 当 CLI 提取 IL 代码时,MaxtoCode提供的解释环境将内存中加密过 的 IL 代码解密,然后交给 CLI。 提取完毕后,MaxtoCode 再 将 本栏目责任编辑,谢媛媛 内存中的这段代码还原回加密状态 。 ,IL 代码都经过了加密 , 。 采用这种方法后所以基于静态分析的反编译器是无法反编译的 1.7 水印 所谓水印是将版权信息或标识之类的数据隐蔽地嵌入.NET 程 序 中 ,处理后不会影响程序的运行 ,但是可以跟踪软 件 的 流 通 源 。 对于面向少量客户开发的软件 ,如果在交付程序的过程中 ,针对每一个客户 ,提供加有不同标识的程序 ,那么发现盗版后 ,就 可 头以追查出盗版的源头来 , 。 并可以作为证据申请相关的法律维权 支持给.NET 程序加水印的工具 ,例如有 Dotfuscator Professional版,其水印处理算法不会增加应用程序的大 小 ,也不会引入可能 破坏应用程序的额外元数据 。 1.8 加密锁,加密狗, 加密锁是一种基于硬件的软件版权保护工具 ,通 过 一 个 类 似 U 盘 一 样 形 状 的 USB设 备 ,对软件进行保护 。 某些加密狗是通过 对所要保护软件进行处理 ,加入一个验证 函 数 ,来验证加密狗是否在机器上插着 。 更高级的加密狗 ,可以将程序的核心函数保存在 加密狗的硬件中 ,这样没有加密狗时 ,既不能运行程序 ,也使企图对软件进行反编译的人无法得到这些函数 。 目前也出现了支持.Net 的加密狗,例如 SafeNet公司的圣天狗 等 。 当然,对于加密狗,也存在一定的风 险 。 某些黑客专门针对各种加密狗进行破解而不是针对某款软件 ,当某种型号的加密狗被 破解后,意味着使用该型号的所有软件都同时被破解了 。 2 关于选择混淆工具的建议 以上介绍了很多.Net 源代码保护技术 ,那么该采用那种技术或工具呐 , 根据使用的对 象 ,这里给出如下的建议 , 1) ASP.NET的代码 ,如果服务器代码在公司内部 ,此时更需要关注的是 ,完善网络安全工作与保密 制度 关于办公室下班关闭电源制度矿山事故隐患举报和奖励制度制度下载人事管理制度doc盘点制度下载 。 做得好的话,可以不用 采取代码混淆等保护措施 ,因为用户通过浏览器是无法获得服务器代码的 。 如果服务器代码是作为面向客户的产品 ,那么请参考下 。 面的相关建议 2) 面向单一客户的软件项目 ,这种软件的需求往往都是客户自己提出的 ,实现的方案没有什么技术机密可言 ,软件一般也没有 注册的必要。 此时也可以不采用保护的措施 。 如果不想让客户了解软件的具体实现代 码 ,可以采用 Visual Studio自带 的 Dotfuscator 免费版进行名称混淆 ,客户应该就没有能力解读了 。 3) 面向多个大客户的商业软件 ,因为掌握客户具体是谁 ,出了版权问题更多是采用法律途径解决 。 代 码 保 护 方 面 ,主 要 是 对 注 册相关的代码进行保护 ,可以采用 Dotfuscator免费版进行名称混 淆 。 或者将相关代码用 C 或 C++实现。 4) 面向公众的商业软件 ,需要面对各种用户 ,包括破解者 。 所以最好采用最强大的和最新版的保护工具 ,通过前面的技术原理 分析,如果采用软件手段推荐采用 MaxtoCode之类的加壳工 具 ,硬件手段是使用加密狗 。 3 结束语 以上介绍 了.Net 框架下源代码的保护技术与工具 ,但这里还是需要特别指出一点 ,虽然通过技术手段 ,可以在一定程度上保护 软件的知识产权 ,但纵观世界软件发展的历 史 ,几乎所有流行的知名软件 ,经 过 一 段 时 间 ,都 遭 到 了 破 解 ,说明没有十全十美的保护 技术。 然而,西方国家的软件正版使用率 却 非 常 高 ,其原因在于使用盗版软件的法律惩罚力度之大 ,由此可见最有效的版权保护手 段还是相关法制的健全 。 参考文献, [1] Richter J.框架设计 ,CLR Via C#[M].2版 .周靖,张杰良,译.北京:清华大学出版社,2006. [2] 蔡学庸. .NET 中间语言[EB/OL]. [3] MaxtoCode加密工 具[EB/OL].. [4] Dotfuscator混淆工 具[EB/OL]. ,上接第 2309页 , 随着新技术的不断发展 ,为基于 MVC 模式的 Web框架设计提供了更强的技术支 持 ,其功能将日益完善 。 参考文献, [1] Camma E.Design Patterns:Elementsof Reusable Object-Oriented Software[M].AddisonWesley,1994:5 -20. [2] Husted T.StrutsIn Action[M].Manning PublicationCo.,2003. [3] 思志学.自己动手写 Struts,构建基于 MVC的 Web开发框 架[M].北京:电子工业出版社,2007. [4] 秦小波.设计模式之禅[M].北京:机械工业出版社,2010. 本栏目责任编辑,谢媛媛 file:///D|/我的资料/Desktop/新建文本文 档.txt Appliance Error (configuration_error) Your request could not be processed because of a configuration error: "Could not connect to LDAP server." For assistance, contact your network support team. file:///D|/我的资料/Desktop/新建文本文档.txt2012-07-12 20:42:52
本文档为【Net源代码保护技术与工具的研究】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_995397
暂无简介~
格式:doc
大小:129KB
软件:Word
页数:0
分类:生活休闲
上传时间:2017-12-13
浏览量:11