一种软件保护方法

文档序号:6463290阅读:180来源:国知局
专利名称:一种软件保护方法
技术领域
本发明涉及软件保护领域,特别涉及一种软件保护方法,用于在 软件的使用和租赁过程中对软件的使用时间进行控制。
背景技术
随着经济技术的飞速发展,软件作为辅助工具已经深入到了各行 各业当中。软件产品是软件设计者和软件编程人员智慧的结晶,软件 开发商的生存和发展是软件产品能够充足供应的基础,因而,保护软 件产品的版权,防止软件产品被盗版,具有很重要的现实意义。在软件开发商已有的保护软件产品的众多策略中,多数采用了这样一种方式提炼出软件产品中的核心算法或密钥作为关键程序代码, 将所述关键程序代码及该程序代码所需要的数据放在软件保护装置中 以作为软件保护装置中的功能模块,供外部软件调用。即,功能模块 为软件开发商从软件产品中提取出来的可以或者已经放在软件保护 装置中的供外部调用的代码和/或数据。采用这种方式以后,当用户使 用软件产品时,必须要有软件保护装置同时运行,否则将无法使用该 软件产品。这种策略的优势是,软件产品的关键代码是放在软件保护装置中 的,破解者很难得到软件产品的关键程序代码,也很难克隆软件保护 装置,也就很难破解该软件产品。当然所述的软件保护装置的处理芯 片是一个具有一定安全认证等级的智能卡芯片才可以防止被硬克隆。正因为有这种优势,国内外越来越多的软件开发商都采用了这种策略 来保护自己的软件产品。由于市场营销策略的原因,软件开发商经常需要提供限时的软件 产品。对于使用软件保护装置的软件产品,可以使用带有时钟芯片的 软件保护装置来实现软件的限时使用。带有时钟芯片的软件保护装置 使用电池为时钟芯片供电,从而可以实现精确的计时。但带有时钟芯 片的软件保护装置和普通的软件保护装置相比,需要增加时钟芯片、 电池以及时钟芯片工作需要的晶体,从而需要增加较大的额外成本。 对于不使用软件保护装置的软件产品,只能通过读取系统时间来获得 时间信息以限制软件的使用时间,但是由于系统时间很容易被修改, 所以基于系统时间来实现对软件进行限时的方法,其安全性非常差。发明内容有鉴于此,本发明的目的就是提供一种成本较低、安全性相对较 高的软件保护方法。因此,本发明提出了一种软件保护方法,其通过对软件保护装置 内的功能模块的使用进行控制从而控制软件的使用,该方法包括以下步骤内部计时器根据软件保护装置内的CPU时钟进行计时;利用内 部计时器的计时来累计记录软件保护装置中的功能模块的实际使用时 间;根据软件保护装置接收到的命令和所述功能模块的实际使用时间 来控制功能模块的使用,其中,所述功能模块中包括从软件中提取出 来的供外部调用的代码和/或数据。进一步地,所述控制功能模块的使用包括根据接收到的命令和功 能模块实际使用时间来启用、调用或停用功能模块。进一步地,在收到功能模块的启用命令并且相应的功能模块的实际使用时间没有超时的情况下,启用相应的功能才莫块;在收到功能模块的调用命令并且相应的功能模块已经被启用的情况下,调用该功能模块;以及在收到功能模块的停用命令的情况下停用相应的已经被启 用的功能模块。进一步地,所述累计记录软件保护装置中的功能模块的实际使用 时间为,记录停用状态的功能模块的每次使用时间的总和;其中,所 述每次使用时间是指功能模块每次从被启用到被停用的时间间隔。进一步地,所述累计记录软件保护装置中的功能模块的实际使用 时间为,记录启用状态的功能模块的在最后 一次启用之前的每次使用 时间和本次已经使用的时间的总和;其中,所述每次使用时间是指功 能模块每次从被启用到被停用的时间间隔;所述本次使用时间是指处 于启用状态的功能模块从最后一次启用到当前的时间间隔。进一步地,以预先设定的时间间隔,定期更新已启动的功能模块 的实际使用时间,并且在功能模块的更新后的实际使用时间超时的情 况下停用该功能模块。进一步地,利用从当前命令中提取的外部时间信息和从上次命令 中提取的外部时间信息计算出这两个命令之间的外部时间间隔;从计 时器中获取当前命令和上次命令的内部时间间隔;判断所述外部时间 间隔和内部时间间隔的差值是否在预先设定的误差范围内;在所述差 值落入预先设定的误差范围的情况下,使用外部时间来校准计时器的 时间,从而使功能模块的实际使用时间能够被准确计时。进一步地,如果所述内部时间间隔和外部时间间隔的差值超出了 所述预先设定的误差范围,则软件保护装置对功能模块的使用进行限制。本发明通过设置在软件保护装置内的内部计时器利用软件保护装 置内的CPU时钟进行计时,来实现对功能模块的实际使用时间的计时, 并且利用实际使用时间来对功能模块进行控制,从而克服了现有技术 中带有时钟芯片的软件保护装置成本较高的问题,而且本发明的方法 不直接利用来自外部的系统时间来计时,所以可防止由于系统时间被修改而带来的软件安全性差的问题;进一步地,本发明利用外部系统 的时间信息来对内部计时器进行校准,从而可以保证内部计时器的精确性。


