一种检测软件处于调试状态的方法和系统的制作方法

文档序号:6464093阅读:327来源:国知局
专利名称:一种检测软件处于调试状态的方法和系统的制作方法
技术领域
本发明涉及软件保护技术,特别涉及 一种检测软件处于调试状态的方法 和系统。
背景技术
调试并分析软件运行流程是盗版者破解软件的重要手段,如果能够阻止 盗版者对软件进行调试,那么软件被盗版的风险将会大大降低。有多种方法 可以实现这一目标,例如可以抑制调试器的跟踪命令、封锁键盘输入或者在 软件中对调试行为进行片企测和反击。
检测软件运行时间是一种重要的调试行为检测技术。由于调试软件过程 中经常用到中断或者单步运行等技术手段进行分析,而这些手段都会使软件 的运行时间大大高于正常运行所需的时间。因此^企查软件代码的运行时间, 与预期的上限时间比较,就可以判断是否存在调试行为。
传统的做法就是利用计算机本身提供的时间信息(例如通用定时器、
CPU时钟数、或者实时时钟等),在一段可以确定运行时间上限的程序代码 两端分别插入两个时间;险查点A和B,当程序运^f亍到^r查点A开始计时, 在程序运行到检查点B时计算运行时间, 一旦这段程序的运行时间超过上限 就可以认为软件处于被调试状态,进而可以采取相应的反击措施。
这种方法不针对特定的一种或几种调试器进行检查,而是对调试运行进 行检测。只要在预先设定的两个检查点之间中断或者单步执行,影响到代码 的运行时间,该方法就可以检测出调试行为,因此这种技术非常普遍的用于 软件的反跟踪方案中。
但是这种方法也存在一些明显的缺陷和不足,影响了其使用效果1、 通用计算机系统中的时间并不可靠,很容易被篡改;
2、 插入的检查点与软件实现的功能无关,盗版者可以直接修改软件来 绕过检查点;
3、 反击措施也在软件中,很容易被修改而失效。

