数据保护方法及装置制造方法及图纸

技术编号:17940020 阅读:149 留言:0更新日期:2018-05-15 20:21
本发明专利技术实施例公开一种数据保护方法,所述方法包括:在源代码的关键函数中添加异常指令;基于添加有所述异常指令的源代码生成带有反调试功能的程序;所述程序的主进程创建子进程并由子进程调试主进程,当主进程运行到异常指令后停止运行;子进程接收到异常信号时,判断主进程是否被其他调试器调试;若所述主进程未被其他调试器调试,检测所述主进程停止运行的原因;检测到所述主进程停止运行的原因是因主进程的异常指令而产生时,将主进程异常指令恢复为正常指令并恢复所述主进程运行。本发明专利技术实施例同时还公开了一种数据保护装置。

Data protection methods and devices

An embodiment of the invention discloses a method of data protection. The method includes: adding an exception instruction in the key function of the source code; generating a program with the anti debugging function based on the source code added to the exception instruction; the main process of the program creates a sub process and debug the main process from the sub process, when the main process runs. Stop running after an exception instruction; when the child process receives an exception signal, judge whether the main process is debugged by another debugger; if the main process is not debugged by other debuggers, the reason for the stop running of the main process is detected; the reason that the main process is stopped running is caused by the exception instruction of the main process. The main process exception instruction is restored to the normal instruction and the main process is resumed. The embodiment of the invention also discloses a data protection device.

