一种反调试方法和系统与流程

文档序号:12669725阅读:196来源:国知局
一种反调试方法和系统与流程

本发明涉及应用程序的调试领域,尤其涉及一种应用程序的反调试方法和系统。



背景技术:

随着计算机技术应用日益普及,Android智能终端的快速发展,Android软件产业得以飞速发展,与此同时,攻击者利用Android软件逆向技术对软件的各种攻击和未授权使用以及盗版复制等行为也越来越多。

Android逆向分析技术可以被用来在不知道应用程序源代码的情况下分析应用程序的功能流程、篡改应用程序的数据代码等,逆向分析技术如果被不加限制的恶意使用,利用者可以分析获取应用程序的核心技术,也可以篡改应用程序的签名和作者信息,还可以将恶意代码注入到已有的应用程序中并通过二次打包进行伪装,这些行为都极大的危害了应用程序开发者的利益,严重损害了广大用户的隐私安全。

在Android软件逆向技术中,Android调试技术是一个非常重要的组成部分。通过进行Android应用的调试,可以得到Android应用的运行流程,推断出Android应用的基本原理,通常可以非常顺利且快速地绕过一些登陆限制或功能限制,获取到一些用户私密信息,具有较大的危害。例如,可以分析清楚Android程序中使用的数据加解密方法、如分析清楚应用收费功能的判断逻辑,从而可以绕过是否付费的检查,从而可以不缴费的情况下使用收费功能等、如对于游戏应用可以去开发出相应的“游戏外挂”等。而软件逆向的第一步则是能够对程序进行调试,如果没有反调试技术,则相当于程序被“裸露”在黑客面前。目前比较重要的程序都希望能够加入反调试功能,防止黑客进行调试,从而不让别人分析程序的实现原理,极大的提高了程序被破解的门槛,如何进行应用程序的反调试已成为急需解决的问题。



技术实现要素:

本发明的目的在于提供一种反调试方法和系统,通过创建一个用于调试应用程序进程的子进程,从而完全杜绝了应用程序被黑客攻击的可能性,实现了对应用程序的反调试。

本发明所采用的技术方案如下:

一种反调试方法,其特征在于,该方法包括:

步骤S101,将需要反调试的进程设置为调试状态;

步骤S102,在需要反调试的进程中创建子进程;

步骤S103,将所创建的子进程附加到需要反调试的进程中;

步骤S104,子进程接收需要反调试的进程发送的反馈消息,并对该反馈消息进行处理。

将需要反调试的进程设置为调试状态包括:

通过调用Android系统接口函数prctl(option,arg2,arg3,arg4,arg5)来将需要反调试的进程设置为调试状态,其中参数option是PR_SET_DUMPABLE,参数arg2的值是1, 参数arg3的值是0, 参数arg4的值是0, 参数arg5的值是0。

在需要反调试的进程中创建子进程包括:

通过调用Android系统函数fork来完成子进程的创建。

将所创建的子进程附加到需要反调试的进程中包括:

通过调用Android系统函数getppid来获取到需要反调试的进程的进程ID,将所创建的子进程附加到需要反调试的进程中。

将所创建的子进程附加到需要反调试的进程中包括:

调用Android系统函数ptrace(PTRACE_ATTACH, ppid, NULL, NULL)来执行附加操作,其中参数PTRACE_ATTACH表明是附加操作,参数ppid是获取到的需要反调试的进程的进程ID,表示将所创建的子进程附加到该需要反调试的进程的进程ID所指示的进程中,NULL代表空缺。

子进程接收需要反调试的进程发送的反馈消息,并对该反馈消息进行处理包括:

通过调用Android系统函数WSTOPSIG(status)来获取需要反调试的进程的反馈消息,其中变量status用于存放变量信号值,

判断该status的值是否等于以下四个信号中的任意一个,四个信号包括:停止该反调试的进程的执行信号SIGSTOP、停止该反调试的进程的运行信号SIGTSTP、当后台作业要从用户终端读数据时的信号SIGTTIN、在写终端或修改终端模式时收到的信号SIGTTOU,如果上述判断不成立,则不对所述的反馈消息进行任何处理,如果上述判断成立,则设置需要反调试的进程删除所述反馈消息。