发明内容
有鉴于此,本发明提供了 一种利用硬件检测软件处于调试状态的方法和 系统,能够有效提高软件检测调试行为的可靠性。
根据本发明的 一个方面,提供一种检测软件处于调试行为状态的方法, 其特征在于,通过在软件保护装置内部计算软件运行时间来检测软件是否处 于调试状态,该方法包括以下步骤
A、 在软件中选择多个加密点;
B、 在软件保护装置中各个加密点对应的代码中加入时间检查代码并设 定相邻两个加密点之间的^:件最大运^"时间;
C、 软件保护装置开始计时;
D、 软件在运行过程中依次调用各个加密点,取得下一步运行所需信息, 同时软件保护装置中对应的时间检查代码计算软件运行时间;
E、 将计算所得的软件运行时间与已设定的相邻两个加密点之间的软件 最大运行时间进行比较;
F 、如果软件运行时间超出已设定的相邻两个加密点之间的软件最大运 行时间,则检测出所述软件处于调试状态。
根据本发明的一个方面,其特征还在于,该方法在步骤F后还包括步骤
软件保护装置检测到所述软件处于调试状态之后,所采取的行为包括 通知被保护软件、记录调试行为或者永久拒绝服务。
根据本发明的一个方面,其特征还在于,所述软件运行时间是当前计时 时间与上 一 个加密点计时时间之差。
根据本发明的一个方面,其特征还在于,在步骤E中,第一个加密点只记录计时时间,不进4亍比4交操作。
根据本发明的一个方面,其特征还在于,在步骤C中,开始计时的时 间为软件启动时,或者最晚为软件运行到加密点A处。
根据本发明的一个方面,其特征还在于,启动定时器或者实时时钟开始 计时。
根据本发明的一个方面,其特征还在于,软件保护装置使用定时器溢出 中断进行计时。
根据本发明的一个方面,其特征还在于,软件保护装置使用带有定时器
的8位单片机。
根据本发明的一个方面,其特征还在于,在步骤C之后,使用全局变 量记录计时时间,每次定时器溢出时所述全局变量加1并重新设定定时器初 值,所述定时器初值由计时精确度、单片机计时频率和定时器寄存器长度决 定。
根据本发明的一个方面,其特征还在于,所述软件保护装置为智能卡型 加密锁。
根据本发明的一个方面,其特征还在于,所述软件保护装置包含具有运 算能力的处理器、存储器、计算机接口以及可提供时间信息的单元。
根据本发明的一个方面,其特征还在于,所述可提供时间信息的单元包 括定时器或者实时时钟。
根据本发明的另一个方面,提供一种检测软件处于调试状态的系统,其 特征在于,通过在软件保护装置内部计算软件运行时间来检测软件是否处于 调试状态,该系统包括
软件保护装置;
用于在软件中选择多个加密点的装置;
用于在软件保护装置中各个加密点对应的代码中加入时间检查代码并 设定相邻两个加密点之间的软件最大运行时间的装置; 用于开始计时的装置;用于软件在运行过程中依次调用各个加密点以取得下一步运行所需信 息的装置,
用于计算软件运行时间的装置;
用于将计算所得的软件运行时间与已设定的相邻两个加密点之间的软 件最大运行时间进行比较的装置;
用于根据软件运行时间超出已设定的相邻两个加密点之间的软件最大 运行时间检测出所述软件处于调试状态的装置。
根据本发明的另一个方面,其特征还在于,在软件保护装置检测到所述 软件处于调试状态之后,所采取的行为包括通知被保护软件、记录调试行 为或者永久拒绝服务。
根据本发明的另一个方面,其特征还在于,所述软件运行时间是当前计 时时间与上 一 个力口密点计时时间之差。
根据本发明的另一个方面,其特征还在于,启动定时器或者实时时钟开 始计时。
根据本发明的另一个方面,其特征还在于,软件保护装置使用定时器溢 出中断进行计时。
根据本发明的另一个方面,其特征还在于,软件保护装置使用带有定时 器的8位单片机。
根据本发明的另 一个方面,其特征还在于,使用全局变量记录计时时间, 每次定时器溢出时所述全局变量加1并重新设定定时器初值,所述定时器初 值由计时精确度、单片机计时频率和定时器寄存器长度决定。
根据本发明的另一个方面,其特征还在于,所述软件保护装置为智能卡 型加密锁。
根据本发明的另一个方面,其特征还在于,所述软件保护装置包含具有 运算能力的处理器、存储器、计算机接口以及可提供时间信息的单元。
根据本发明的另一个方面,其特征还在于,所述可提供时间信息的单元 包括定时器或者实时时钟。本发明所采用的硬件是一种软件保护装置,这种装置包含具有运算能力 的处理器、存储器、计算机接口、以及定时器或者实时时钟等可提供时间信 息的单元。
利用软件保护装置对软件进行版权保护的方法不是本发明要求保护的
范围,但为了便于理解,在此进行简单描述软件保护装置是一种硬件,通 常软件会在软件中的多个部分(一般称为加密点)与软件保护装置通信,获
得下一步继续运行所需要的信息。如果没有软件保护装置,软件就无法运行, 从而可以保护软件不被滥用。
本发明在不改变现有软件保护装置工作流程的情况下实现了对调试行 为的检测,为软件的反跟踪提供了可靠的依据,具体流程为
1 )在已加密软件中选取加密点A、 B、 C…,且相邻加密点之间软件运 行的最大时间可以确定,可以将加密点A和加密点B之间的软件运行最大 时间设为Mab,将加密点B和加密点C之间的软件运行最大时间设为 Mbc…;
2) 在软件保护装置中加密点A、 B、 C…对应的代码中加入时间检查代 码,并设定对应的M值,如将加密点B对应的代码中加入时间检查代码, 并设定对应的M值为Mab,将加密点C对应的代码中加入时间检查代码, 并设定对应的M值为Mbc;
3) 软件在某一时刻(例如启动时,或者最晚为加密点A处)启动定时 器或者实时时钟等部件,开始计时;
4) 软件在运行过程中调用加密点A、 B、 C…,取得下一步运行所需信 息,而软件保护装置中对应的时间检查代码也同时对软件运行时间进行计算
(软件运4亍时间为当前计时时间与上一个加密点计时时间之差,而没有对应 上限时间的加密点(如A点)则只记录计时时间,不进行比较操作)并将 其与上限值进行比较, 一旦运行时间超出上限值,则可认定软件处于调试运 行状态;
5) 软件保护装置检测到软件处于调试状态之后,可以采取相应的措施,比如通知被保护软件、记录调试行为,或者永久拒绝服务。
在本发明所使用的技术中,所有的检测均在软件保护装置硬件内执行, 并未直接体现在软件中,大大减少了被分析或者欺骗的可能,且由于时间检 测功能与正常的加密点相关联,无法直接通过修改软件跳过检查点,因此可 以有效的提高盗版的难度。更进一步地,软件保护装置可以在检测到调试行 为之后,在软件保护装置内部进行反击,避免了在软件中进行反击容易被分 析和篡改的风险。因此本发明大大优于现有技术。


