一种反动态调试应用程序的方法及装置的制造方法

文档序号:9217113阅读:279来源:国知局
一种反动态调试应用程序的方法及装置的制造方法
【技术领域】
[0001]本发明涉及计算机软件技术领域,具体涉及应用程序的防破解技术,尤其涉及一种反动态调试应用程序的方法及装置。
【背景技术】
[0002]随着手机与平板电脑等移动终端的迅速发展,主要应用于移动终端的Android系统也得到了越来越快速的推广,使得很多基于Android系统的应用程序越来越丰富。很多对应用程序进行反编译与动态分析的工具应运而生,一些盈利性的应用程序被恶意分析。破解者可以通过静态分析或者动态分析破解应用程序,通过这种途径可以攫取应用中表示用户隐私的代码逻辑,从而获得用户的隐私,或者侵害用户的利益等。

【发明内容】

[0003]本发明提供了一种反动态调试应用程序的方法及装置,阻止了其他调试器通过调用应用程序的API的ptrace函数破解该应用程序。所述技术方案如下:
[0004]一方面,本发明实施例提供了一种反动态调试应用程序的方法,所述方法包括:
[0005]当启动应用程序时,调用所述应用程序对应接口的进程跟踪ptrace函数,并执行所述ptrace函数;
[0006]检测是否有除所述应用程序以外的其他应用程序调用所述ptrace函数;
[0007]如果有,则阻止所述其他应用程序调用所述ptrace函数。
[0008]另一方面,本发明实施例提供了一种反动态调试应用程序的装置,所述装置包括:
[0009]调用模块,用于在启动应用程序时,调用所述应用程序对应接口的进程跟踪ptrace函数,并执行所述ptrace函数;
[0010]检测模块,用于检测是否有除所述应用程序以外的其他应用程序调用所述ptrace函数;
[0011]阻止模块,用于在所述检测模块检测到有除所述应用程序以外的其他应用程序调用所述ptrace函数时,阻止所述其他应用程序调用所述ptrace函数。
[0012]本发明提供了一种反动态调试应用程序的方法及装置,通过在应用程序启动时,调用该应用程序的API的ptrace函数,使得该应用程序运行产生的进程成为其自身的父进程,从而阻止了其他调试器通过调用该应用程序的API的ptrace函数破解该应用程序。
【附图说明】
[0013]图1是本发明实施例提供的一种反动态调试应用程序的方法流程图;
[0014]图2是本发明实施例提供的另一种反动态调试应用程序的方法流程图;
[0015]图3是本发明实施例提供的另一种反动态调试应用程序的方法流程图;
[0016]图4是本发明实施例提供的一种反动态调试应用程序的装置组成框图;
[0017]图5是本发明实施例提供的另一种反动态调试应用程序的装置组成框图;
[0018]图6是本发明实施例提供的另一种反动态调试应用程序的装置组成框图。
【具体实施方式】
[0019]为了使本发明的目的、技术方案和优点更加清楚,下面结合附图和实施例对本发明作进一步的详细说明。可以理解的是,此处所描述的具体实施例,仅仅用于解释本发明,而非对本发明的限定。
[0020]本发明实施例提供了一种反动态调试应用程序的方法,如图1所示,所述方法包括:
[0021]步骤101:当启动应用程序时,调用所述应用程序对应接口的进程跟踪ptrace函数,并执行所述ptrace函数。
[0022]其中,所述应用程序对应接口即为API (Applicat1n Programming Interface,应用程序接口 ),其是一组定义、程序及协议的集合,应用程序通过API接口实现计算机软件之间的相互通信。API的一个主要功能是提供通用功能集,程序员通过使用API函数开发应用程序,从而可以避免编写无用程序,以减轻编程任务。API同时也是一种中间件,为各种不同平台提供数据共享,API可以应用于所有计算机平台和操作系统,这些API以不同的格式连接数据(如共享数据缓存器、数据库结构、文件框架)。操作系统的API可用来分配存储器或读取文件,用于快速执行的接口通常包括函数、常量、变量与数据结构。应用程序接口经常是软件开发工具包(SDK, Software Development Kit)的一部分。
[0023]其中,ptrace函数是用于跟踪进程的,为方便应用软件的开发和调试,从unix的早期版本开始就提供了一种对运行中的进程进行跟踪和控制的手段,那就是系统调用Ptrace函数。它提供了一种机制使得父进程可以观察和控制子进程的执行过程,ptrace函数还可以检查和修改该子进程的可执行文件在内存中的镜像及该子进程所使用的寄存器中的值,一个进程可以动态地读/写另一个进程的内存和寄存器,包括其指令空间、数据空间、堆栈以及所有的寄存器。与信号机制(以及其他手段)相结合,就可以实现一个进程在另一个进程的控制和跟踪下运行的目的。当使用了 Ptrace函数跟踪后,所有发送给被跟踪的子进程的信号(除了 SIGKILL),都会被转发给父进程,而子进程则会被阻塞,这时子进程的状态就会被系统标注为TASK_TRACED。而父进程收到信号后,就可以对停止下来的子进程进行检查和修改,然后让子进程继续运行。
[0024]具体地,当应用程序启动时,这个应用程序调用该应用程序自身的对应接口的进程跟踪ptrace函数,并执行ptrace函数,由于该应用程序调用其自身的对应接口的进程跟踪ptrace函数,因此,该应用程序每次启动后,产生的进程均既是子进程又是父进程。
[0025]步骤102:检测是否有除所述应用程序以外的其他应用程序调用所述ptrace函数。
[0026]步骤103:如果是,则阻止所述其他应用程序调用所述ptrace函数。
[0027]当一个应用程序M的对应接口的ptrace函数被另一个程序N调用后,应用程序M运行时产生的进程B就成为程序N运行时产生的进程A的子进程,而进程A为父进程,此时,进程A就可以对进程B进行跟踪和控制。然而当进程B已经被进程A跟踪以后,其他进程就不能再对进程B进行跟踪和控制了。
[0028]具体地,例如,假设进程A要跟踪进程B。在ptrace系统调用真正开始前,内核会检查一下我们将要跟踪的进程B是否当前正在被跟踪,如果进程B当前已经被正在跟踪,内核就会把进程B停下来,并把控制权交给进程A (任何时候,子进程只能被唯一一个父进程跟踪)。但是,如果在进程B开始运行时,就通过ptrace系统调用使进程B的父进程是进程B自身,那么当进程A跟踪进程B时,内核检测出进程B已经被跟踪,会把进程B停下来,当进程B再次运行后,仍然处于进程B的父进程是进程B自身的状态,因此,进程A永远也无法对进程B进行跟踪。
[0029]本发明提供了一种反动态调试应用程序的方法及装置,通过在应用程序启动时,调用该应用程序的API的ptrace函数,使得该应用程序运行产生的进程成为其自身的父进程,从而阻止了其他调试器通过调用该应用程序的API的ptrace函数破解该应用程序。
[0030]进一步的,在启动所述应用程序时,调用的所述ptrace函数的请求类型为PTRACE_TRACEME。
[0031]ptrace函数的形式如下所示:
[0032]ptrace (enum一ptrace_request request, pid_t pid, void氺addr, void氺data);其中,enum一ptrace_request request, pid_t pid, void氺addr, void氺data 为 ptrace 函数的 4个参数,enum—ptrace_request request 参数指不了 ptrace 要执行的命令;pid_t pid 参数指示ptrace要跟踪的进程;void*addr参数指示要监控的内存地址;void*data参数存放读取出的或者要写入的数据。第I个参数决定Ptrace的行为也决定了接下来其它3个参数是怎样被使用的,第I个参数可以取以下任意一个值:
[0033]PTRACE_TRACEME,
[0034]PTRACE_PEEKTEXT,
[0035]PTRACE_PEEKDATA,
[0036]PTRACE_PEEKUSER,
[0037]PTRACE_POKETEXT,
[0038]PTRACE_POKEDATA,
[0039]PTRACE_POKEUSER,
[0040]PTRACE_GETREGS,
[0041]PTRACE_GETFPREGS,
[0042]PTRACE_SETREGS,
[0043]PTRACE_SETFPREGS,
[0044]PTRACE_C0NT,
[0045]PTRACE_SYSCALL,
[0046
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1