【技术实现步骤摘要】
数据保护方法及装置
本专利技术涉及软件安全
,具体涉及一种数据保护方法及装置。
技术介绍
目前,为了增强软件的防护能力,防止破解者对软件进行破解,通常采用反调试的方式进行保护。现有安卓(Android)上反调试方案主要分为以下几类:第一类方案是检查父进程名或检查当前运行的所有进程名,对于通过调试器启动的程序可以检查父进程名,也可以直接检查系统当前运行的所有进程名,查看有没有已知的调试器名。但是,进程中有调试器名称并不能说明本身被调试,而且外界调试器只要改一个名称即可绕过检测,另外,目前Android程序(App,Application)无法直接通过调试器启动,可见这类方案的反调试保护效果不好。第二类方案是子进程调试主进程相互守护,主进程创建出子进程后,子进程调试主进程,这时主进程无法被其他进程调试,主进程再检查子进程的状态,如果发现子进程状态不对或者子进程已经不存在便终止运行。但是,外界调试器还可以调试被调试进程除主线程之外的其他线程,另外,轮询会使得程序性能明显下降。
技术实现思路
有鉴于此,本专利技术期望提供一种数据保护方法及装置,保证外界调试器分析主程序时无法绕过异常指令,能提高破解反调试的难度,相比于采用轮询方式的反调试方案来说,不会因程序增加反调试功能而使程序性能明显下降。本专利技术的技术方案是这样实现的:一方面,本专利技术实施例提供了一种数据保护方法,所述方法包括:在源代码的关键函数中添加异常指令;基于添加有所述异常指令的源代码生成带有反调试功能的程序;所述程序开始运行时,所述程序的主进程创建子进程并由所述子进程调试所述主进程,当所述主进程运行到所述异常指令后停止运行;所述子进程接收到异常信号时,判断所述主进程是否被其他调试器调试;若所述主进程未被其他调试器调试,检测所述主进程停止运行的原因;检测到所述主进程停止运行的原因是因主进程的异常指令而产生时,将主进程异常指令恢复为正常指令并恢复所述主进程运行。另一方面,本专利技术实施例提供了一种数据保护装置,所述装置包括:生成模块,用于在源代码的关键函数中添加异常指令;基于添加有所述异常指令的源代码生成带有反调试功能的程序;初始化模块,用于所述程序开始运行时,所述程序的主进程创建子进程并由所述子进程调试所述主进程,当所述主进程运行到所述异常指令后停止运行;接收模块,用于接收异常信号;控制模块,用于判断所述主进程是否被其他调试器调试;若所述主进程未被其他调试器调试,检测所述主进程停止运行的原因;检测到所述主进程停止运行的原因是因主进程的异常指令而产生时,将主进程的异常指令恢复为正常指令并恢复所述主进程运行。采用本专利技术实施例所述技术方案,数据保护装置在源代码的关键函数中添加异常指令;基于添加有所述异常指令的源代码生成带有反调试功能的程序;其中,当所述程序运行到所述异常指令时,所述程序将被停止运行;程序开始运行时,由子进程使用预设系统函数调试所述程序的主进程,并在确定所述程序被停止运行是因所述异常指令而产生时,向所述主进程发送恢复信号,使所述程序恢复运行。这样,由于在开发者开发出的源代码的关键函数中添加了异常指令,而该异常指令能够使得带有反调试功能的程序运行到该异常指令时,使得程序停止运行,而且由于程序每运行到关键函数时,均会遇到异常指令,提高了对关键函数的保护程度,也保证了外界调试器分析主程序时无法绕过异常指令,进而能提高破解反调试的难度。附图说明图1为本专利技术实施例提供的数据保护方法的实现流程示意图;图2为本专利技术实施例提供的生成带有反调试功能的程序的一种实现流程示意图;图3为本专利技术实施例提供的添加反调试代码的一种实现流程图;图4为本专利技术实施例提供的反调试功能运行原理示意图;图5为本专利技术实施例提供的子进程调试主进程的一种实现流程示意图;图6为本专利技术实施例提供的数据保护装置的组成结构示意图;图7是本专利技术实施例中用于实现数据保护装置的一个可选的硬件结构示意图;图8为本专利技术实施例提供的数据保护系统的一种交互示意图。具体实施方式为了能够更加详尽地了解本专利技术的特点与
技术实现思路
,下面先介绍一下本专利技术中所涉及的重要缩略语和关键术语。Android:一种基于Linux的自由及开放源代码的操作系统,主要使用于移动设备,如智能手机和平板电脑,由谷歌(Google)公司和开放手机联盟领导及开发。Ptrace:Ptrace系统调用提供了一种使父进程得以监视和控制其它进程的方式,它还能够改变子进程中的寄存器和内核映像,因而可以实现断点调试和系统调用的跟踪。Makefile:一个工程中的源文件不计其数,其按类型、功能、模块分别放在若干个目录中,Makefile定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作,因为Makefile就像一个Shell脚本一样,其中也可以执行操作系统的命令。下面结合附图对本专利技术的实现进行详细阐述,所附附图仅供参考说明之用,并非用来限定本专利技术。本专利技术实施例提供一种数据保护方法,所述方法应用于产品侧,所述产品可以是数据保护装置,其表现形式为反调试代码集成工具包。如图1所示,所述方法主要包括:101:在源代码的关键函数中添加异常指令。这里,所述源代码可以是尚未编译成第一程序之前的代码。例如,所述源代码是开发者开发完成的代码,但尚未编译成该代码对应的第一程序之前的代码。可选地,所述异常指令负责对预设错误函数指针的调用,使由添加有所述异常指令的源代码编译而成的程序在运行时,运行到所述异常指令将导致该程序出错。在一可选实施方式中,所述在源代码的关键函数中添加异常指令,包括:获取函数列表;其中,所述函数列表中存储有需保护的关键函数的函数标识;基于所述函数列表确定所述源代码中的关键函数。这里,所述函数列表可以由开发者提供。由于开发者更清楚源代码中哪些函数是需要保护的,那么,反调试代码集成工具包只需在开发者开发出的源代码的关键函数中添加异常指令,而该异常指令能够使得带有反调试功能的程序运行到该异常指令时,使得程序终止运行,而且由于程序每运行到关键函数时,均会遇到异常指令,提高了对关键函数的保护程度,也保证了外界调试器分析主程序时无法绕过异常指令,进而能提高外界调试器破解反调试的难度。需要说明的是,所述异常指令除了可以是上述的错误指针,实际上也可以是例如“1除以0”这类异常指令。102、基于添加有所述异常指令的源代码生成带有反调试功能的程序。其中,当所述程序运行到所述异常指令时,所述程序将停止运行。在一可选实施方式中,所述基于添加有所述异常指令的源代码生成带有反调试功能的程序,包括:在添加有所述异常指令的源代码中添加反调试代码,生成带有反调试功能的代码;通过编译所述带有反调试功能的代码,生成带有反调试功能的程序。示例性的,图2示出了生成带有反调试功能的程序的一种实现流程图,在图2中,原始代码包括源代码以及函数列表;生成带有反调试功能的程序的具体流程如图2所示,反调试代码集成工具包首先从原始代码中获取需要保护的函数列表,然后通过运行反调试代码集成工具包的脚本,在关键函数中添加异常指令,并在源代码中添加反调试代码,生成带有反调试功能的代码;最后,开发者通过编译操作对该带有反调试功能的代码进行编译,即可生成带有反调试功本文档来自技高网
...
数据保护方法及装置