通过调用Android系统函数ptrace(PTRACE_CONT, ppid, 0, 0) 来实现删除操作,其中,参数PTRACE_CONT用于指示需要反调试的进程继续执行系统调用过程,参数ppid是需要反调试的进程的进程ID值,参数0指示需要反调试的进程删除所述的反馈消息。

一种反调试系统,该系统包括设置模块、创建模块、调试模块以及处理模块,其特征在于:

设置模块,用于将需要反调试的进程设置为调试状态;

创建模块,用于在需要反调试的进程中创建子进程;

调试模块,用于将所创建的子进程附加到需要反调试的进程中;

处理模块,用于子进程等待需要反调试的进程的消息,并对消息进行处理。

设置模块中包括:

调用单元:

用于通过调用Android系统接口函数prctl(option,arg2,arg3,arg4,arg5)来设置当前进程可以被调试, 其中参数option是PR_SET_DUMPABLE,参数arg2的值是1, 参数arg3的值是0, 参数arg4的值是0, 参数arg5的值是0;

创建模块中包括:

建立单元,用于通过调用系统函数fork来完成新进程的创建;

将所创建的子进程附加到需要反调试的进程中包括:

通过调用函数getppid来获取到需要反调试的进程的进程ID,将所创建的子进程附加到需要反调试的进程中;

子进程等待需要反调试的进程的消息,并对消息进行处理包括:

通过调用Android系统函数WSTOPSIG(status)来获取需要反调试的进程的反馈消息,其中变量status用于存放变量信号值,

判断该status的值是否等于以下四个信号中的任意一个,四个信号包括:停止该反调试的进程的执行信号SIGSTOP、停止该反调试的进程的运行信号SIGTSTP、当后台作业要从用户终端读数据时的信号SIGTTIN、在写终端或修改终端模式时收到的信号SIGTTOU,如果上述判断不成立,则不对所述的反馈消息进行任何处理,如果上述判断成立,则设置需要反调试的进程删除所述反馈消息。

将所创建的子进程附加到需要反调试的进程中包括:

调用函数ptrace(PTRACE_ATTACH, ppid, NULL, NULL)来执行附加操作,其中参数request填入PTRACE_ATTACH,参数ppid是获取到的需要反调试的进程的进程ID,表示将所创建的子进程附加到该需要反调试的进程的进程ID所指示的进程中,NULL代表空缺。

本发明的技术方案所能获得的有益效果包括,通过消耗较少的系统资源,简单、方便的防止了其他进程调试被保护的进程。

附图说明

图1为该反调试方法的流程示意图;

图2为该反调试系统的功能模块示意图。

具体实施方式

为了更好的说明本发明,现结合具体实施例以及说明书附图对技术方案作进一步的说明。虽然实施例中记载了这些具体的实施方式,然其并非用以限定本发明,任何所属技术领域中具有通常知识者,在不脱离本发明的精神和范围内,当可作些许的更动与润饰,故本发明的保护范围当视权利要求书所界定者为准。

该应用程序的反调试方法的流程示意图如图1所示。该反调试方法首先会在被反调试的进程中,即应用程序进程,设置当前进程可以被附加,然后再创建一个子进程,子进程则会附加到反调试进程中执行调试任务,然后子进程进入消息循环,来处理父进程发送过来的消息。该反调试方法具体包括如下步骤:

1)步骤S101:将反调试的进程设置为调试状态;

通过调用Android系统接口函数prctl(int option,unsigned long arg2,unsigned long arg3,unsigned long arg4,unsigned long arg5)来设置当前进程可以被调试,此函数的关键点在于参数option。

在该反调试方法中的具体调用是prctl(PR_SET_DUMPABLE, 1, 0, 0, 0),其中参数option是PR_SET_DUMPABLE,参数arg2的值是1。

2)步骤S102:在反调试的进程中创建子进程;

在Android系统中创建一个新进程,通过调用系统函数fork()来完成新进程的创建,由fork创建的新进程被称为子进程(child process),调用fork函数将会有返回值,如果返回值为0,则表示创建的是子进程,如果返回值大于0,则表示创建的是父进程,对于父进程,其返回值是新进程的进程ID,该进程ID是进程的唯一编号,子进程可以通过调用系统函数getpid以获得其父进程的进程ID,具体实现如下:

