论文部分内容阅读
随着软件业的不断发展,尤其是网络应用的快速发展,软件安全问题已经成为计算机安全领域中最值得关注的一个问题。计算机安全领域不断涌现新的突破和新的发展,这些新的技术给软件安全带来了新的威胁,从而迫使软件保护机制不断的改进。Java语言以其良好的平台无关性在学术研究和商业开发中都得到了广泛的应用。但是由于Java字节码包含了大部分的源码结构等信息,所以很容易对它们进行逆向工程,同时源代码也更易于被提取。如何保护应用程序不受恶意主机的破坏是传统安全技术无法处理的。在恶意主机环境下,主机可以对软件系统进行逆向工程或者肆意的篡改,其安全性、完整性与可用性都受到了很大的威胁。因此,需要一种有效的方法来保护软件和软件知识产权。代码混淆作为一种防止逆向工程的技术应运而生。在实际应用中,对软件提供绝对的安全保护是不可能,也是没有必要的。只要能使攻击者的攻击付出较高的代价,则可以认为混淆技术达到了安全保护的作用。本文以保护软件、提高逆向工程代价为目标,分别从软件保护与软件破解两方面对逆向工程与代码混淆技术进行了深入的研究。主要研究工作如下:首先,对应用安全问题和软件保护进行了分析。针对目前软件安全领域中存在的三种软件威胁模型,着重分析了恶意主机的威胁,并对几种常见的软件保护技术做了详细的介绍,例如:软件水印、软件防篡改技术、加壳保护、软件加密、代码混淆技术等。其次,对Java虚拟机的结构和运行机制做了详细的介绍,对Java class文件的格式进行了深入的分析。同时对代码混淆技术做了相应的研究,包括代码混淆技术的概念、定义。目前,代码混淆技术主要分为布局混淆、控制流混淆、数据混淆、预防混淆等几种。最后,研究了逆向工程的相关概念、分类以及应用和发展方向。在对逆向工程了解的基础上,针对程序中的关键数据的保护问题,本文设计了一个混淆系统模型,其基本思想是通过同态加密和数据混淆以实现动态数据隐藏,并且从理论和实际两方面分析了混淆转换的有效性、正确性以及性能过载。