1引言
随着信息技术的广泛应用以及互联网的日益普及,国际互联网已经融入到人类社会的方方面面,从商业、金融的日常事务处理到政府部门的行政管理;从企业的数据处理,到军事部门的指挥控制;从小巧便携的手持终端设备到日常的信息家电设备,无不散发着计算机技术的气息。
在享受计算机技术带来便利的同时,软件系统引发的安全问题成为人们日益关注的问题。作为一种知识密集型的产品,软件凝聚了软件开发人员的智慧和心血,在开发过程中需要投入巨大的人力资源,一款优秀的软件的开发所付出的成本往往是其硬件价值的数倍乃至百倍,同时由于作为一种典型的数字产品,软件的复制成本极低且复制过程中不会降低软件本身的质量,而借助信息技术的高速发展,尤其是Internet网络的发展和个人计算机的普及,使得软件的传播更具有便利性,这些条件都使得软件的安全性问题日益突出,严重损害了软件开发部门的经济利益和软件版权,在给软件开发商和消费者造成经济损失的同时,也制约着我国软件行业自身技术的发展。
1.1课题研究的背景及意义
当前软件的安全主要面临着软件盗版与代码篡改、窃取两大类问题。软件盗版主要是指任何未经软件著作权人许可,擅自复制、分发软件拷贝或以其他方式超出许可范围传播、销售和使用软件的行为。软件代码窃取及篡改则是指在未经软件著作权人许可情况下,把软件代码的部分或者全部归为己有,由于软件代码中包含具有重要商业价值的算法或者机密,一旦被窃取或者篡改后果将会非常严重。
据美国商业软件联盟发布的《2010年全球PC套装软件盗版研究》报告估算,2010年全球盗版软件的商业价值达创纪录的590亿美元,几乎是2003年同期的两倍,而我国个人电脑安装的软件中78%为盗版,盗版软件的商业价值为77.79亿美元。而根据《世界知识产权报告》估计,我国综合盗版率每增加10个百分点,软件销售额将减少39.7亿元人民币,相应的经济活动总量也将下降67.76亿元人民币之多,会造成近13170个人丧失就业机会。由此看见,盗版软件已经对我国新兴的软件产业构成了极大的危害,严重的阻碍了我国软件市场的发展。软件安全和软件保护也已成为科学研究的重要课题,引起学术界和产业界的极大关注。
作为软件开发者,为了维护自身的商业利益和著作版权,需要不断地采用各种新的、有效的技术来保护自身的软件版权,增加其软件的保护强度。由于越来越多的软件服务于网络,通过各种网络软件人们可以进行各种信息资源的交互,但是由此引发的网络安全问题也日益突出,使得研究人员对网络安全投入了大量的精力,而忽略了软件自身的安全性问题。
尽管采用某些防火墙、入侵检测系统等网络安全措施可以阻止某些特定类型的网络攻击,但是网络安全问题仅仅是软件安全引发的表象问题,而真正的内因则是软件自身固有的缺陷。如由于编写者的失误、编程语言的缺陷或者编译器的错误等因素都可能造成软件产生漏洞,而攻击程序正是利用软件自身的这些漏洞进行网络攻击。因此只有在软件开发过程中提高对软件自身安全性问题的重视,将软件保护方式作为软件开发计划的一部分来考虑,在保护强度、软件成本以及易用性之间进行权衡并采用相关的软件加密保护措施才能在根本上增强软件抗攻击的能力,从而提高软件质量。
当前的软件保护技术主要以加密技术为核心,大多采用RSA, MDS, DES等标准算法。但是随着以静态分析和动态分析技术为核心的逆向工程的发展以及软件调试、分析工具的不断更新,以静态逻辑分析和动态调试为主的软件分析技术成为了主要的破解软件的技术手段。常用的软件保护措施如序列号保护、时间限制、KeyFile保护、警告窗口、软件加壳等技术在面对这些代码分析和调试工具时,己经显示出其不足之处。随着反一静态分析技术、反一动态分析技术、代码混淆等技术的出现,也给软件加密保护技术提出了新的研究课题。
所以研究软件加密保护中的关键技术,对于保护软件的版权、维护软件开发企业的利益以及推进软件产业良性、健康的发展都具有重要的意义。
1.2研究的主要内容
本课题研究的主要内容是对当前主流的软件加密保护关键技术进行分析研究,并针对其中一些具有安全缺陷的技术提出新的改进方案。软件保护与软件攻击是相辅相成的关系,所以研究软件保护技术的首要任务是对当前主流软件攻击技术进行学习研究,知己知彼才能更有针对性的提出新的软件保护技术方案,从而提高软件安全质量。课题研究主要涉及以下工作内容:
1)研究主流的软件分析技术,重点对静态分析技术和动态分析技术进行研究。研究内容主要涉及其相关分析技术的工作原理、操作工具、破解实例等内容。
2)研究分析当前主流的软件保护技术,主要包括注册保护技术、加壳保护技术、反静态反汇编技术和反动态调试技术。研究内容涉及相关技术的工作原理、应用实例以及优缺点的分析总结。
3.3 反逆向分析............ 39-43
3.3.1 反静态反汇............ 39-42
3.3.1.1 静态反汇............ 39-40
3.3.1.2 代码混淆............ 40-42
3.3.2 反动态调试............ 42-43
3.4 本章小结............ 43-44
4 新型加密保护关键技术............ 44-67
4.1 注册码保护关键............ 44-56
4.1.1 注册码保护技术............ 44-46
4.1.1.1 注册码生成............ 44-45
4.1.1.2 注册码验证............ 45-46
4.1.2 软件加密密码体制............ 46-49
4.1.2.1 对称密钥密码............ 46-47
4.1.2.2 非对称密钥密码............ 47-48
4.1.2.3 RSA加解密算法............ 48-49
4.1.3 基于RSA算法的安全注册码............ 49-56
4.1.3.1 系统总体设计............ 49-50
4.1.3.2 系统架构与模块化............ 50-52
4.1.3.3 系统详细设计............ 52-53
4.1.3.4 系统平台实现............ 53-56
4.2 一种新型反逆向分析关键技术............ 56-66
4.2.1 缓冲区溢出漏洞............ 56-61
4.2.1.1 缓冲区溢出漏洞............ 56-57
4.2.1.2 缓冲区溢出攻击............ 57-59
4.2.1.3 缓冲区溢出漏洞............ 59-61
4.2.2 基于缓冲区溢出漏洞攻击............ 61-66
4.2.2.1 基于攻击技术的反逆向............ 62-64
4.2.2.2 反逆向分析保护方案的............ 64-65
4.2.2.3 反逆向分析保护方案............ 65-66
4.3 本章小结............ 66-67
5 结论与展望............ 67-68
结论与展望
本文探究的课题是软件加密维护重要技术探究和完成,随着软件逆向分析技术的日趋成熟、分析工具功能的日益强大,给软件安全带了了巨大的威胁,也对传统的软件加密保护技术提出了新的挑战。为了更好的保护软件,抵御破解,软件开发者一方面需要针对当前主流的逆向分析技术进行研究并提出相应的防御策略;另一方面软件开发者也需要主动出击,探索新的软件加密保护技术。
本文的主要工作可以从两个方面阐述,一方面是对当前主流的软件分析技术和软件保护技术的工作原理进行分析研究,并通过开发“软件加密保护技术研究平台”实现相关功能演示;另一方面对当前软件加密保护的关键技术中存在的缺陷进行分析研究,提出并实现了几种改进后的安全保护方案。