图1为根据本发明的示意图。
具体实施例方式
为使本发明的目的、技术方案及优点更加清楚明白,以下通过实施例, 对本发明进一步详细说明。
实施例一
本实施例软件保护装置使用带有定时器的8位单片机,软件在加密点处 向软件保护装置发送数据,并且在取得软件保护装置返回的响应数据之后继 续运行。本实施例中,软件保护装置使用定时器溢出中断进行计时。选择 加密点A和加密点B,确定^:件/人加密点A运^f亍到加密点B的上限时间为 100ms;
软件保护装置启动后开启定时器开始计时。使用全局变量m记录计时时 间,每次定时器溢出时m加1并重新设定定时器初值,此初值由反跟踪要 求的计时精确度、单片机计时频率和定时器寄存器长度决定。假设计时精度 定为lms,定时器使用16位寄存器,计时频率为lMHz,则初值应该为 0xffff-(0.001*1000000) = 64535,由此,每过lms, m就加l。为了确保m溢 出之前可以表示的时间足够长,m应取足够的长度。本实施例中取m由4个字节32位表示,溢出之前可以计时为Oxffffffff * 0.001/60/60= 1193(小时)。 软件保护装置启动后开始计时开启定时器中断并设定初值64535。 在软件保护装置中对应加密点A处的代码中加入以下操作软件运行 到加密点A处与软件保护装置进行通信时,软件保护装置同时读取并记录 此时m的值作为当前计时时间,假设此时m为1000ms,使用全局变量保存 此值,以供在加密点B处进行比较时使用。
在软件保护装置中对应加密点B处代码中加入操作软件运行到加密点 B处与软件保护装置进行通信时,软件保护装置读取m中记录的时间,将此 时间减去在加密点A记录的时间(此处即为上述的1000ms)得到的便是软 件^v加密点A运^f亍到加密点B的实际时间,々£-没此时间大于预"i殳的上限时 间100ms,则判定软件在加密点A、加密点B两点之间处于调试运行状态, 进而执行反击操作,若此时间小于100ms,则不进行任何操作。
至此,完全在软件保护装置中对软件加密点A、 B之间的代码实施了运 行时间计算,因此可以检查到介于加密点A、加密点B点之间的软件是否处 于调试状态。 实施例二
本实施例所述软件保护装置为北京深思洛克数据保护中心的智能卡型 加密锁精锐IV。
精锐IV提供了一个64位的加法定时器,当计时频率为0.25MHz时,计 时精度为4微秒,溢出之前计时时间长达4.7小时,并且提供了相应的操作 API接口 —set—timer()设置定时模式和初值、—start—timer()启动定时器开始 计时、一stop一timer()停止定时器、—get—timer(3取得定时器当前计数值。
假设软件已经使用精锐IV加密锁进行了保护,通常是将加密点处的代码 移植到精锐IV中运行,并在软件中将这部分代码改为对精锐IV中相应程序的 调用。
假设使用的加密锁计时频率为0.25MHz ,反跟踪需要的计时精度为
lms。选取加密点A、 B、 C、 D、 E,并且确定上限时间,假设软件从加密点 A运行到加密点B上限时间为1 s, /人加密点C运行到加密点D上限时间为 10ms,从加密点D运行到加密点E上限时间为100ms,下面利用这五个加 密点对软件加密点A、 B之间和加密点C、 E之间两段代码实施反跟踪策略
加密锁启动后,调用—setJimerO设置定时模式和初值,其中初值设为零, 然后调用—start—timer()启动定时器从0开始计时;
在加密点A处移植到精锐IV中的代码中添加操作调用一getjimer()得 到当前计数值,并换算成毫秒存在全局变量m中(m中总是保存最后一次 —getjimer()得到的时间,用以计算两个加密点之间的相对时间)。
其中由定时器计数值到毫秒的换算设t =—getjimer(),则 m=t* 1000/(0.25* 10000000);
在加密点B处移植到精锐IV中的代码中添加操作调用—get—timer()得 到当前计数值并换算成毫秒tm,则tm-m即为软件从加密点A运行到加密点 B的实际时间,并将此时间与预先确定的上限时间1秒进行比较,若大于1 秒则判定存在跟踪,进而执行反击操作,若不大于l秒,则用tm的值更新 m继续扭j亍;
在加密点C处移植到精锐IV中的代码中添加操作与加密点A点相同, 调用—getjimer()更新m;
在加密点D处移植到精锐IV中的代码中添加操作与步骤3中在加密 点B的操作相同,只是上限时间变为预先确定的10ms;
在加密点E处移植到精锐IV中的代码中添加操作与在加密点B的操 作相同,只是上限时间变为预先确定的100ms;
至此,完全在加密锁内部对软件加密点A、 B之间和加密点C、 E之间 的代码在现有加密的基础上增加了对调试行为的检测。
以上所述仅为本发明的较佳实施例而已,并非用于限定本发明的保护范 围。凡在本发明的精神和原则之内,所作的任何修改、等同替换以及改进等, 均应包含在本发明的保护范围之内。
权利要求
1、一种检测软件处于调试状态的方法,其特征在于,通过在软件保护装置内部计算软件运行时间来检测软件是否处于调试状态,该方法包括以下步骤A、在软件中选择多个加密点;B、在软件保护装置中各个加密点对应的代码中加入时间检查代码并设定相邻两个加密点之间的软件最大运行时间;C、软件保护装置开始计时;D、软件在运行过程中依次调用各个加密点,取得下一步运行所需信息,同时软件保护装置中对应的时间检查代码计算软件运行时间;E、将计算所得的软件运行时间与已设定的相邻两个加密点之间的软件最大运行时间进行比较;F、如果软件运行时间超出已设定的相邻两个加密点之间的软件最大运行时间,则检测出所述软件处于调试状态。
2、 根据权利要求1所述的方法,其特征在于,该方法在步骤F后还包 括步骤软件保护装置检测到所述软件处于调试状态之后,所采取的行为包括 通知被保护软件、记录调试行为或者永久拒绝服务。
3、 根据权利要求1所述的方法,其特征在于,所述软件运行时间是当 前计时时间与上一个加密点计时时间之差。
4、 根据权利要求3所述的方法,其特征在于,在步骤E中,第一个加 密点只记录计时时间,不进行比较操作。
5、 根据权利要求1所述的方法,其特征在于,在步骤C中,开始计时 的时间为软件启动时,或者最晚为软件运行到加密点A处。
6、 根据权利要求5所述的方法,其特征在于,启动定时器或者实时时 钟开始计时。
7、 根据权利要求6所述的方法,其特征在于,软件保护装置使用定时器溢出中断进行计时。
8、 根据权利要求7所述的方法,其特征在于,软件保护装置使用带有 定时器的8位单片机。
9、 根据权利要求8所述的方法,其特征在于,在步骤C之后,使用全 局变量记录计时时间,每次定时器溢出时所述全局变量加1并重新设定定时 器初值,所述定时器初值由计时精确度、单片机计时频率和定时器寄存器长 度决定。
10、 根据权利要求5所述的方法,其特征在于,所述软件保护装置为智 能卡型加密锁。
11、 根据权利要求5所述的方法,其特征在于,所述软件保护装置包含 具有运算能力的处理器、存储器、计算机接口以及可提供时间信息的单元。
12、 根据权利要求11所述的方法,其特征在于,所述可提供时间信息 的单元包括定时器或者实时时钟。
13、 一种检测软件处于调试状态的系统,其特征在于,通过在软件保护 装置内部计算软件运行时间来检测软件是否处于调试状态,该系统包括软件保护装置;用于在软件中选择多个加密点的装置;用于在软件保护装置中各个加密点对应的代码中加入时间检查代码并 设定相邻两个加密点之间的软件最大运行时间的装置; 用于开始计时的装置;用于软件在运行过程中依次调用各个加密点以取得下一步运行所需信 息的装置,用于计算软件运行时间的装置;用于将计算所得的软件运行时间与已设定的相邻两个加密点之间的软 件最大运行时间进行比较的装置;用于根据软件运行时间超出已设定的相邻两个加密点之间的软件最大运行时间检测出所述软件处于调试状态的装置。
14、 根据权利要求13所述的系统,其特征在于,在软件保护装置检测到所述软件处于调试状态之后,所采取的行为包括通知被保护软件、记录 调试行为或者永久拒绝服务。
15、 根据权利要求13所述的系统,其特征在于,所述软件运行时间是 当前计时时间与上 一 个加密点计时时间之差。
16、 根据权利要求13所述的系统,其特征在于,启动定时器或者实时 时4中开始计时。
17、 根据权利要求16所述的系统,其特征在于,软件保护装置使用定 时器溢出中断进行计时。
18、 根据权利要求17所述的系统,其特征在于,软件保护装置使用带 有定时器的8位单片机。
19、 根据权利要求18所述的系统,其特征在于,使用全局变量记录计 时时间,每次定时器溢出时所述全局变量加1并重新设定定时器初值,所述 定时器初值由计时精确度、单片机计时频率和定时器寄存器长度决定。
20、 根据权利要求13所述的系统,其特征在于,所述软件保护装置为 智能卡型加密锁。
21、 根据权利要求13所述的系统,其特征在于,所述软件保护装置包 含具有运算能力的处理器、存储器、计算机接口以及可提供时间信息的单元。
22、 根据权利要求21所述的系统,其特征在于,所述可提供时间信息 的单元包括定时器或者实时时钟。
全文摘要
本发明公开了一种检测软件处于调试状态的方法和系统。本发明在软件保护装置中获得软件指定代码的真正运行时间,可实现对调试行为的可靠检测,为受保护软件对跟踪行为的反击提供了依据。本发明利用软件保护装置进行时间检测,不依赖于通用计算机的时间信息,因此准确率高,不易被篡改,且隐蔽性好,大大提高了软件反跟踪手段的可用性。
文档编号G06F21/00GK101320416SQ200810111990
公开日2008年12月10日 申请日期2008年5月20日 优先权日2008年5月20日
发明者孙吉平, 勇 韩 申请人:北京深思洛克数据保护中心
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1