目前常见软件保护技术概述

  软件保护技术从广义的角度来说,可以包括计算机软件和系统的安全。目前大多数关于计算机的安全研究,主要是研究如何防止合法用户和其数据被恶意客户端程序所攻击,以及如何设计和管理计算机系统来实现一个严密的安全系统。典型的方法是用户限制客户端程序的行为。例如在JAVA安全模型中,用户可以使用字节码校验来保证不被信任的客户端程序的类型安全,不被信任的代码(例如APPLET)将被禁止执行一些特定操作,例如可以限制在本地文件系统写文件操作。类似的技术还有软件故障隔离(Software Fault Isolation),它可以监视客户端程序,确保其不能够在它赋予范围之外进行写操作,在.NET中也采用了此种技术。
 
        近期,关于移动代理(Mobile Agent)系统的安全研究吸引了更多人的注意,移动代理属于分布式计算的一个实施方法,即把原本在一台计算机上运行的一个大的程序,分解成多个子程序,然后在不同的计算机上进行运行,这样就带来了一个问题,即合法的客户端程序如果安装在恶意主机上,如何防止恶意主机的侵犯。客户端代码有可能包含一些商业机密或者版权信息,如果客户端程序的完整性被侵犯,也将会导致客户端程序拥有者的财产损失。
 
         微软还推出了安全计算平台(Trusted Computing Platform Alliance),它的目标是定义硬件支持的、以操作系统为基础的,受信任的子系统,它们将变为个人计算平台的有机组成部分,依赖于公钥体系和架构,系统需要支持安全存储,系统内部信任路径、安全协处理器。
 
         软件保护技术从狭义的角度来说,即如何防止合法软件被盗版,主要包括基于硬件的保护方式和基于软件的保护方式。关于软件保护技术的研究,实际上是一项综合的技术,目前一些软件保护产品供应商宣称自己的产品是不可破解的,往往是一种营销的策略,并没有提供确切的数据和评测报告。还有一些供应商利用智能卡芯片本身具有很高的安全性,来误导软件开发商以为采用智能卡芯片的软件保护产品也一定具有同样的安全性,其实这些都是一些错误,片面的观点。软件保护产品和其他安全产品相比具有一定的特殊性,它所涉及的内容非常的广泛,从上层的应用软件、操作系统、驱动、硬件、网络等等,是一个综合的技术范畴,不能够单一的由某个方面来以偏概全的断定其安全与否。
 
1 基于硬件的保护方式
         基于硬件的软件保护策略可以包含多种功能,主要有认证过程、数据加密、访问控制、唯一的系列号、密钥产生、可靠的数据传输和硬件识别。这些手段主要的目的是防止硬件被复制,有一些产品也支持许可证策略。基于硬件的保护可以具有很好的安全性。主要包括以下几种典型方式:
 
       1.1 加密狗、加密锁(Special-purpose Dongles)
加密狗是一种智能性加密产品,又被称为加密锁。它是一个可以安装在并口、串口或USB接口上的硬件电路。在安全性上和基于软件的保护方式相比,具有更高的安全性,但是对于使用被保护软件的最终用户而言,就不得不被迫接收在自己的机器上安装相应的保护硬件和驱动程序,易用性上存在一定问题。同时和基于软件的保护方式相比,价格也比较高。
      
       1.2 光盘、软盘保护
被保护软件的部分密钥可以放在可移动的软盘或光盘当中,只有当软盘或光盘存在的时候,被保护软件才可以运行,游戏软件经常采用此种方式。
其基本原理是,例如Macrovision SafeDisk工具,它是在光盘的光轨上隐藏一个密钥,而一般的光盘刻录机无法复制此密钥,通过此方法达到不可以复制光盘的目的,软盘使用的技术类似。
存在问题:如果一旦原盘被划坏或者毁坏,用户就无法继续使用软件,同时这种保护方式可以被黑客很容易的分析或跟踪找到判断代码处,通过修改可执行文件,跳过此段代码,达到破解的目的。而且有的加密光盘可用工作在原始模式(RAW MODE)的光盘拷贝程序来原样拷贝,比如用Padus公司的DiscJuggler和Elaborate Bytes公司的CloneCD等拷贝工具,所以此种保护技术的安全性并不是很高,但是由于其具有价格优势,目前还是有一些软件开发商使用此种技术来保护自己的软件。


2 基于软件的保护方式
        基于软件的保护技术和基于硬件的保护技术相比,在价格上具有明显的优势,但是在安全性上和硬件相比还是相差很大,一般正式的商业软件都使用基于硬件的保护方式。基于软件的软件保护方式一般分为:注册码、许可证文件、许可证服务器、应用服务器模式、软件老化等。


       2.1 注册码 (License Key)
软件开发商对一个唯一串(可能是软件最终用户的相关信息,例如:主机号、网卡号、硬盘序列号、计算机名称等),使用对称或非对称算法以及签名算法等方法产生注册码。然后需要用户进行输入(可以在软件安装过程或单独的注册过程)。当输入注册码后,被保护软件运行时进行解密,并和存储在软件中的原始串进行比较。存在问题:密钥隐藏在程序代码中,比较容易泄漏,同时黑客可以使用逆向工程,分析或跟踪找到判断代码处,通过暴力破解的方法进行破解。


       2.2 许可证文件(License File)
和使用注册码类似,但是许可证文件可以包含更多的信息,通常是针对用户的一些信息。文件中可以包含试用期时间,以及允许软件使用特定功能的一些信息。被保护软件在运行时,将每次检查许可证文件是否存在。典型的方法是使用非对称算法的私钥对许可证文件进行签名,而公钥嵌在软件代码中。存在问题:可以通过修改系统时钟来延长使用试用期许可证,当许可证到期时,还可以重新安装操作系统,继续使用。同时黑客可以使用逆向工程,分析或跟踪找到判断代码处,通过暴力破解的方法进行破解。


       2.3 许可证服务器(License Server)
主要适用于网络环境中,可以为多套被保护软件提供服务,例如一个网络许可证,可以限制并发最大用户数为10。当客户端被保护程序运行时,将占用一个用户数,退出时将释放出用户数,如果超过最大用户数,服务器将禁止多余的被保护程序运行。存在问题:一般必须面向企业级用户,黑客可以使用逆向工程,分析或跟踪找到判断代码处,通过暴力破解的方法进行破解。


       2.4 应用服务器模式(Application Server Model)
所有程序代码存储在受信任的服务器端,最终用户不需要安装代码。典型应用为最终用户不需要安装软件,只需要使用浏览器访问服务器来使用被保护软件。一般游戏软件都是采用这种方式进行保护的。目前这种保护方式朝着两个方向进行发展,一个是瘦客户端程序,另一个是胖客户端程序。存在问题:此种程序受到服务器性能和网络带宽,以及扩展性,成本等因素的影响。
      
       2.5 软件老化(Software Aging)
这是一种极端的软件保护方式[21],依赖于软件的定期升级更新,每次更新都将使老版本的软件功能不能继续使用,例如不兼容的文件格式。盗版者必须给他的用户经常升级。存在问题:经常升级造成很大的不便,如果可以自动化的进行此项工作,可以节省一部分精力。如果最终用户需要共享数据,将依赖于每个人都有最新版本的软件。这种保护方式并不适用于所有领域,例如:Microsoft Word可能工作的很好,但是如果是单用户的游戏程序将不适合。

 

你可能感兴趣的:(非技术区)