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.根据权利要求1所述的方法,其特征在于,所述方法还包括:检测到所述主进程停止运行的原因是因所述主进程的源代码而产生时,向所述主进程发送恢复信号,恢复所述主进程继续运行。3.根据权利要求1所述的方法,其特征在于,所述程序的主进程创建子进程,包括:所述程序的主进程先进入反调试初始化函数;所述主进程基于所述反调试初始化函数查找编译前添加的空函数对应的空函数指针,并创建子进程,以由所述子进程使用预设系统函数调试所述主进程。4.根据权利要求1所述的方法,其特征在于,所述检测所述主进程停止运行的原因,包括:基于所述异常信号获取错误函数指针地址;根据所述错误函数指针地址判断所述主进程停止运行的原因。5.根据权利要求4所述的方法,其特征在于,所述将主进程的异常指令恢复为正常指令并恢复所述主进程运行,包括:将所述错误函数指针修复为空函数指针,并向主进程发送恢复信号,恢复所述主进程运行。6.根据权利要求5所述的方法,其特征在于,所述将所述错误函数指针修复为空函数指针,包括:获取主进程的当前寄存器列表;将所述寄存器列表中程序计数器寄存器值由所述错误函数指针修复为通过反调试初始化函数中获取的空函数指针;将修复后的寄存器列表通过系统调用再设置回主进程,所述主进程基于所述修复后的寄存器列表从所述空函数开始执行。7.根据权利要求1所述的方法,所述方法还包括:若确定所述主进程被其他调试器调试,向所述主进程发送终止信号,由所述主进程依据所述终止信号终止运行。8.根据权利要求1所述的方法,其特征在于,所述在源代码的关键函数中添加异常指令,包括:获取函数列表;其中,所述函数列表中存储有需保护的关键函数的函数标识;基于函数列表确定源代码的关键函数;在所述源代码的关键函数中添加预设错误函数指针以及对所述预设错误函数指针的调用。9.根据权利要求1所述的方法,其特征在于,所述基于添加有所述异常指令的源代码生成带有反调试功能的程序,包括:在添加有所述异常指令的源代码中添加反调试代码,生成带有反调试功能的代码;通过编译所述带有反调试功能的代码,生成带有反调试功能的程序。10.根据权利要求9所述的方法,其特征在于,所...
【专利技术属性】
技术研发人员:张帆,
申请(专利权)人:腾讯科技深圳有限公司,
类型:发明
国别省市:广东,44
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。