CN101320416A - 一种检测软件处于调试状态的方法和系统 - Google Patents
一种检测软件处于调试状态的方法和系统 Download PDFInfo
- Publication number
- CN101320416A CN101320416A CN 200810111990 CN200810111990A CN101320416A CN 101320416 A CN101320416 A CN 101320416A CN 200810111990 CN200810111990 CN 200810111990 CN 200810111990 A CN200810111990 A CN 200810111990A CN 101320416 A CN101320416 A CN 101320416A
- Authority
- CN
- China
- Prior art keywords
- software
- time
- timer
- protecting equipment
- pass point
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Landscapes
- Debugging And Monitoring (AREA)
Abstract
本发明公开了一种检测软件处于调试状态的方法和系统。本发明在软件保护装置中获得软件指定代码的真正运行时间,可实现对调试行为的可靠检测,为受保护软件对跟踪行为的反击提供了依据。本发明利用软件保护装置进行时间检测,不依赖于通用计算机的时间信息,因此准确率高,不易被篡改,且隐蔽性好,大大提高了软件反跟踪手段的可用性。
Description
技术领域
本发明涉及软件保护技术,特别涉及一种检测软件处于调试状态的方法和系统。
背景技术
调试并分析软件运行流程是盗版者破解软件的重要手段,如果能够阻止盗版者对软件进行调试,那么软件被盗版的风险将会大大降低。有多种方法可以实现这一目标,例如可以抑制调试器的跟踪命令、封锁键盘输入或者在软件中对调试行为进行检测和反击。
检测软件运行时间是一种重要的调试行为检测技术。由于调试软件过程中经常用到中断或者单步运行等技术手段进行分析,而这些手段都会使软件的运行时间大大高于正常运行所需的时间。因此检查软件代码的运行时间,与预期的上限时间比较,就可以判断是否存在调试行为。
传统的做法就是利用计算机本身提供的时间信息(例如通用定时器、CPU时钟数、或者实时时钟等),在一段可以确定运行时间上限的程序代码两端分别插入两个时间检查点A和B,当程序运行到检查点A开始计时,在程序运行到检查点B时计算运行时间,一旦这段程序的运行时间超过上限就可以认为软件处于被调试状态,进而可以采取相应的反击措施。
这种方法不针对特定的一种或几种调试器进行检查,而是对调试运行进行检测。只要在预先设定的两个检查点之间中断或者单步执行,影响到代码的运行时间,该方法就可以检测出调试行为,因此这种技术非常普遍的用于软件的反跟踪方案中。
但是这种方法也存在一些明显的缺陷和不足,影响了其使用效果:
1、通用计算机系统中的时间并不可靠,很容易被篡改;
2、插入的检查点与软件实现的功能无关,盗版者可以直接修改软件来绕过检查点;
3、反击措施也在软件中,很容易被修改而失效。
发明内容
有鉴于此,本发明提供了一种利用硬件检测软件处于调试状态的方法和系统,能够有效提高软件检测调试行为的可靠性。
根据本发明的一个方面,提供一种检测软件处于调试行为状态的方法,其特征在于,通过在软件保护装置内部计算软件运行时间来检测软件是否处于调试状态,该方法包括以下步骤:
A、在软件中选择多个加密点;
B、在软件保护装置中各个加密点对应的代码中加入时间检查代码并设定相邻两个加密点之间的软件最大运行时间;
C、软件保护装置开始计时;
D、软件在运行过程中依次调用各个加密点,取得下一步运行所需信息,同时软件保护装置中对应的时间检查代码计算软件运行时间;
E、将计算所得的软件运行时间与已设定的相邻两个加密点之间的软件最大运行时间进行比较;
F、如果软件运行时间超出已设定的相邻两个加密点之间的软件最大运行时间,则检测出所述软件处于调试状态。
根据本发明的一个方面,其特征还在于,该方法在步骤F后还包括步骤:
软件保护装置检测到所述软件处于调试状态之后,所采取的行为包括:通知被保护软件、记录调试行为或者永久拒绝服务。
根据本发明的一个方面,其特征还在于,所述软件运行时间是当前计时时间与上一个加密点计时时间之差。
根据本发明的一个方面,其特征还在于,在步骤E中,第一个加密点只记录计时时间,不进行比较操作。
根据本发明的一个方面,其特征还在于,在步骤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...,取得下一步运行所需信息,而软件保护装置中对应的时间检查代码也同时对软件运行时间进行计算(软件运行时间为当前计时时间与上一个加密点计时时间之差,而没有对应上限时间的加密点(如A点)则只记录计时时间,不进行比较操作)并将其与上限值进行比较,一旦运行时间超出上限值,则可认定软件处于调试运行状态;
5)软件保护装置检测到软件处于调试状态之后,可以采取相应的措施,比如通知被保护软件、记录调试行为,或者永久拒绝服务。
在本发明所使用的技术中,所有的检测均在软件保护装置硬件内执行,并未直接体现在软件中,大大减少了被分析或者欺骗的可能,且由于时间检测功能与正常的加密点相关联,无法直接通过修改软件跳过检查点,因此可以有效的提高盗版的难度。更进一步地,软件保护装置可以在检测到调试行为之后,在软件保护装置内部进行反击,避免了在软件中进行反击容易被分析和篡改的风险。因此本发明大大优于现有技术。
附图说明
图1为根据本发明的示意图。
具体实施方式
为使本发明的目的、技术方案及优点更加清楚明白,以下通过实施例,对本发明进一步详细说明。
实施例一:
本实施例软件保护装置使用带有定时器的8位单片机,软件在加密点处向软件保护装置发送数据,并且在取得软件保护装置返回的响应数据之后继续运行。本实施例中,软件保护装置使用定时器溢出中断进行计时。选择加密点A和加密点B,确定软件从加密点A运行到加密点B的上限时间为100ms;
软件保护装置启动后开启定时器开始计时。使用全局变量m记录计时时间,每次定时器溢出时m加1并重新设定定时器初值,此初值由反跟踪要求的计时精确度、单片机计时频率和定时器寄存器长度决定。假设计时精度定为1ms,定时器使用16位寄存器,计时频率为1MHz,则初值应该为0xffff-(0.001*1000000)=64535,由此,每过1ms,m就加1。为了确保m溢出之前可以表示的时间足够长,m应取足够的长度。本实施例中取m由4个字节32位表示,溢出之前可以计时为0xffffffff*0.001/60/60=1193(小时)。
软件保护装置启动后开始计时:开启定时器中断并设定初值64535。
在软件保护装置中对应加密点A处的代码中加入以下操作:软件运行到加密点A处与软件保护装置进行通信时,软件保护装置同时读取并记录此时m的值作为当前计时时间,假设此时m为1000ms,使用全局变量保存此值,以供在加密点B处进行比较时使用。
在软件保护装置中对应加密点B处代码中加入操作:软件运行到加密点B处与软件保护装置进行通信时,软件保护装置读取m中记录的时间,将此时间减去在加密点A记录的时间(此处即为上述的1000ms)得到的便是软件从加密点A运行到加密点B的实际时间,假设此时间大于预设的上限时间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()取得定时器当前计数值。
假设软件已经使用精锐IV加密锁进行了保护,通常是将加密点处的代码移植到精锐IV中运行,并在软件中将这部分代码改为对精锐IV中相应程序的调用。
假设使用的加密锁计时频率为0.25MHz,反跟踪需要的计时精度为1ms。
选取加密点A、B、C、D、E,并且确定上限时间,假设软件从加密点A运行到加密点B上限时间为1s,从加密点C运行到加密点D上限时间为10ms,从加密点D运行到加密点E上限时间为100ms,下面利用这五个加密点对软件加密点A、B之间和加密点C、E之间两段代码实施反跟踪策略:
加密锁启动后,调用_set_timer()设置定时模式和初值,其中初值设为零,然后调用_start_timer()启动定时器从0开始计时;
在加密点A处移植到精锐IV中的代码中添加操作:调用_get_timer()得到当前计数值,并换算成毫秒存在全局变量m中(m中总是保存最后一次_get_timer()得到的时间,用以计算两个加密点之间的相对时间)。
其中由定时器计数值到毫秒的换算:设t=_get_timer(),则m=t*1000/(0.25*10000000);
在加密点B处移植到精锐IV中的代码中添加操作:调用_get_timer()得到当前计数值并换算成毫秒tm,则tm-m即为软件从加密点A运行到加密点B的实际时间,并将此时间与预先确定的上限时间1秒进行比较,若大于1秒则判定存在跟踪,进而执行反击操作,若不大于1秒,则用tm的值更新m继续执行;
在加密点C处移植到精锐IV中的代码中添加操作:与加密点A点相同,调用_get_timer()更新m;
在加密点D处移植到精锐IV中的代码中添加操作:与步骤3中在加密点B的操作相同,只是上限时间变为预先确定的10ms;
在加密点E处移植到精锐IV中的代码中添加操作:与在加密点B的操作相同,只是上限时间变为预先确定的100ms;
至此,完全在加密锁内部对软件加密点A、B之间和加密点C、E之间的代码在现有加密的基础上增加了对调试行为的检测。
以上所述仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内,所作的任何修改、等同替换以及改进等,均应包含在本发明的保护范围之内。
Claims (22)
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所述的系统,其特征在于,启动定时器或者实时时钟开始计时。
17、根据权利要求16所述的系统,其特征在于,软件保护装置使用定时器溢出中断进行计时。
18、根据权利要求17所述的系统,其特征在于,软件保护装置使用带有定时器的8位单片机。
19、根据权利要求18所述的系统,其特征在于,使用全局变量记录计时时间,每次定时器溢出时所述全局变量加1并重新设定定时器初值,所述定时器初值由计时精确度、单片机计时频率和定时器寄存器长度决定。
20、根据权利要求13所述的系统,其特征在于,所述软件保护装置为智能卡型加密锁。
21、根据权利要求13所述的系统,其特征在于,所述软件保护装置包含具有运算能力的处理器、存储器、计算机接口以及可提供时间信息的单元。
22、根据权利要求21所述的系统,其特征在于,所述可提供时间信息的单元包括定时器或者实时时钟。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN 200810111990 CN101320416A (zh) | 2008-05-20 | 2008-05-20 | 一种检测软件处于调试状态的方法和系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN 200810111990 CN101320416A (zh) | 2008-05-20 | 2008-05-20 | 一种检测软件处于调试状态的方法和系统 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN101320416A true CN101320416A (zh) | 2008-12-10 |
Family
ID=40180460
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN 200810111990 Pending CN101320416A (zh) | 2008-05-20 | 2008-05-20 | 一种检测软件处于调试状态的方法和系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN101320416A (zh) |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103164643A (zh) * | 2011-12-08 | 2013-06-19 | 北京深思洛克软件技术股份有限公司 | 一种通过硬件进行反调试的方法和装置 |
CN103631712A (zh) * | 2013-10-23 | 2014-03-12 | 北京信息控制研究所 | 一种基于内存管理的模式化软件关键行为跟踪方法 |
CN107480043A (zh) * | 2016-12-23 | 2017-12-15 | 宝沃汽车(中国)有限公司 | 代码运行时间的测试方法及系统 |
CN108363580A (zh) * | 2018-03-12 | 2018-08-03 | 平安普惠企业管理有限公司 | 应用程序安装方法、装置、计算机设备和存储介质 |
CN109117201A (zh) * | 2018-07-05 | 2019-01-01 | 武汉斗鱼网络科技有限公司 | 一种程序退出的方法及相关设备 |
-
2008
- 2008-05-20 CN CN 200810111990 patent/CN101320416A/zh active Pending
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103164643A (zh) * | 2011-12-08 | 2013-06-19 | 北京深思洛克软件技术股份有限公司 | 一种通过硬件进行反调试的方法和装置 |
CN103631712A (zh) * | 2013-10-23 | 2014-03-12 | 北京信息控制研究所 | 一种基于内存管理的模式化软件关键行为跟踪方法 |
CN103631712B (zh) * | 2013-10-23 | 2016-03-02 | 北京信息控制研究所 | 一种基于内存管理的模式化软件关键行为跟踪方法 |
CN107480043A (zh) * | 2016-12-23 | 2017-12-15 | 宝沃汽车(中国)有限公司 | 代码运行时间的测试方法及系统 |
CN108363580A (zh) * | 2018-03-12 | 2018-08-03 | 平安普惠企业管理有限公司 | 应用程序安装方法、装置、计算机设备和存储介质 |
CN109117201A (zh) * | 2018-07-05 | 2019-01-01 | 武汉斗鱼网络科技有限公司 | 一种程序退出的方法及相关设备 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN101625657B (zh) | 监控数据处理设备和概括监控数据 | |
WO2021057057A1 (zh) | 操作系统级程序的目标码覆盖率测试方法、系统及介质 | |
CN106201892B (zh) | 用于嵌入式软件的异常中断源定位检测方法 | |
CN100549979C (zh) | 系统任务的cpu占用率检测方法及系统 | |
CN106155883B (zh) | 一种虚拟机可靠性测试方法及装置 | |
US20070079288A1 (en) | System and method for capturing filtered execution history of executable program code | |
US10810094B2 (en) | Methods and apparatus for anomaly response | |
US10248424B2 (en) | Control flow integrity | |
CN101320416A (zh) | 一种检测软件处于调试状态的方法和系统 | |
CN107193732B (zh) | 一种基于路径比对的校验函数定位方法 | |
CN104169888A (zh) | 运行时间仪表定向采样 | |
CN104272271A (zh) | 具有指令跟踪能力的处理器装置 | |
Guo et al. | Control-flow checking for intrusion detection via a real-time debug interface | |
US6331957B1 (en) | Integrated breakpoint detector and associated multi-level breakpoint techniques | |
Patel et al. | Architectural frameworks for security and reliability of MPSoCs | |
Uzelac et al. | Real-time unobtrusive program execution trace compression using branch predictor events | |
US9489208B2 (en) | Operating a pipeline flattener in order to track instructions for complex breakpoints | |
Rivière et al. | A novel simulation approach for fault injection resistance evaluation on smart cards | |
Ragel et al. | Micro embedded monitoring for security in application specific instruction-set processors | |
Yu et al. | Using hardware performance counters to detect control hijacking attacks | |
CN1329839C (zh) | 一种计算机cpu抗干扰的设计方法 | |
CN106482742A (zh) | 计步数据的获取方法及装置 | |
CN101814054A (zh) | 一种用于调试微控制器的指令追踪控制器 | |
CN106095631B (zh) | 一种基于有限状态机实现的多周期非流水线cpu动态调试方法 | |
US7404106B2 (en) | Apparatus and method for reporting program halts in an unprotected pipeline at non-interruptible points in code execution |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C02 | Deemed withdrawal of patent application after publication (patent law 2001) | ||
WD01 | Invention patent application deemed withdrawn after publication |
Open date: 20081210 |