pid_tpid = fork();

如果pid 的值为0则说明当前进程是子进程。

3)步骤S103:所创建的子进程对反调试的进程进行调试;

在步骤S102中创建的子进程,通过调用函数getpid来获取到父进程,即反调试的进程的进程ID,将子进程附加到父进程,即将子进程附加到反调试的进程中,子进程对反调试的进程进行调试。具体实现如下:

a. 获取父进程ID

pid_tppid =getppid();

其中,pid_t是进程ID的类型,getppid()是Android系统提供的获取进程ID的函数,ppid是父进程的ID,即进程的唯一编号。

b.附加到父进程中

调用Android系统提供的ptrace()函数来执行附加操作,long ptrace(int request, pid_tppid, void * addr, void * data) ,其中参数request填入类型PTRACE_ATTACH则说明是附加操作。具体实现如下:

long err = ptrace(PTRACE_ATTACH, ppid, NULL, NULL);

其中参数request填入的是PTRACE_ATTACH则说明是附加操作,参数ppid则是步骤S102中获取到的父进程的ID,指明附加到哪个进程。

通过步骤S103则可以让子进程来调试父进程,但是这个调试并不是真正的调试,而只是附加到父进程,这样可以防止其他进程来附加父进程,可以起到“占坑”的目的,同时最重要的是子进程需要处理好父进程的暂停信号,避免父进程崩溃,所以下面需要处理暂停信号。

4)步骤S104:子进程等待反调试的进程的消息,并对消息进行处理;

子进程需要处理好父进程的信号,从而避免父进程进入group-stop状态,从而避免程序崩溃异常。

程序总共有4种信号SIGSTOP(停止进程的执行信号)、SIGTSTP(停止进程的运行信号)、SIGTTIN(当后台作业要从用户终端读数据时的信号)、SIGTTOU(在写终端或修改终端模式时收到的信号)会导致进程陷入到group-stop状态。所以需要处理好这4种信号。

通过调用系统函数WSTOPSIG()来获取父进程暂停的信号。调用WSTOPSIG(status)来从status变量中获取到父进程的暂停信号,其中status是一个变量存放信号值,判断status的值是不是上述的4个信号值,即SIGSTOP、SIGTSTP、SIGTTIN、SIGTTOU这4种,判断stauts的值是否等于上述4个信号值中的任意一个,如果不是,则可以忽略,如果是,则需要设置父进程丢掉此信号,不需要进行处理。其中,丢掉此信号的操作是通过调用系统函数ptrace()来实现的。具体实现如下:

ptrace(PTRACE_CONT, ppid, 0, 0);

其中,参数PTRACE_CONT指示父进程继续执行系统调用过程,参数ppid是父进程的进程ID值,参数0指示父进程忽略引起的暂停信号,丢弃这个信号不进行处理。

通过对这个暂停信号的处理,就处理了父进程被子进程调试会出现程序崩溃的情况,所以把最关键的一步处理好了,那么父进程和子进程就可以一直存在,并且不会产生异常。同时由于父进程被子进程调试了,所以其他的Hack想调试这个进程则已经是不可能的了(Android系统的一个进程只允许一个进程调试)。

该反调试系统的功能模块示意图如图2所示,该反调试系统包括设置模块201、创建模块202、调试模块203以及处理模块204。其中,设置模块,用于将反调试的进程设置为调试状态;创建模块,用于在反调试的进程中创建子进程;调试模块,用于所创建的子进程对反调试的进程进行调试;处理模块,用于子进程等待反调试的进程的消息,并对消息进行处理。

设置模块中具体包括:调用单元,用于通过调用Android系统接口函数prctl(option,arg2,arg3,arg4,arg5)来设置当前进程可以被调试,其中参数option是PR_SET_DUMPABLE,参数arg2的值是1。创建模块中具体包括:建立单元,用于通过调用系统函数fork来完成新进程的创建。

本领域内的技术人员应明白,本发明的实施例可提供为方法、系统、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。

本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。

这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。

这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。

显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1