图1为本发明的软件保护方法的流程图;图2为本发明的软件保护方法利用系统时间对内部计时器进行校 准的流程图;图3为利用本发明的软件保护方法的軟件保护装置的结构示意图。
具体实施方式
本发明的方法用在软件保护装置中,软件保护装置用来对运行在 外部系统中的软件的使用进行限制,而这种限制是通过利用本发明的 方法对软件保护装置内的功能模块的控制而实现的。本发明的方法可 以用软件方式实现,为方便描述,在下文中用"功能模块控制器"来代 表本发明的方法。下面结合附图对本发明的软件保护方法进行详细的描述。 行说明。如图l所示,该方法包括以下步骤。步骤200,初始化并启动软件保护装置的内部计时器;对内部计时器的初始化包括利用当前的外部系统时间来设置内部 计时器的初始时间,并启动内部计时器,使其开始利用软件保护装置 内的CPU时钟开始计时。步骤201,等待外部命令;该步骤为待命状态,如果未收到来自外部系统的任何命令,则继 续等待,直至收到外部的命令后,才执行步骤202。步骤202,在接收到外部命令时,判断接收到的命令为启用、调用 还是停用,当命令为启用时,执行步骤203;当命令为调用时,执行步 骤211;当命令为停用时,执行步骤221;该步骤为分发命令的步骤,对于不同命令,执行不同的后续步骤。步骤203,检查要求启用的功能模块是否超时,如果不超时则执行 步骤204,如果超时则返回步骤201;对于启用命令,可以先检查要求启用的功能模块是否超时,仅对 不超时的功能模块执行步骤204,对于超时的功能模块,则可以不予处 理,直接返回步骤201继续待命;在此步骤中,也可以如图1所示, 在超时的时候,先执行报告错误的步骤206,再返回步骤201,这样可 以使用户清楚地了解所发出命令的处理结果。9步骤204,根据内部计时器的输出开始累计地记录该功能模块的使 用时间。步骤205,初始化并启用该功能模块,然后返回步骤201。 上述步骤204、 205的先后顺序可调换。步骤211,检查该功能模块是否已经被启用,如果已启用,则执行 步骤212,否则返回步骤201;如果在步骤202收到了调用命令,则在本步骤211中,检查功能 模块是否已被启用,只对已启用的功能模块进行调用;对于未启用的 功能模块,可以直接返回步骤201,也可以如图l所示,在执行报告错 误的步骤206后,再返回步骤201。步骤212,调用该功能模块,返回步骤201;调用相应功能模块并向外部系统返回调用结果,这样即完成了调 用命令,可以返回步骤201待命。步骤221,检查该功能模块是否已经被启用,如果已被启用则执行 步骤222,如果未#1启用则直接返回步骤201;如果在步骤202收到了停用命令,则在步骤221中,可以先检查 功能模块是否已启用,只对已启用的功能模块进行停用操作。步骤222,停用该功能模块,并更新该功能模块的使用时间。步骤223,停止对被停用的功能模块计时,返回步骤201;功能模块的停用包括以上两个步骤222和223,主要为停止计时和 更新使用时间,其中,在功能模块被停用后,应当停止对其使用时间 的计时,而更新使用时间使功能模块的使用时间被更新为最新信息。此外,步骤201中可以进一步包括循环检测计时器的值是否已 达到预先设定的阈值,如果计时器的值已达到阈值,则执行步骤231: 更新已启动的功能模块的使用时间。在步骤231后还可以进一步包括 步骤232,检测是否有功能模块已超时,如有则执行步骤233;否则返 回步骤201;步骤233,停用相关的超时的功能模块;然后执行步骤223, 然后返回步骤201。步骤231-233的这种循环检测使功能模块控制器在 等待接受功能模块相关命令时,可以以预定的时间间隔对功能模块的 使用时间进行检测,并及时地刷新已启用的功能模块的使用时间,从 而为及时发现超时使用的功能模块提供了条件。该阈值越小,则检测 是否超时使用的周期越短,对于功能模块的控制的灵敏度越高;反之, 阈值越大,则检测是否超时使用的周期越长,对于功能模块的控制的 灵敏度越低。由于本发明的方法是通过软件保护装置的内部计时器来控制软件 的使用时间,而内部计时器的工作依赖于软件保护装置内的CPU时钟, 而这个CPU时钟的频率可能存在一定的误差,因此这种计时的方法存 在一定缺陷。在此可以通过系统时间和内部计时器相结合的办法来提 高计时的精度。因为发送给功能模块控制器的命令都需要带上当前的 系统时间,这样功能模块控制器可以利用外部系统发来的命令中的时 间来校准内部计时器。如图2所示,本发明的方法还可以包括利用外 部的系统时间对内部计时器进行校准的步骤步骤300,提取当前命令 数据中的时间数据,计算出该时间和上次传入的命令数据中的时间之间的外部时间间隔;步骤301,获取内部计时器所记录的当前命令与上 次传入命令之间的内部时间间隔;步骤302,得到所述外部时间间隔和 内部时间间隔之间的差值;步骤303,判断所述差值是否落在预先设定 误差范围内,如是则执行步骤304;步骤304,获取当前的系统时间, 对已经启动的功能模块的使用时间进行校准。例如,如果当前命令中 的外部时间信息为10点零2秒,而上次命令中的外部时间信息为9点 整,则可得到外部时间间隔为1小时零2秒,并且如果得到了内部时 间间隔为1小时,则两个时间间隔的差值为2秒,而如果预定的误差 范围为3秒,则因为3秒>2秒,所以落在误差范围内,这时可以获取 当前的外部系统时间来对内部计时器的时间进行校准。如果在步骤303中判断得到所述两个时间间隔之间的差值超出了 预先设定的误差范围,可以忽略外部时间,或者也对功能模块的使用 进行限制(步骤305 )。所述限制可以为修改功能模块的使用时间, 以减少功能模块的可使用时间;甚至阶段性停用或永久停用功能模块 等等。图2中的上述步骤300-304可以在图1的步骤201和202之间执行, 在执行步骤305之后,可以报告错误,即报告外部时间有误差的信息, 然后可以返回步骤201,等待下一命令。另外,在本发明的方法的步骤200中,启动内部计时器可以在方 法的开始就进行,也可以在接收到第 一个启用功能模块的命令的时候 进行,然后再启用指定的功能模块;如果在收到第一个启用命令时进 行,则相应地上述步骤201中的检查计时器的阈值的操作必须在软件 保护装置内部的计时器启动之后才能进行。检查计时器的值,可以通过中断来完成。 一般情况下可以先给计时器设置一个阈值,当计时器的值到达这个阈值时,计时器会向CPU发起一个中断请求。CPU可以在中断请求的处 理函数中对已经启用的功能模块的使用时间完成更新,检查功能模块 是否超时工作。下面对于本发明的软件保护方法的主要工作流程进行说明。功能 模块控制器在接收到命令之后,根据不同的命令完成不同的操作。如 果是启用功能模块的命令,则功能模块控制器查看该功能模块是否已 经被启用,如果已经被启用,直接返回成功(该步骤在图中未显示); 如果未被启用,则检查该功能模块是否超时,如果已超时则返回错误; 如果未超时,则开始对该功能模块计时并启用该功能模块。如果是调 用功能模块命令,则检查该功能模块是否已经启用,如果未被启用, 则返回错误;如果已经被启用则调用该功能模块,并返回功能模块的 调用结果。如果是停用功能模块命令,则检查该功能模块是否已经被 启用,如果未被启用,则返回成功;如果已经;陂启用,则停用该功能 模块并更新该功能模块的使用时间。另外,对于已启用的功能模块, 可以定时更新其使用时间,并且在更新后检测功能模块是否超时,如 超时则可以停用该功能模块。另外,本发明的方法可以用在如图3所示的一个软件保护装置中, 该装置可以使用USB接口与外部系统进行通信;并且还可以包括命令 分发器,其通过USB接口接收来自外部的所有命令,并将与功能模块 相关的命令分发给功能模块控制器,将其它命令发送给功能模块无关 命令处理器;功能模块控制器接收到命令后的处理过程(即本发明的13软件保护方法)在上文中已有详细描述,在此不予赘述。如图3所示,
该装置中包括了两个功能模块第一功能模块和第二功能模块,实际 上本领域的技术人员应当理解,其中可以包括一个以上的任意个功能 模块。对于各个不同的功能模块的使用时间的控制是通过所记录的各 自的使用时间而进行的。
以上内容仅作为示例性的说明,而不用于限制本发明,本发明的 保护范围是由权利要求书所限定的。本领域的技术人员在本发明的精 神范围内可以对本发明做出各种修改或等同替换,这些也应视为落入 本发明的保护范围内。
权利要求
1. 一种软件保护方法,其通过对软件保护装置内的功能模块的使用进行控制从而控制软件的使用,其特征在于,所述方法包括以下步骤内部计时器根据软件保护装置内的CPU时钟进行计时;利用内部计时器的计时来累计记录软件保护装置中的功能模块的实际使用时间;以及根据软件保护装置接收到的命令和所述功能模块的实际使用时间来控制功能模块的使用,其中,所述功能模块中包括从软件中提取出来的供外部调用的代码和/或数据。
2、 根据权利要求1所述的方法,其特征在于,所述控制功能模块 的使用包括根据接收到的命令和功能模块实际使用时间来启用、调用 或停用功能模块。
3、 根据权利要求2所述的方法,其特征在于,在收到功能模块的启用命令并且相应的功能模块的实际使用时间 没有超时的情况下,启用相应的功能模块;在收到功能模块的调用命令并且相应的功能模块已经被启用的情 况下,调用该功能模块;以及在收到功能模块的停用命令的情况下停用相应的已经被启用的功 能模块。
4、 根据权利要求1所述的方法,其特征在于,所述累计记录软件 保护装置中的功能模块的实际使用时间为,记录停用状态的功能模块的每次使用时间的总和;其中,所述每次使用时间是指功能模块每次从被启用到被停用的 时间间隔。
5、 根据权利要求1所述的方法,其特征在于,所述累计记录软件 保护装置中的功能模块的实际使用时间为,记录启用状态的功能模块 的在最后一次启用之前的每次使用时间和本次已经使用的时间的总和;其中,所述每次使用时间是指功能模块每次从被启用到被停用的时间间隔;所述本次使用时间是指处于启用状态的功能模块从最后一次启用到当前的时间间隔。
6、 根据权利要求5所述的方法,其特征在于,以预先设定的时间 间隔,定期更新已启动的功能模块的实际使用时间,并且在功能模块 的更新后的实际使用时间超时的情况下停用该功能模块。
7、 根据权利要求1所述的方法,其特征在于,进一步包括,利用从当前命令中提取的外部时间信息和从上次命令中提取的外 部时间信息计算出这两个命令之间的外部时间间隔;从计时器中获取 当前命令和上次命令的内部时间间隔;判断所述外部时间间隔和内部时间间隔的差值是否在预先设定的误差范围内;在所述差值落入预先 设定的误差范围的情况下,使用外部时间来校准计时器的时间,从而 使功能模块的实际使用时间能够被准确计时。
8、根据权利要求7所述的方法,其特征在于,进一步包括,如果 所述内部时间间隔和外部时间间隔的差值超出了所述预先i殳定的误差 范围,则软件保护装置对功能模块的使用进行限制。
全文摘要
本发明公开一种软件保护方法,通过对软件保护装置内的功能模块的使用进行控制从而控制软件的使用,该方法包括内部计时器根据软件保护装置内的CPU时钟进行计时;利用内部计时器的计时来累计记录功能模块的实际使用时间;根据软件保护装置接收到的命令和功能模块的实际使用时间来控制功能模块的使用。本发明通过在软件保护装置内部设置内部计时器以利用软件保护装置的CPU时钟来实现对软件的实际使用时间的累计计时,并结合功能模块控制器来对各个功能模块进行控制,克服了现有技术中带有时钟芯片的软件保护装置成本较高的问题,而且本发明不直接利用来自外部的系统时间进行计时,所以可防止由于系统时间被修改而带来的软件安全性差的问题。
文档编号G06F21/00GK101261667SQ200810103729
公开日2008年9月10日 申请日期2008年4月10日 优先权日2008年4月10日
发明者孙吉平, 勇 韩 申请人:北京深思洛克数据保护中心
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1