【技术保护点】
一种数据保护方法,其特征在于,所述方法包括:在源代码的关键函数中添加异常指令;基于添加有所述异常指令的源代码生成带有反调试功能的程序;所述程序开始运行时,所述程序的主进程创建子进程并由所述子进程调试所述主进程,当所述主进程运行到所述异常指令后停止运行;所述子进程接收到异常信号时,判断所述主进程是否被其他调试器调试;若所述主进程未被其他调试器调试,检测所述主进程停止运行的原因;检测到所述主进程停止运行的原因是因所述主进程的异常指令而产生时,将所述主进程的异常指令恢复为正常指令并恢复所述主进程运行。

【技术特征摘要】
1.一种数据保护方法,其特征在于,所述方法包括:在源代码的关键函数中添加异常指令;基于添加有所述异常指令的源代码生成带有反调试功能的程序;所述程序开始运行时,所述程序的主进程创建子进程并由所述子进程调试所述主进程,当所述主进程运行到所述异常指令后停止运行;所述子进程接收到异常信号时,判断所述主进程是否被其他调试器调试;若所述主进程未被其他调试器调试,检测所述主进程停止运行的原因;检测到所述主进程停止运行的原因是因所述主进程的异常指令而产生时,将所述主进程的异常指令恢复为正常指令并恢复所述主进程运行。2.根据权利要求1所述的方法,其特征在于,所述方法还包括:检测到所述主进程停止运行的原因是因所述主进程的源代码而产生时,向所述主进程发送恢复信号,恢复所述主进程继续运行。3.根据权利要求1所述的方法,其特征在于,所述程序的主进程创建子进程,包括:所述程序的主进程先进入反调试初始化函数;所述主进程基于所述反调试初始化函数查找编译前添加的空函数对应的空函数指针,并创建子进程,以由所述子进程使用预设系统函数调试所述主进程。4.根据权利要求1所述的方法,其特征在于,所述检测所述主进程停止运行的原因,包括:基于所述异常信号获取错误函数指针地址;根据所述错误函数指针地址判断所述主进程停止运行的原因。5.根据权利要求4所述的方法,其特征在于,所述将主进程的异常指令恢复为正常指令并恢复所述主进程运行,包括:将所述错误函数指针修复为空函数指针,并向主进程发送恢复信号,恢复所述主进程运行。6.根据权利要求5所述的方法,其特征在于,所述将所述错误函数指针修复为空函数指针,包括:获取主进程的当前寄存器列表;将所述寄存器列表中程序计数器寄存器值由所述错误函数指针修复为通过反调试初始化函数中获取的空函数指针;将修复后的寄存器列表通过系统调用再设置回主进程,所述主进程基于所述修复后的寄存器列表从所述空函数开始执行。7.根据权利要求1所述的方法,所述方法还包括:若确定所述主进程被其他调试器调试,向所述主进程发送终止信号,由所述主进程依据所述终止信号终止运行。8.根据权利要求1所述的方法,其特征在于,所述在源代码的关键函数中添加异常指令,包括:获取函数列表;其中,所述函数列表中存储有需保护的关键函数的函数标识;基于函数列表确定源代码的关键函数;在所述源代码的关键函数中添加预设错误函数指针以及对所述预设错误函数指针的调用。9.根据权利要求1所述的方法,其特征在于,所述基于添加有所述异常指令的源代码生成带有反调试功能的程序,包括:在添加有所述异常指令的源代码中添加反调试代码,生成带有反调试功能的代码;通过编译所述带有反调试功能的代码,生成带有反调试功能的程序。10.根据权利要求9所述的方法,其特征在于,所...

【专利技术属性】
技术研发人员:张帆
申请(专利权)人:腾讯科技深圳有限公司
类型:发明
国别省市:广东,44

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1