软件License管理与代码保护
数字权限管理 DRM(Digital Rights Management)系统就是利用先进的信息技术,在提供数字化和网络化信息服务的同时,有效地阻止对这些信息的非法使用和拷贝,以达到保护数字知识产品知识产权的目的。以前,数字版权管理主要是利用安全和加密方法来解决非法拷贝的问题,即将信息内容的分布锁定和限制在付费用户的范围内。这是第一代 DRM 系统,它意味着对现实的充分限定和 DRM 系统功能的扩展。第二代 DRM 系统则包括了描述、身份认证、交易、保护、监控和追踪记录对有形和无形资产的各种权利使用形式,其中,需要强调一点是,DRM 是“权利的数字化管理”,而不是“数字化权利的管理”,即 DRM 是管理所有各种权利,而不仅仅是管理对数字化内容的许可权。
国外许多组织目前正在探讨 DRM 系统的标准化问题,Open EBook Froum(OEBF)和 MPEG 组织是电子图书和多媒体领域在数字版权管理方面的先锋,Internet Engineering Task Force(IETF)也在研究较低层次的 DRM 问题,而World Wide Web Consortiun(W3C)就在不久前刚召开了一次DRM工作会议。这些组织的工作对于整个 DRM 领域来说是至关重要的。
DRM 是一种面向 ASP 方案提供商、网上教育服务提供商、数字图书馆和其他有偿服务提供商的全新网络防盗版解决方案。倡导使用 DRM 技术保护知识产权的领头人是 Adobe 公司。他们发现,在使用了类似 Adobe PDF 的标准格式后,人们可以通过一种下载交换的方式从网络电子图书上读取任何它们想要的数字内容,这与利用 Napster 提供的软件交换 MP3 音乐相类似。因此,在接下来的几个月中,Adobe 公司和微软公司联手,与网络内容提供商和最早的 DRM 技术开发者结成了战略伙伴联盟。在相互合作中,他们共同探索出了一条捍卫数字版权之路。现在,在国内,也有不少公司开始涉足 DRM 业务领域,例如北京彩虹天地信息技术有限公司就是这样一家公司,他们的 RG-DRM 解决方案提供基于远程认证、机器指纹、算法加密技术之上的,对在线传播的文本、图像、音乐或媒体文件进行加密和解析的技术解决方案。
DRM 主要涉及多媒体数字商品和应用软件两类形式的数字实体。
多媒体数字商品的DRM方式包括数字水印、安全容器、安全协议等方式。
软件可分为商用软件、共享软件、免费软件和公用软件 4 种,其中公用软件是版权已被放弃的一种软件,其他 3 类软件均受软件版权保护,而商业软件版权的保护强度和要求是最高的。目前,最终用户许可协议EULA(end user license agreement)是商用软件的国际通行许可协议,该协议内容规定:
(1) 软件的一份副本在授权许可下在单一一台硬件实体上安装、使用。
(2) 运行该软件所在的计算机必须获得一份许可证。同一份“软件产品”许可证不得在不同的计算机共同或同时使用等。
(3) 不允许反向工程(reverse engineering)、反向编译(decompilation)、反汇编(disassembly)等。
遗憾的是,EULA 仅仅是一个文字上的约定而已,它并没有提供有效的版权保护机制和控制手段,从而根本不能保证软件不被非法复制与扩散,无法控制用户的任意安装与使用。为了达到版权保护的目的,人们探索了许多方案和技术,按保护手段可分为硬件保护方式和纯软件保护方式两类。其中,基于硬件载体的保护方式主要有基于软盘的加密方式、基于逻辑门集成电路的加密方式(俗称加密狗)以及基于安全光盘的保护方式等。而以软件程序为载体的保护措施主要有软件产品密钥保护方式、序列号保护方式以及许可证方式等。这些保护措施由于其原理和技术手段的不同所表现出来的性能有很大的差异。
基于物理硬件载体的保护措施在一定程度上能保证版权的有效控制,如不允许复制软件内容(如 SafeDisk,Rainbow)或者复制内容但无法使用(如朗讯、微软等对大型软件通过许可协议盘来限制安装。瑞星、江民产品将软件内容与许可协议关联防止内容复制等);软件内容与许可协议关联的软盘方式无法满足软件容量比较大的软件实体;而基于逻辑门电路的方式对于价值不是很高的软件来讲开销相对较大。这些措施虽然能够防止软件内容的非法复制,但却不能保证软件使用权的唯一性。在以软件程序为载体的保护措施中,不论是基于产品密钥、序列号或是许可证方式,其本质上都是一种静态的预先授权手段,而用户一旦获得授权,便可任意复制扩散安装;基于软件运行环境相关的版权控制措施,一些有效的措施能够保证软件使用权的原子性,但却无法实现软件运行环境的迁移这极大地限制了软件使用的方便性。
事实上,目前已有的诸多保护措施仅仅从软件实体本身进行了考虑,这样,软件内容一旦发布,软件开发商便失去了对软件版权的控制,从而根本无法保证版权不受侵犯。
版权意义下软件资源分为受限软件和非受限软件两种,针对这两种软件的潜在威胁因素主要包括:
(1) 非受限软件的非法复制与扩散。
(2) 非受限软件的无限制安装使用。
(3) 受限软件内容的跟踪、调试、分析与破解,并非法复制扩散和无限制使用。
1.2.2 版权保护系统应解决的问题
按照 EULA 许可协议,一种安全、可靠、实用的版权保护系统至少应达到如下几个基本要求:
(1) 使用权的可控性。即对于一套软件必须能够控制其在许可协议申明的数量范围内运行。最简单的情况是,一套软件只能允许在一台硬件环境中运行。而对于作为服务器使用的软件只能允许其支持许可协议声明的客户端数量。即应能保证软件内容的非法复制与扩散无利可图。
(2) 软件使用环境的可迁移性。即必须支持同一软件副本在不同机器之间无差异地迁移,并保持原有软件功能的完备性和内容的完整性。
(3) 软件资源的可控性。软件副本在多台机器之间迁移时,应保证软件资源的完整或部分回收,并至少保证遗留软件资源不足以构成对版权的威胁。
(4) 软件实体的运行安全性。软件实体必须从实现机制上保证其运行安全性以抵御外部的分析和攻击,如进行反跟踪和反汇编以增强程序的自我保护能力。
许可证管理系统应该具备如下的特性:
(1)系统必须容易使用,只需要系统管理员最小的干预;
(2)软件供应商可以容易地把许可证管理系统植入其软件;
(3)必须支持浮动的许可证模式。该模式下的软件许可证属于一个团体而不是单个用户,任何授权的用户在指定的网络中应当能够访问许可证;
(4)需要同时实现对 Linux 系统和 Windows 系统下许可证授权管理的支持; (5)不可以对应用程序的行为做出假设。比如,我们不能假定应用程序总按正常方式终止并释放他占用的许可证;
(6)操作系统内核应该支持许可证管理系统。许可证管理器需要向操作系统查询系统特征信息
许可证(License)是软件销售的一种方式,按照特性、版本、容量和使用时间等方 式对软件的使用进行授权,客户获得软件提供商所承诺的相应权利和License授权证书。
在电信领域,网络设备 (Network Equipment, NE) 基本都是基于许可证 (License)进行管理的,即通过License对网络设备的功能、资源进行限制,如 :可以支持 的最大用户数、是否支持数据业务、是否支持语音呼叫等。现有的网络设备上一般存在一个 License,上述 License 包含有 :整个 License 的 有效期、License的校验信息和License控制项目。 上述License控制项目可以分为两类, 即资源类和功能类。 其中,资源类的 License 控制项目 (License 资源项目 ),表示的是一 种资源数量的概念,如 :最大用户数、最大载频数等,每个项目可以有单独的有效期 ; 功能类的 License 控制项目 (License 功能项目 ),表示的是一种功能开关的概念,如 :是否支持数据业务、是否支持语音呼叫等,每个项目可以有单独的有效期。通信运营商中部署的网元,一般是由相应的软件提供商提供,目前一般的网元部 署过程中License加载流程为:
视频监控、软件使用等服务提供商往往通过向客户发放许可证书来对不同客户提供不同的服务,例如,安全防范视频监控联网系统一方面对没有许可证书的用户不提供视频监控服务,提高服务的安全性,另一方面根据许可证书中许可的条目提供不同的视频监控服务,以满足用户对不同范围的监控及对视频监控系统服务性能的不同需求。在传统的视频监控系统许可证书管理方法中,常使用的是“设备与许可证书绑定” 形式:即系统中每个需要授权许可的设备绑定一个授权许可证书。授权许可证书可为软件 形式或硬件形式,例如软件形式的许可证书文件,或者硬件形式的带USB接口的USB Key。每 个许可证书中包含授权绑定设备的唯一硬件标识,视频监控业务软件在运行时从许可证书 中获取授权信息进行验证,验证通过后才可运行监控业务。
目前主要的许可证授权管理软件有: Sentinel LM、Winlicense、Flexlm 等,其中以 Flexlm 最为著名,很多大型专业软件都采用它进行加密。
一、 Sentinel LM(圣天诺电子许可证管理)是由信息安业领导企业 Safe Net 公司.开发的一款基于许可证管理的系统,是软件保护领域知名品牌 Sentinel 家族的一员。Sentinel LM 作为畅销全球的产品,一直以来站在行业发展的前沿,指引着行业的发展方向。从八十年代后期开始,Sentinel LM 就开始行销欧美。近几年来,Sentinel LM 已成为国内软件开发商及用户比较关注的话题。著名的石油软件中SMT 7.5 和 CMG 2004 采用了该系统。 Sentinel LM 是基于许可证激活方式的许可证管理系统,它将开发商的应用程序绑定在特定的计算机硬件指纹上,只有经过授权的计算机可以运行指定的软件。开发商的软件用 Sentinel LM 与最终用户达成的许可证协议,Sentinel LM 完成授权、记录使用次数和报告使用情况的功能。当用户开始使用一个受保护的应用程序时,应用程序首先用 Sentinel LM 检查、验证许可证协议,如果这个使用是经过授权的,Sentinel LM 将允许应用程序运行,而且这个检查验证的过程对于最终用户完全透明,最终用户感觉不到。反之,如果这个使用没有被授权,应用程序会退出,Sentinel LM 将通知使用者,或让用户等待授权使用。Sentinel LM 不允许应用程序运行的原因可能有许可证过期了、或没有安装许可证等。
二、 Winlicense 是西班牙 oreans 公司推出的许可证管理软件。WinLicense 是一个强劲的保护系统,专为了那些想保护自己的软件不被先进的反向工程和黑客软件破解的软件开发者而开发的。WinLicense 只提供节点锁定的许可证。
三、 Flexlm 是由 Globetrotter 公司开发的软件加密方法 Flexible License Manager。Globetrotter 公司向软件厂商出售相关开发软件,软件厂商把此加密程序集成到自己的软件中。可以锁定机器的硬盘号,网卡号,使用日期,支持加密狗,以保护软件的知识产权。Flexlm 被 80%以上的软件公司所采用,是目前最流行的软件加密方法,保护着世界上价值几百亿美元的软件。Flexlm 以其允许软件许可证在(或浮动于)网络的任何机器上,而不是约束在特定机器上使用而著称。就是说它可以在一台计算机上运行许可证而在其它计算机上运行应用软件,这些软件通过网络取得许可,如果许可证都被占用,新的服务请求就被拒绝,这样就可以限制同时使用本软件的数量。用户可通过网络共享更有效地使用较少的许可证。许可证管理员可控制谁可以使用授权的应用程序以及哪些节点可以获得许可证。
以上介绍的三款许可证管理软件都是国外的许可证管理软件,国内软件发布大都也是购买国外的许可证管理软件,而国内自主研发的许可证管理软件还不完善。但随着人们对软件保护意识的加强,在商业软件的发布之时,提供许可证管理已成为目前的趋势。
许可证文件是使用许可证管理的核心。
典型的许可证文件一般包括 SERVER 行、DAEMON 行和 FEATURE 行三部分。
许可证文件一般以 SERVER 行作为文件的起始行, 在该行中指定所使用的许可证服务器。
格式:SERVER hostname hostid [port-number]
hostname 为许可证服务器的主机名,在 Windows NT、2000 下可从控制面板->系统中查到, 主机名也可由该机的 IP 地址代替。
hostid 为许可证服务器的特征码,一般对应该机的网卡物理地址, 也可是硬盘序列号或加密狗的特征代码。 作为许可证服务器的计算机的主机名、IP 地址、网卡号在 Windows NT、2000中可通过在命令窗口输人 ipconfig/all, 从显示的内容中获得。任一台计算机的hostid 一般是唯一的, 因此一个许可证文件可限定唯一的一台主机作为它的许可证服务器, 除非出现 hostid=ANY 等其它可允许使用任何主机作为许可证服务器的情形。
Port-number 是浮动许可证管理使用协议时使用的端口号。
例如:SERVER CAD-WORKSTATION 00-08-73-49-EA-DF 23000
SERVER 行以后为 DAEMON 行, 在该行中指定应用程序的许可证管理程序的名称和安装路径及参数文件。
格式:DAEMON daemon-name[daemon-path][option-path]
daemon-name 软件供应商许可管理程序名, 不同软件供应商的软件一般对应不同的程序名。
daemon-path 软件供应商许可管理程序的安装路径,如在系统的搜索路径下,也可以省略。
options-path 为运行选项文件的路径,可省略。
例如:DAEMON Geomountain d:\Geomountain
DAEMON 以下是 FEATURE 行,用于对个软件模块进行授权。
格式:FEATURE name vendor version expiration_date n Key “Vendor_String” hosted
name Feature 名称
vendor 厂商标识
version 版本号
expiration_date 过期时间
Vendor_String 厂商定义的字符串
hostid 主机 ID
例如:FEATURE f1 xyzd 1.00 1-jan-2005 0 key1 “” 00-08-73-49-EA-DF 该许可证文件指定了功能“f1”的一个锁定 00-08-73-49-EA-DF 节点的许可证
常用的许可证文件大致可分为节点锁定许可证和浮动许可证两大类。
节点锁定许可证将软件锁定到特定计算机,可以锁定计算机的 MAC 地址、硬盘号等。节点锁定许可证特别适合单个用户在单台计算机上使用工具的情况。节点锁定许可证有其局限性,许可证与特定主机紧密相关。不可更改到其他机器上使用。
以下是节点锁定许可证文件示例:
SERVER xxx 0080c8ee1806 2013
DAEMON Geomountain d:/Geomountain
FEATURE FeatureName1 licsrv 8.12 25-feb-2003 0 “” 00-08-73-49-EA-DF
第一行指出许可证运行的主机及其硬件标志,第二行是服务进程的名字和磁盘位置,第三行是要保护的软件模块的名称、版本、期限、许可证个数和绑定的MAC 地址。
所谓浮动许可证就是在一台计算机(称之为许可证服务器)上运行许可证,而用户通过网络与之通讯并取得许可后可以在网络中任何一台客户机上运行应用软件如果许可证都被占用,新的服务请求就被拒绝,这样就可以限制同时使用本软件的数量。许可证个数、许可证服务器等信息存储在浮动许可证文件中,许可证提供商管理程序管理该文件以允许或者拒绝用户在局域网内其他 CPU 上使用此软件。
以下是浮动许可证文件示例:
SERVER lulu 17001234 1700
DAEMON Geomountain d:\Geomountain
FEATURE f1 xyzd 1.00 1-jan-2005 2 key1 “”
FEATURE f2 xyzd 1.00 1-jan-2005 6 key2 “”
FEATURE f3 xyzd 1.00 1-jan-2005 1 key3 “”
第一行指出许可证运行的主机及其硬件标志,第二行是服务进程的名字和磁盘位置。第三、四、五行指定了功能“f1”有两个许可证、功能“f2”的六个许可证以及功能“f3”的一个许可证,网络上任何可访问许可证服务器“lulu”的地方都可以使用它们。
在网络环境中,应用可在计算机系统之间移动。为制止盗版,许多应用依赖于浮动的软件许可证和许可证服务器。浮动的软件许可证可被部署在许可证服务器上以便防止被滥用。应用可被安装在任何计算机系统上。然而,除非有有效的许可证,否则应用将不会运行。为了确定应用是否可在计算机系统上运行,计算机系统查询许可证服务器来确定是否存在用于该应用的有效许可证。
为了确保仅指定的目标许可证服务器被使用,需要通过唯一 ID(如指纹)来标识目标许可证服务器。在某些环境中,该唯一ID 被制定为底层硬件系统的与众不同且不可变的特征,如网络接口卡(NIC)的媒介访问控制(MAC)地址。在其他实施例中,目标许可证服务器的硬件和软件特征的组合可被用于制定唯一ID。该唯一ID被提供给应用实例,使得目标许可证服务器可被查询。
不幸的是,虚拟系统不是固有地就具有可被用于生成唯一 ID 并从而制止盗版的 特征。在虚拟系统中,诸如 BIOS GUID 和 MAC 地址等之类的硬件特征可被欺骗。被欺骗的硬件特征于是可被用于克隆许可证服务器。此外,当在云环境中操作时,云实例是不绑定底层硬件的瞬态虚拟机。因此,在虚拟化系统中,硬件特征不能被可靠地用于制定唯一ID。 至少部分地由于这些困难,许多应用最终用户许可证协议(EULA)禁止在虚拟系统上执行。
微软公司2016年的发明专利《在虚拟化环境中证实许可证服务器》提供了一种技术,充分利用云计算环境中获得的或构建的一组特征,以便于提供云中部署的许可证服务器的唯一性和不变性的基于软件的解决方案。避免底层硬件系统的特征导致更灵活和可靠的用于部署许可证服务器的平台。云存储服务的特征可被用于创建用于许可证服务器的唯一ID。部署在公共云环境中的许可证服务器的安全性和可靠性也被提高。
苏州科达公司于2016年的发明专利《一种许可证书管理方法、装置及系统》提出了C/S模式的许可证管理方法。通过许可证书客户端向许可证书服务器发送许可证 书申请请求,许可证书申请请求包括请求的许可 证书的条目,许可证书服务器接收许可证书申请 请求,判断是否存在符合许可证书申请请求的可分配的许可证书,若存在,则按照许许可证书申 请请求将许可证书分配给许可证书客户端,许可证书客户端接收许可证书服务器分配的许可证书。实现了许可证书的自动分配,分配效率高,减少了系统运营维护的成本。
该发明的特点:
1、 通过许可证书客户端向许可证书服务器发送 许可证书申请请求,许可证书服务器查找符合许可证书申请请求的可分配的许可证书,并 将其分配给许可证书客户端,实现了许可证书的自动分配,分配效率高,减少了系统运营维 护的成本。
2、 将可分配的许可证书放到许可资源池这一集 合中,便于分配许可证书时进行查找,提高分配的效率。
3、 将许可证书分为固定型许可证书和浮动型许可证书,固定型许可证书只能分配给具有预定硬件标识的许可证书客户端,能够确保特定的许可证书分配给特定的一个或特定的一组许可证书客户端,使可分配的许可证书分配时具有目的性,从而将特定的许可证书客户端与一般许可证书客户端区分开来,为其提供特别的服务。浮动型许可证书,能够分配给具有任意硬件标识的许可证书客户端,并不与具有预定硬件标识的许可证书客户端绑定,可在不同时段被不同的许可证书客户端共享,实现 许可证书的复用,提高许可证书的利用率。运行业务软件(如视频监控业务软件)的不同虚 拟机,尤其是在云计算环境下,即可申请浮动型许可证书。
4、 通过许可证书客户端向许可证书服务器发送寻址请求获取许可证书服务器IP地址从而建立信令链路,使得本申请的许可证书管理系统适用于IP地址不固定的网络系统,扩大了本申请的适用范围。如云计算环境中节点IP动态分配,各计算节点的IP地址常常不能固定,由云操作系统动态分配,本申请的许可 证书管理方法便可适用于云视频监控系统。
5、 通过许可证书服务器与许可证书客户端定时 互发心跳消息的方式,实时监测信令链路是否中断,减少了人工维护许可证书管理系统的 成本。在监测到信令链路中断后许可证书服务器立即收回分配给该许可证书客户端的许可 证书,减少了许可证书资源的浪费;而许可证书客户端延长预定时间段之后使当前正在使 用的许可证书失效,由此许可证书客户端具有预定时间段来做相应处理,如备份数据,或者 由运维人员检测系统异常、恢复信令链路,增强了系统的容错机制,提高了系统的可靠性。
6、 通过许可证书客户端主动向许可证书服务器发送释放许可证书的请求,许可证书服务器判断请求释放的许可证书与其自身所记录的许 可证书客户端已被分配的许可证书是否一致,若一致则收回许可证书放入到许可资源池 中,提高了许可证书管理的灵活性,避免了许可证书资源的浪费。
7、 通过许可证书客户端从外部获取加密的许可 证书文件,对加密的许可证书文件解密,若解密成功则可以获取其中可分配的许可证书,放 入到许可资源池中,提供了在许可证书管理系统中对可分配的许可证书进行统一增加、更 换、升级的方式,无需人工对每一台许可证书客户端设备进行操作,降低了运营维护的成本。
8、 每个许可证书管理系统具有唯一的密钥对, 密钥对包括公钥和私钥,许可证书授权方通过私钥进行加密,许可证书服务器通过公钥进 行解密,提高了许可证书管理系统的安全性。
9、 硬件USB Key具有唯一的硬件标识,不可仿 制,增强了许可证书管理系统的安全性。此外,当所述硬件USB Key与所述许可证书服务器 连接,并且通过权限验证时,方可提供许可证书服务,将硬件USB Key连接许可证书服务器 作为提供许可证书服务的必要条件,进一步增强了许可证书管理系统的安全性。
华为2018年发明专利《一种NFV网络中许可证的管理系统和管理方法》提出了,通过软件提供商的第一许可证管理服务器与NFV网络范围内部署一个第二许 可证管理服务器进行对接,进行了许可证的灵活 和自动的管理,NFVO获取第一许可证管理服务器 下发的许可证信息描述模板,NFVO根据该模板向 第一许可证管理服务器申请许可证,第二许可证 管理服务器从第一许可证管理服务器获取所需 的许可证,将许可证信息发送给NFVO,实现许可 证的灵活的自动管理。
其特征在于,该系统包括第一许可证管理服务器(201),第二许可证管理服务器(202),以及NFV编排器NFVO(203),其中第一 许可证管理服务器为软件提供商的许可证管理服务器,第二许可证管理服务器为部署在 NFV网络范围内、与第一许可证管理服务器对接的许可证管理服务器, 第一许可证管理服务器用于生成许可证信息描述模板License Descriptor,并将该 License Descriptor下发给NFVO,所述License Descriptor中包括License Descriptor ID、虚拟化网络功能的描述符VNFD ID以及许可信息选择项,第一许可证管理服务器还用于 向第二许可证管理服务器下发许可证; NFVO,用于获取第一许可证管理服务器下发的License Descriptor,根据该License Descriptor,向第二许可证管理服务器申请部署NFV网元所需要的许可证;NFVO在收到第一 许可证管理服务器发布的License Descriptor后,保存License Descriptor ID与虚拟化 网络功能的描述符VNFD ID的对应关系; 第二许可证管理服务器,用于接收NFVO的许可证申请请求,根据第一许可证管理服务 器下发的许可证,向NFVO发送许可证信息,NFVO根据所述许可证信息为虚拟化的网络功能 VNF提供软件使用许可; 其中,第二许可证管理服务器可作为第一许可证管理服务器的代理或者基于第一许可 证管理服务器的授权,第二许可证管理服务器在本地生成许可证。
中兴通讯股份有限公司于2016年的发明专利《License控制方法及系统》实现了基于历史性能数据统计的事后License控制,既保护了设备厂商的利益,又可将获取的历史性能数据及设备的实际使用情况作为设备厂商与运营商进行商务谈判的依据,同时也可给运营商提供网络扩容规划的依据。方法为:License Server获取控制对象的性能数据统计结果;License Server根据获取到的性能数据统 计结果以及预置的License文件,对所述控制对 象进行License鉴权;License Manager从 License Server获取鉴权结果,并根据所述鉴权 结果对所述控制对象进行网络功能限制。
License(即软件版权许可证)是为配合商务报价,通过对无线产品的软硬件进行 分类授权,达到持续盈利的许可证管理方法。应用于所有无线产品软件包的使用场景,例如 测试、展会、演示、工程、商用等各类型的需要无线软件产品运行的场景。目前通信网络中的License控制都是事前控制或者实时控制,即在配置数据下发 到通讯设备生效之前对配置流程进行控制,如果超出授权,则配置数据无法生效;或者是在 系统运行过程中实时计算资源的使用量,如果超出授权,则对超出部分禁止功能使用。这两 种控制方式都很严格,对于运营商来说,如果不能提前预知对网络资源的需求,购买的 License量偏少的话,可能影响网络的服务和质量。尤其是对RRC(Radio Resource Control,无线资源控制)连接用户数这种影响UE(User Equipment,用户设备)接入的基本 网络资源,运营商是不愿意受严格的License控制的。而从设备厂商的角度,需要保护其商 务利益,根据其提供的网络资源获取相应的利润也是一个合理的诉求。因此,如何在设备厂商和网络运营商的利益之间做一个好的平衡,使得License控 制既能够给运营商提供可靠的网络扩容依据,又不损害设备厂商的正当利益,是本领域技 术人员亟待解决的技术问题。本发明提供一种License控制方法及系统,旨在解决当前的License控制未能在设 备厂商和网络运营商的利益之间做一个好的平衡,以使License控制既能够给运营商提供 可靠的网络扩容依据,又不损害设备厂商的正当利益的技术问题。
一些商业软件提供免费试用版本,通过时间来控制软件许可,但用户可以通过修改电脑的系统时间来延长提供给用户的免费使用期限。
例如:武汉工程大学王会清等人提出一种把注册表、许可文件、使用天数和使用 次数几个方面结合起来进行软件许可保护的系统算法,用户使用软件开发商的软件时,首先调用软件许可程序。许可程序先检测注册表项和许可文件是否存在,若存在,再检测是否被非法修改,如果一切正常就将运行的天数和使用次数写入注册表和许可文件,再采用一般的加密算法,从而达到对软件版权的保护目的。这样即使通过更改电脑系统时间来蒙蔽许可系统也是不可能的,因为许可系统会实时比较本次运行的时间是否大于上次已经写入注册表和许可文件的使用时间。如果用户非法调整电脑系统时间,许可系统会立即检测到本次使用时间小于上次使用时间, 软件系统立即退出。算法过程如下:
软件的破解技术和保护技术二者之间是矛与盾的关系。当前软件保护技术根据是否需要依赖特定硬件分为硬加密技术和软加密技术,硬件加密技术虽然可靠性高,但需要硬件支持,成本会有所提高,目前常用的硬件加密技术有软盘加密、光盘加密、卡加密、加密狗加密;软加密技术主要使用软件算法来验证使用者是否合法性,如常见的序列号、许可文件,这种软加密技术成本相对较低。
通过序列号注册是共享软件和部分商业软件常用的软件保护技术,软件开发者根据注册用户提交的信息(一般为用户名称)生成序列号返回给用户,软件运行时验证用户信息和序列号关系是否正确以确认该用户是否为合法用户。这种 方法实现简单方便,但如果用户信息与序列号生成算法被破解,非注册用户也可以根据获得的信息-序列号对,未经授权在多台机器上使用该软件。
调试器工作于 CPU 和操作系统之间,运行在 Ring0 或 Ring3 级,能够调试操作系统内核或应用软件。调试器能将已经是机器码的 EXE文件加载入内存,具有下断点、单步运行等功能,软件如果不具备反调试器的保护技术,破解者就可以使用调试器分析软件。反调试技术中主要使用 4 种技术:句柄检测、断点检测、反加载和反监视。
反调试是“在计算机代码中实现一种或多种技术,它阻碍了对目标进程进行逆向工程或调试的尝试”。软件在运行时如果通过反调试技术检测到自身处于被调试状态,就会触发预先设定好的反调试策略,来响应并处理调试行为,若自身未被调试,则软件程序继续正常运行。
根据调试技术的破解方法将反调试技术分为静态反调试和动态反调试。静态反调试是指在程序启动时,系统会根据正常运行和调试运行分配不同的进程环 境,通过检测进程环境来检测进程是否处于调试状态。许多静态反调试技术对 OS 系统有较强的依赖性,这意味着有些静态反调试技术在不同的平台上可能会失效。动态反调试是指在程序运行时,分 正在运行的进程的执行流程和执行状态是否正常来检测进程是否处于调试状态。例如,遇到异常时,调试器会先接收异常事件而不是直接传递给进程本身,所以可以利用异常处理机制来实现反调 试。动态反调试则是基于执行状态来判断调试器行为,使其无法正常跟踪程序的执行流程或加大其逆向分析难度。相比静态反调试,动态反调试隐蔽性较强, 技术难度更高,破解难度也更大。
反调试和代码混淆、软件加壳、 软件防篡改、虚拟化等其他主流软件保护技术相结合能够提供更加可靠的软件保护。
计算机软件的壳是一段专门用来保护软件不被非法篡改 或反编译的代码或程序,加壳是软件保护的常用手段,就是利用特殊的算法,对 EXE、DLL 或 OCX 程序里的资源进行压缩和加密,类似压缩软件 Winzip 的效果,只不过被压缩后的程序,仍然可以独立运行,在内存中完成解压和释放,完全隐蔽。加壳程序的原始代码在磁盘中一般是以加密的形式存在,无法查看源代码。直接运行后在内存中还原,这样就可以比较有效地防止程序被静态反编译,同时也可以防止原始程序被非法修改。
壳一般分为压缩壳和加密壳 2 种。压缩壳仅对原始程序里的资源进行压缩,如 Aspack、UPX 和 PeCompact 等,通常使用压缩壳保护,被保护程序大小都小于原始程序。而加密壳不仅对原始程序里 的资源进行压缩,而且还具备函数输入表加密、反调试、双进程保护和虚拟机等功能,如 ASProtect、 Armadillo 和 Themida 等,通常使用加密壳保护,被 保护程序大小会略小于甚至大于原始程序。
花指令技术源于多态病毒技术,在不修改原代码功能的基础上,通过某种代码变换方式,使原代码的自身结构变化出不同的代码,但原代码与新代码的逻辑功能完全相同。
花指令使用的是多态病毒技术中的代码模糊变 换方法,主要用于对抗静态反汇编。在 80x86 系列计算机中代码的反汇编分析和真正执行过程并不完全相同。代码的真正执行过程是 CPU 每执行完一条 指令后,再去取下一条指令。而反汇编分析是一种 Dump 式自上向下的处理过程。花指令就是利用了 这两者的差异性,成为一种有效欺骗静态分析的重 要手段。当原代码经过模糊变换后,新代码难以进 行逆向工程分析,使反汇编结果出现异常错误,从 而实现软件保护。目前花指令技术采用较多的一种 形式是直接在程序代码中 JMP 指令后添加花指令。该方法具有简单、易实现的优点。
作为一种有效的差错检测手段,循环冗余校验 (cyclic redundancy check,CRC)在数据存储和网络 通信领域被广泛使用。利用 CRC 校验原理,软件在 编译时,在代码内写入自身的合法 CRC 校验值,软件运行过程中,通过 CRC 校验值对自身的完整性 进行检查。如果修改了软件中的任何一个字节,软件通过校验计算可以发现当前 CRC 校验值与原合 法 CRC 校验值不同,由此判断软件已经被修改。
授权码也可以称为注册码、序列号等。授权码 验证的过程,就是验证特定信息和授权码之间的数 学映射关系,如果数学映射关系不正确,由此可以 判断软件未被合法授权使用。这个映射关系是由软 件开发者设定,所以不同软件生成授权码的算法可 能完全不同。这个映射关系越复杂,授权码越不容易被破解。根据映射关系的不同,授权码验证通 常有以下 4 种方法:
1、 以特定信息作为自变量,一般特定信息为用户名或者机器码,通过函数 F 变换后得到授权码,公式表示为: 授权码=F(特定信息)。 将这个授权码和用户输入的授权码进行字符串 比较或者数值比较,以确定用户是否为合法用户。
2、 通过授权码验证特定信息的正确性。软件开发者生成授权码的时候,仍然使用函数 F,公式为 授权码=F(特定信息)。但这个函数 F 是可逆运算,软件在检查授权码 时是利用函数 F 的逆运算: 特定信息=F-1(授权码)。对输入的授权码进行变换。如果变换的结果和特定信息相同,则说明是正确的授权码。使用这种方法用来生成授权码的函数 F 没有直接出现在代码中,而且正确授权码的明文也未出现在内存中,所以这种方法比第 1 种方法要安全。
3、 通过对等函数检查授权码。如果特定信息和授权码满足式F1(特定信息)=F2(授权码),则认为是正确的授权码,采用这种方法授权码明文同样不会在出现在内存中。这种方法其实是第 2 种方法的延伸变形。
4、 使用二元函数,同时以特定信息和序列号为自变量。这种验证方法采用下式的判断规则: 特定值=F(特定信息,授权码)。当对特定信息和授权码进行变换时,如果得出的结果和某个特定值相等,则认为是合法的一 特定信息和授权码。这种方法比前几种方法更为安全,特定信息与授权码之间的关系更为模糊。可以把特定信息和授权码分拆为几部分来构造多元函数公式:特定值=F(特定信息1, 特定信息2⋯⋯ 授权码1, 授权码2⋯⋯)。
常见的加密锁主要有以色列阿拉丁公司的 HASP 系列、彩虹公司的 SuperPro 系列、北京飞天 诚信公司的 ROCKEY 系列和深思公司的深思洛克 系列等。最初的加密锁,即第一代加密锁被称为逻 辑电路加密锁。它完全用硬件实现内部算法,通过并口通信与主机通信的软件交互数据。它比加密卡成本低,容易使用,所以迅速被普及。许多重要的行业软件都有过采用加密锁的经验。第一代逻辑电路锁中的算法虽然软件开发商可以选择,但是毕竟只有很少的几种。
随着技术的发展,第二代加密锁可以让开发商在锁中定义自己的独特信息,比如软件密钥、用户信息,甚至是软件运行中产生的中间变量,所以被称为存储器加密锁。第三代充分吸取了前两代的优点,内置了存储器和硬件逻辑电路,既能记录软件开发者的授权信息,又能为其提供高强度的硬件加密算法,因此被称为逻辑电路加存储器加密锁。 第四代为可编程的加密锁,可编程加密锁最初设计 目的是让软件开发者能够将软件中重要的代码或模 块写入到加密锁中运行,使软件与加密锁实现真正 无缝链接。但受限于成本,公开销售的几款加密锁 都采用了低成本的单片机,给代码写入造成了很大 的困难,主要表现在 3 个方面:缺少复杂度高的算 法变换、程序区和指令编码的空间太小。这些问题 使得软件开发者很难使用第四代加密锁实现高强度 的软件保护方案。于是第五代加密锁采用智能卡术,全面改进了第四代加密锁的缺点。市面上的第五代加密锁主要有北京飞天诚信公司的ROCKEY5、深思公司的 SenseLock IV 型锁和挪威 Sospita 公司的 Sospita 加密锁。这些加密锁大多功能强大,可将部分程序直接放入加密锁中运行。
软件水印通过向软件程序中嵌入隐藏信息来实现 软件版权保护。在软件开发时可以将含有版权保护的 信息嵌入到程序的代码区、数据区及程序的执行过程 中。在发生软件版权纠纷时,嵌入到程序的隐藏信息 可以被提取出用于判断软件的拥有者或者开发者,协助鉴定软件版权。
静态软件水印是指水印在软件开发时被添加到软 件的数据区或者代码区,但不在程序的可执行流程中,是一种与软件运行状态无关的水印。动态软件水印与 静态软件相反,将水印信息隐藏在程序的执行过程中, 但只有程序在特定的输入序列下运行时,才能提取出的软件的水印信息。