买专利,只认龙图腾
首页 专利交易 科技果 科技人才 科技服务 商标交易 会员权益 IP管家助手 需求市场 关于龙图腾
 /  免费注册
到顶部 到底部
清空 搜索

【发明授权】防止进程被误杀的方法和装置_北京奇虎科技有限公司;奇智软件(北京)有限公司_201410836192.X 

申请/专利权人:北京奇虎科技有限公司;奇智软件(北京)有限公司

申请日:2014-12-26

公开(公告)日:2017-04-05

公开(公告)号:CN104573420B

主分类号:G06F21/12(2013.01)I

分类号:G06F21/12(2013.01)I

优先权:

专利状态码:有效-授权

法律状态:2017.04.05#授权;2015.05.27#实质审查的生效;2015.04.29#公开

摘要:本发明提供了一种防止进程被误杀的方法和装置,涉及计算机领域,该方法通过监测到操作系统中存在关闭进程的操作时,调用与管理关闭进程的特定系统进程挂钩的预设可执行文件,该预设可执行文件判断被关闭的进程是否为预设的白名单中的进程,当该被关闭的进程为预设的白名单中的进程时,通过该预设可执行文件将该进程的属性设置为不可关闭,从而避免白名单中的进程被误杀,解决了目前操作系统中用户需求的必要进程可能被误杀的问题。

主权项:一种防止进程被误杀的方法,包括:检测操作系统中是否存在任意一个进程的调度组变量被标记为预设值,其中,进程的调度组变量被标记为预设值为所述进程即将被所述操作系统执行关闭操作的标记;当操作系统中存在关闭进程的操作时,调用与管理关闭进程的特定系统进程挂钩的预设可执行文件;通过所述预设可执行文件判断被关闭的进程是否为预设的白名单中的进程;当所述被关闭的进程为所述预设的白名单中的进程时,通过所述预设可执行文件将所述进程的属性设置为不可关闭。

全文数据:防止进程被误杀的方法和装置技术领域[0001]本发明涉及计算机领域,具体涉及一种防止进程被误杀的方法和装置。背景技术[0002]目前,随着计算机技术的发展,各种应用程序对计算机资源的消耗也越来越严重,因此,各种操作系统出现了对于应用程序的进程的管理机制。[0003]以Android系统为例,其系统进程ActivityManagerService,用于管理activity的各种行为,控制activity的生命周期,派发消息事件,低内存管理等等。当操作系统发生低内存情况,或用户选择对操作系统中的进程进行清除时,该系统进程会对进程进行遍历,若进程不是系统进程,则会对其执行removetask操作,将进程清除掉。[0004]但是,如上述情况,即有可能造成应用程序的进程被误杀,导致应用程序无法正常运行。例如,优化软件、杀毒软件等在正常情况下,均需要在后台保持运行,以对操作系统的健康情况进行检测。[0005]综上所述,目前缺乏防止进程被误杀的技术手段。发明内容[0006]鉴于上述问题,提出了本发明以便提供一种克服上述问题或者至少部分地解决上述问题的一种防止进程被误杀的方法和相应地装置。[0007]依据本发明的一个方面,提供了一种防止进程被误杀的方法,包括:[0008]当操作系统中存在关闭进程的操作时,调用与管理关闭进程的特定系统进程挂钩的预设可执行文件;[0009]通过所述预设可执行文件判断被关闭的进程是否为预设的白名单中的进程;[0010]当所述被关闭的进程为所述预设的白名单中的进程时,通过所述预设可执行文件将所述进程的属性设置为不可关闭。[0011]可选地,在调用与管理关闭进程的特定系统进程挂钩的预设可执行文件之前,所述方法还包括:[0012]向操作系统中注入所述预设可执行文件,将所述预设可执行文件与所述特定系统进程挂钩。[0013]可选地,所述向操作系统中注入预设可执行文件,包括:[0014]通过静态注入或动态注入的方式向操作系统中注入预设可执行文件。[0015]可选地,所述通过静态注入的方式向操作系统中注入预设可执行文件,将预设可执行文件与特定系统进程挂钩,包括:[0016]在所述操作系统中添加所述预设可执行文件,并修改所述特定系统进程对应的程序文件,在所述特定系统进程对应的程序文件中加入指向所述预设可执行文件的地址。[0017]可选地,所述通过动态注入的方式向操作系统中注入预设可执行文件,包括:[0018]通过Ptrace函数向操作系统中注入预设可执行文件。[0019]可选地,所述通过Ptrace函数向操作系统中注入预设可执行文件,将预设可执行文件与特定系统进程挂钩,包括:[0020]在Ptrace函数中指定特定系统进程;[0021]通过所述Ptrace函数获取所述特定系统进程的寄存器;[0022]通过所述Ptrace函数修改所述寄存器,使所述寄存器中的地址指向预设地址;[0023]通过所述Ptrace函数在所述预设地址对应的地址空间写入所述预设可执行文件。[0024]可选地,在所述向操作系统中注入预设可执行文件之前,所述方法还包括:[0025]获取所述操作系统的ROOT权限。[0026]可选地,在所述调用与管理关闭进程的特定系统进程挂钩的预设可执行文件之前,所述方法还包括:[0027]检测所述操作系统中是否存在任意一个进程的调度组变量被标记为预设值;[0028]其中,进程的调度组变量被标记为预设值为所述进程即将被所述操作系统执行关闭操作的标记。[0029]可选地,所述调用与管理关闭进程的特定系统进程挂钩的预设可执行文件,包括:[0030]通过Ptrace函数修改所述寄存器的方式执行所述与管理关闭进程的特定系统进程挂钩的预设可执行文件;[0031]或者,[0032]通过预设编译器套件的预编译指令执行所述与管理关闭进程的特定系统进程挂钩的预设可执行文件;[0033]或者,[0034]通过预设编程语言的全局对象初始化操作执行所述与管理关闭进程的特定系统进程挂钩的预设可执行文件。[0035]可选地,在所述向操作系统中注入预设可执行文件之前,所述方法还包括:[0036]获取所述操作系统的预设环境变量;[0037]其中,所述预设环境变量为JNIEnv。[0038]可选地,所述向操作系统中注入预设可执行文件,包括:[0039]通过JAVA本地接口JNI以及环境变量JNIEnv,执行向操作系统中注入预设可执行文件的操作。[0040]可选地,所述特定系统进程为ActivityManagerService进程;[0041]所述预设可执行文件为动态链接库S0文件;[0042]所述调度组变量为curSchedG;roup;[0043]所述预设值为Process•THREAD_GROUP_BG_NONINTERACTIVE〇[0044]依据本发明的一个方面,还提供了一种防止进程被误杀的装置,包括:[0045]调用模块,适于当所述操作系统中存在关闭进程的操作时,调用与管理关闭进程的特定系统进程挂钩的预设可执行文件;[0046]判断模块,适于通过所述预设可执行文件判断被关闭的进程是否为预设的白名单中的进程;[0047]禁止模块,适于当所述被关闭的进程为所述预设的白名单中的进程时,通过所述预设可执行文件将所述进程的属性设置为不可关闭。[0048]可选地,所述装置还包括:[0049]注入模块,适于在调用与管理关闭进程的特定系统进程挂钩的预设可执行文件之前,向操作系统中注入所述预设可执行文件,将所述预设可执行文件与所述特定系统进程挂钩。[0050]可选地,所述注入模块具体适于按照如下方式向操作系统中注入预设可执行文件:[0051]通过静态注入或动态注入的方式向操作系统中注入预设可执行文件。[0052]可选地,所述注入模块具体适于按照如下方式通过静态注入的方式向操作系统中注入预设可执行文件,将预设可执行文件与特定系统进程挂钩:[0053]在所述操作系统中添加所述预设可执行文件,并修改所述特定系统进程对应的程序文件,在所述特定系统进程对应的程序文件中加入指向所述预设可执行文件的地址。[0054]可选地,所述注入模块具体适于按照如下方式通过动态注入的方式向操作系统中注入预设可执行文件:[0055]通过Ptrace函数向操作系统中注入预设可执行文件。[0056]可选地,所述注入模块具体,包括:[0057]进程指定单元,适于在Ptrace函数中指定特定系统进程;[0058]寄存器读取单元,适于通过所述Ptrace函数获取所述特定系统进程的寄存器;[0059]寄存器修改单元,适于通过所述Ptrace函数修改所述寄存器,使所述寄存器中的地址指向预设地址;[0060]文件写入单元,适于通过所述Ptrace函数在所述预设地址对应的地址空间写入所述预设可执行文件。[0061]可选地,所述装置还包括:[0062]权限获取模块,适于在向操作系统中注入预设可执行文件之前,获取所述操作系统的ROOT权限。[0063]可选地,所述装置还包括:[0064]检测模块,适于在调用与管理关闭进程的特定系统进程挂钩的预设可执行文件之前,检测所述操作系统中是否存在任意一个进程的调度组变量被标记为预设值;[0065]其中,进程的调度组变量被标记为预设值为所述进程即将被所述操作系统执行关闭操作的标记。[0066]可选地,所述调用模块适于按照如下方式调用与管理关闭进程的特定系统进程挂钩的预设可执行文件:[0067]通过Ptrace函数修改所述寄存器的方式执行所述与管理关闭进程的特定系统进程挂钩的预设可执行文件;[0068]或者,[0069]通过预设编译器套件的预编译指令执行所述与管理关闭进程的特定系统进程挂钩的预设可执行文件;[0070]或者,[0071]通过预设编程语言的全局对象初始化操作执行所述与管理关闭进程的特定系统进程挂钩的预设可执行文件。[0072]可选地,所述装置还包括:[0073]环境变量获取模块,适于在向操作系统中注入预设可执行文件之前,获取所述操作系统的预设环境变量;[0074]其中,所述预设环境变量为JNIEnv。[0075]可选地,所述注入模块适于按照如下方式向操作系统中注入预设可执行文件:[0076]通过JAVA本地接口JNI以及环境变量JNIEnv,执行向操作系统中注入预设可执行文件的操作。[0077]可选地,所述特定系统进程为ActivityManagerService进程;[0078]所述预设可执行文件为动态链接库S0文件;[0079]所述调度组变量为curSchedGroup;[0080]所述预设值为Process•THREAD_GROUP_BG_NONINTERACTIVE〇[0081]本发明提供了一种防止进程被误杀的方法和装置,通过监测到操作系统中存在关闭进程的操作时,调用与管理关闭进程的特定系统进程挂钩的预设可执行文件,该预设可执行文件判断被关闭的进程是否为预设的白名单中的进程,当该被关闭的进程为预设的白名单中的进程时,通过该预设可执行文件将该进程的属性设置为不可关闭,从而避免白名单中的进程被误杀,解决了目前操作系统中用户需求的必要进程可能被误杀的问题。[0082]上述说明仅是本发明技术方案的概述,为了能够更清楚了解本发明的技术手段,而可依照说明书的内容予以实施,并且为了让本发明的上述和其它目的、特征和优点能够更明显易懂,以下特举本发明的具体实施方式。[0083]根据下文结合附图对本发明具体实施例的详细描述,本领域技术人员将会更加明了本发明的上述以及其他目的、优点和特征。附图说明[0084]通过阅读下文优选实施方式的详细描述,各种其他的优点和益处对于本领域普通技术人员将变得清楚明了。附图仅用于示出优选实施方式的目的,而并不认为是对本发明的限制。而且在整个附图中,用相同的参考符号表示相同的部件。在附图中:[0085]图1是本发明一个实施例提供的一种防止进程被误杀的方法流程图;[0086]图2是本发明一个实施例提供的一种防止进程被误杀的具体方法流程图;[0087]图3是本发明一个实施例提供的一种防止进程被误杀的装置结构框图。具体实施方式[0088]下面将参照附图更详细地描述本公开的示例性实施例。虽然附图中显示了本公开的示例性实施例,然而应当理解,可以以各种形式实现本公开而不应该被这里阐述的实施例所限制。相反,提供这些实施例是为了能够透彻地理解本公开,并且能够将本公开的范围完整的传达给本领域的技术人员。t〇〇89]实施例一[0090]本发明实施例提供了一种防止进程被误杀的方法。其可以实现在终端设备中,使得用户需求的应用程序的进程不被操作系统所误杀。例如,本实施例中的终端设备可以为PCPersonalComputer,个人计算机),手机,平板、手持电脑等用户移动终端设备。[0091]图1是本实施例提供的一种防止进程被误杀的方法流程图。该方法具体包括步骤S102至步骤S106。[0092]S102:当操作系统中存在关闭进程的操作时,调用与管理关闭进程的特定系统进程挂钩的预设可执行文件。[0093]S104:通过预设可执行文件判断被关闭的进程是否为预设的白名单中的进程。[0094]S106:当被关闭的进程为预设的白名单中的进程时,通过预设可执行文件将进程的属性设置为不可关闭。[0095]本发明提供了一种防止进程被误杀的方法,通过监测到操作系统中存在关闭进程的操作时,调用与管理关闭进程的特定系统进程挂钩的预设可执行文件,该预设可执行文件判断被关闭的进程是否为预设的白名单中的进程,当该被关闭的进程为预设的白名单中的进程时,通过该预设可执行文件将该进程的属性设置为不可关闭,从而避免白名单中的进程被误杀,解决了目前操作系统中用户需求的必要进程可能被误杀的问题。[0096]实施例二[0097]本实施例为上述实施例一的一种具体应用场景,通过本实施例,能够更加清楚、具体地阐述本发明所提供的方法。[0098]应可理解,本发明并不限定终端设备的操作系统,只要可以应用本发明下述方案以达到防止进程被误关闭都适用于此。本领域技术人员在阅读本发明的基础上亦可以其他方式来实施本方法,其皆应涵盖在本发明的范围内。[0099]以下,将以Android操作系统下实现防止进程被误杀为例说明本发明的技术方案:[0100]图2是本实施例提供的一种防止进程被误杀的具体方法流程图。该方法共包括步骤S201至S207。[0101]首先执行步骤S201,获取操作系统的预设环境变量。[0102]其中,在本实施例中,由于以Android系统为例,该预设环境变量具体为JNIEnv。[0103]需要说明的是,由于在本发明中,需要将可执行文件SO文件注入到操作系统中,而在Android系统的机制中,其操作系统内核由C语言编译得到,而在其操作系统中运行的程序需使用Java语言。在向其操作系统中注入一个由C或C++编译得到的S0文件时,需要调用JNIJAVA本地接口)。因此,首先需要获取操作系统的环境变量JNIEnv才能对完成后续的注入操作。[0104]在获取JNIEnv后,即可通过JNI调用函数完成后续的注入过程。[0105]在获取预设的环境变量后,执行步骤S202,获取终端设备的ROOT权限。[0106]其中Android操作系统中,在进行注入操作时,优选地使用Ptrace函数对寄存器进行读取和修改操作。而该函数要求用户具备ROOT权限才能使用。[0107]在获取ROOT权限时,可以采取多种方式,并发明并不限定获取ROOT权限的方式,其中,本实施例示例性的提供一种root方法如下:[0108]当需要获取操作系统的ROOT权限时,终端向服务器发送其操作系统的版本;[0109]服务器根据终端的操作系统版本,在数据库中查询适于该终端的ROOT方案的可执行代码,并将该可执行代码发送给终端;[0110]终端执行服务器发送的可执行代码,以完成对于终端的ROOT操作。[0111]其中,服务器可保存有针对多种版本的操作系统的可执行代码,可执行代码可针对操作系统的漏洞获取ROOT权限。[0112]在获取ROOT权限后,执行步骤S203,向操作系统中注入预设可执行文件,并将该预设可执行与特点系统进程挂钩。[0113]其中,在Android操作系统中,由ActivityManagerService负责对操作系统中的进程的管理,进程的关闭操作即由该进程执行。[0114]为了更清楚的对本发明进行说明,下面对ActivityManagerService对于进程关闭操作的过程进行说明:[0115]当用户执行对操作系统中的进程进行关闭的操作时例如用户选择对内存进行清理),操作系统调用々:1:;[¥;^5^^1^801361^;[。6中的:163111^1^1]1〇¥611331^〇〇1^1方法,并执行操作如下:[0116]遍历操作系统中的全部进程:[0117]若为home进程例如系统进程),则执行continue操作,使进程保持运行;[0118]若进程的调度组变量为预设值,则对其执行removetask操作,即关闭该进程。[0119]其中,调度组变量为curSchedGroup;[0120]预设值为Process.THREAD_GR0UP_BG_N0NINTERACTIVE。[0121]本发明通过重新代码改变现有的ActivityManagerService对于进程的关闭方法实现防止进程被误杀,并将代码封装在预设可执行文件中,并将该预设可执行文件注入到操作系统中,与ActivityManagerService进程挂钩。[0122]其中,该挂钩也即H00K操作,预设可执行文件优选地为S0文件Android操作系统中的静态链接库文件)。[0123]下面具体说明向操作系统中注入预设可执行文件,并将该预设可执行与特点系统进程挂钩的方法。[0124]其中,向操作系统中注入预设可执行文件包括两种方式:[0125]⑴静态注入。[0126]静态注入,也即在操作系统中添加上述预设可执行文件,并修改特定系统进程对应的程序文件,在该特定系统进程对应的程序文件中加入指向上述预设可执行文件的地址。[0127]其中,添加上述预设可执行文件的方式可以为将预设可执行文件拷入到终端的指定路径下。[0128]对于在该特定系统进程对应的程序文件中加入指向上述预设可执行文件的地址,可通过多种现有工具进行实现,例如IDAInteractiveDisassembler,交互式反汇编工具)、JEB、ApkTool等。[0129]在完成静态注入后,操作系统通过进程ActivityManagerService进行进程关闭时,则会跳转到我们注入的S0文件中,进而执行我们重新实现的方案也即步骤S204到步骤S207,从而避免进程被误杀。[0130]2动态注入的方式。[0131]动态注入的方式可通过多种函数进行实现,在本发明中,以通过Ptrace函数实现为例进行说明。[0132]其中,Ptrace函数可实现在Linux下修改内存的功能,而Android操作系统采用Linux内核,因此可通过该函数对终端的内存进行修改,进而实现动态注入SO文件,具体方法如下:[0133]a在Ptrace函数中指定特定系统进程。[0134]具体地,也即跟踪特定系统进程,可以通过如下代码对特定系统进程执行ATTACH操作:[0135]ptracePTRACE_ATTACH,pid,NULL,0,ptracePTRACE_SYSCALL,pid,NULL,0[0136]其中,pid为特定系统进程的进程标识,上述代码可表示对进程标识为上述pid的进程执行ATTACH操作也即跟踪)。[0137]b获取特定系统进程的寄存器,并保存现场。[0138]具体地,可通过如下代码实现获取特定系统进程的寄存器,并保存现场的操作:[0139]ptracePTRACE_GETREGS,pid,NULL,regs[0140]其中,该代码标识对于进程标识如括号中所述的pid的进程执行GETREGS操作(获取寄存器中的值),并保存现场。[0141]保存现场,也即暂停该进程的运行。[0142]c通过特定系统进程中的mmap地址,获取特定系统进程中的dlsym和dlopen函数的地址。[0143]其中,mmap函数用于在操作系统中完成文件到内存中的映射,因此,通过其地址可以得到特定系统进程中的dlsym和dlopen函数。[0144]dlsym函数可用于根据动态链接库操作句柄与符号,返回符号对应的地址;[0145]dlopen函数可用于以指定模式打开指定的动态链接库文件,并返回一个句柄给dlsym的调用进程。[0146]通过该两个函数,ActivityManagerService进程可完成打开并调用动态链接库SO文件的操作,因此,获取这两个函数的地址后,即可开始注入SO文件。[0147]d注入预设可执行文件,SPS0文件。[0148]其中,该步骤d可通过如下代码实现:[0149]ptrace_dlopenprocess_hook.pid,remote_dlopen-addr,"自己的so")[0150]该代码用于将预设可执行文件SO文件注入到操作系统中,并与进程标识为括号中的pid的进程进行hook操作。[0151]e恢复寄存器。[0152]其中,恢复寄存器可通过如下代码实现:[0153]ptracePTRACE_SETREGS,pid,NULL,regs[0154]该代码标识对进程标识为括号中所述的pid的进程设置寄存器,在设置后即完成恢复,这时进程的线程也恢复也即恢复进程的运行)。[0155]需要说明的是,由于我们将特定系统进程中的dlopen函数的地址写入了我们自己的SO文件,因此,特定系统进程在执行dlopen函数打开动态链接库操作时,就会跳转到我们重新的代码上,执行我们重新设定的逻辑,而不再按照操作系统的原生逻辑进行进程的关闭操作。[0156]f结束对特定系统进程的跟踪。[0157]其中,注入与H00K操作结束,即可结束对特定系统进程的跟踪,可通过如下代码实现:[0158]ptracePTRACE_DETACH,pid,NULL,0[0159]PTRACE_DETACH即结束跟踪操作。[0160]在完成注入后,执行步骤S204,检查操作系统中是否存在任意一个进程的调度组变量被标记为预设值,如果是,执行步骤S205,如果不是,隔预设时间段后,再次返回执行本步骤S204。[0161]其中,调度组变量为curSchedGroup;[0162]预设值为Process•THREAD_GROUP_BG_NONINTERACTIVE。[0163]由步骤S202中对现有操作系统对进程的关闭方法可知,当调度组变量被标记为Process•THREAD_GROUP_BG_NONINTERACTIVE时,则会将该进程执行removetask操作(也即关闭)。[0164]需要说明的是,本步骤可以为一个轮询式的判断。例如,预设时间段可以为〇.5ms,每隔0.5ms执行步骤S204-次。[0165]因此,当存在上述状态的进程时,即可调用我们在S0文件中重新写入的逻辑,执行步骤S205,通过预设可执行文件判断该进程是否在预设的白名单中。[0166]其中,预设白名单中可以保存有不希望被误杀的进程的标识,例如:[0167]杀毒软件的进程、优化软件的进程、下载软件的进程、音乐软件的进程等等。[0168]需要说明的是,调用注入的可执行文件,可采用多种方式,包括但不限于如下:[0169]第一种,通过Ptrace函数修改寄存器的方式执行与管理关闭进程的特定系统进程挂钩的预设可执行文件;[0170]第二种,通过预设编译器套件的预编译指令执行与管理关闭进程的特定系统进程挂钩的预设可执行文件;[0171]其中,上述预设编译器套件可以为gcc;[0172]上述预编译指令可以为_attribute-_constructor_。[0173]第三种,通过预设编程语言的全局对象初始化操作执行与管理关闭进程的特定系统进程挂钩的预设可执行文件。[0174]当上述进程在白名单中时,执行步骤S206,将该进程的属性设置为不可关闭。[0175]其中,将该进程的属性设置为不可关闭,也即不对该进程执行removetask操作,在本实施例中,由于通过注入的SO文件改变了现有的进程关闭处理逻辑,因此,若进程在白名单中,可控制不关闭该进程。[0176]当上述进程不在白名单中时,执行步骤S207,关闭该进程。[0177]具体地,可通过操作系统现有的逻辑,对该进程执行removetask操作,将其关闭。[0178]本发明实施例提供了一种防止进程被误杀的方法,通过监测到操作系统中存在关闭进程的操作时,调用与管理关闭进程的特定系统进程挂钩的预设可执行文件,该预设可执行文件判断被关闭的进程是否为预设的白名单中的进程,当该被关闭的进程为预设的白名单中的进程时,通过该预设可执行文件将该进程的属性设置为不可关闭,从而避免白名单中的进程被误杀,解决了目前操作系统中用户需求的必要进程可能被误杀的问题。[0179]实施例三[0180]图3是本发明一个实施例提供的一种防止进程被误杀的装置结构框图。该装置300包括:[0181]调用模块310,适于当操作系统中存在关闭进程的操作时,调用与管理关闭进程的特定系统进程挂钩的预设可执行文件;[0182]判断模块320,适于通过预设可执行文件判断被关闭的进程是否为预设的白名单中的进程;_[0183]禁止模块330,适于当被关闭的进程为预设的白名单中的进程时,通过预设可执行文件将进程的属性设置为不可关闭。[0184]可选地,该装置300还包括:[0185]注入模块340,适于在调用与管理关闭进程的特定系统进程挂钩的预设可执行文件之前,向操作系统中注入预设可执行文件,将该预设可执行文件与特定系统进程挂钩。[0186]可选地,注入模块340具体适于按照如下方式向操作系统中注入预设可执行文件:[0187]通过静态注入或动态注入的方式向操作系统中注入预设可执行文件。[0188]可选地,注入模块340具体适于按照如下方式通过静态注入的方式向操作系统中注入预设可执行文件,将该预设可执行文件与特定系统进程挂钩:[0189]在操作系统中添加预设可执行文件,并修改特定系统进程对应的程序文件,在特定系统进程对应的程序文件中加入指向预设可执行文件的地址。[0190]可选地,注入模块340具体适于按照如下方式通过动态注入的方式向操作系统中注入预设可执行文件:[0191]通过Ptrace函数向操作系统中注入预设可执行文件。[0192]可选地,注入模块340包括:[0193]进程指定单元341,适于在Ptrace函数中指定特定系统进程;[0194]寄存器读取单元342,适于通过Ptrace函数获取特定系统进程的寄存器;[0195]寄存器修改单元343,适于通过Ptrace函数修改寄存器,使寄存器中的地址指向预设地址;[0196]文件写入单元344,适于通过Ptrace函数在预设地址对应的地址空间写入预设可执行文件。[0197]可选地,该装置300还包括:[0198]权限获取模块350,适于在向操作系统中注入预设可执行文件之前,获取操作系统的ROOT权限。[0199]可选地,该装置300还包括:[0200]检测模块360,适于在调用与管理关闭进程的特定系统进程挂钩的预设可执行文件之前,检测操作系统中是否存在任意一个进程的调度组变量被标记为预设值;[0201]其中,进程的调度组变量被标记为预设值为该进程即将被操作系统执行关闭操作的标记。[0202]可选地,调用模块310适于按照如下方式调用与管理关闭进程的特定系统进程挂钩的预设可执行文件:[0203]通过Ptrace函数修改寄存器的方式执行与管理关闭进程的特定系统进程挂钩的预设可执行文件;[0204]或者,[0205]通过预设编译器套件的预编译指令执行与管理关闭进程的特定系统进程挂钩的预设可执行文件;[0206]或者,[0207]通过预设编程语言的全局对象初始化操作执行与管理关闭进程的特定系统进程挂钩的预设可执行文件。[0208]可选地,该装置300还包括:[0209]环境变量获取模块370,适于在向操作系统中注入预设可执行文件之前,获取操作系统的预设环境变量;[0210]其中,预设环境变量为JNIEnv。[0211]可选地,注入模块340适于按照如下方式向操作系统中注入预设可执行文件:[0212]通过JAVA本地接口JNI以及环境变量JNIEnv,执行向操作系统中注入预设可执行文件的操作。[0213]可选地,上述特定系统进程为ActivityManagerService进程;[0214]上述预设可执行文件为动态链接库S0文件;[0215]上述调度组变量为curSchedGroup;[0216]上述预设值为Process.THREAD_GROUP_BG_NONINTERACTIVE。[0217]本发明提供了一种防止进程被误杀的装置,通过监测到操作系统中存在关闭进程的操作时,调用与管理关闭进程的特定系统进程挂钩的预设可执行文件,该预设可执行文件判断被关闭的进程是否为预设的白名单中的进程,当该被关闭的进程为预设的白名单中的进程时,通过该预设可执行文件将该进程的属性设置为不可关闭,从而避免白名单中的进程被误杀,解决了目前操作系统中用户需求的必要进程可能被误杀的问题。[0218]在此处所提供的说明书中,说明了大量具体细节。然而,能够理解,本发明的实施例可以在没有这些具体细节的情况下实践。在一些实例中,并未详细示出公知的方法、结构和技术,以便不模糊对本说明书的理解。[0219]类似地,应当理解,为了精简本公开并帮助理解各个发明方面中的一个或多个,在上面对本发明的示例性实施例的描述中,本发明的各个特征有时被一起分组到单个实施例、图、或者对其的描述中。然而,并不应将该公开的方法解释成反映如下意图:即所要求保护的本发明要求比在每个权利要求中所明确记载的特征更多的特征。更确切地说,如下面的权利要求书所反映的那样,发明方面在于少于前面公开的单个实施例的所有特征。因此,遵循具体实施方式的权利要求书由此明确地并入该具体实施方式,其中每个权利要求本身都作为本发明的单独实施例。[0220]本领域那些技术人员可以理解,可以对实施例中的设备中的模块进行自适应性地改变并且把它们设置在与该实施例不同的一个或多个设备中。可以把实施例中的模块或单元或组件组合成一个模块或单元或组件,以及此外可以把它们分成多个子模块或子单元或子组件。除了这样的特征和或过程或者单元中的至少一些是相互排斥之外,可以采用任何组合对本说明书包括伴随的权利要求、摘要和附图)中公开的所有特征以及如此公开的任何方法或者设备的所有过程或单元进行组合。除非另外明确陈述,本说明书包括伴随的权利要求、摘要和附图)中公开的每个特征可以由提供相同、等同或相似目的的替代特征来代替。[0221]此外,本领域的技术人员能够理解,尽管在此所述的一些实施例包括其它实施例中所包括的某些特征而不是其它特征,但是不同实施例的特征的组合意味着处于本发明的范围之内并且形成不同的实施例。例如,在权利要求书中,所要求保护的实施例的任意之一都可以以任意的组合方式来使用。[0222]本发明的各个部件实施例可以以硬件实现,或者以在一个或者多个处理器上运行的软件模块实现,或者以它们的组合实现。本领域的技术人员应当理解,可以在实践中使用微处理器或者数字信号处理器DSP来实现根据本发明实施例的防止进程被误杀的装置中的一些或者全部部件的一些或者全部功能。本发明还可以实现为用于执行这里所描述的方法的一部分或者全部的设备或者装置程序例如,计算机程序和计算机程序产品)。这样的实现本发明的程序可以存储在计算机可读介质上,或者可以具有一个或者多个信号的形式。这样的信号可以从因特网网站上下载得到,或者在载体信号上提供,或者以任何其他形式提供。[0223]应该注意的是上述实施例对本发明进行说明而不是对本发明进行限制,并且本领域技术人员在不脱离所附权利要求的范围的情况下可设计出替换实施例。在权利要求中,不应将位于括号之间的任何参考符号构造成对权利要求的限制。单词"包含"不排除存在未列在权利要求中的元件或步骤。位于元件之前的单词"一"或"一个"不排除存在多个这样的元件。本发明可以借助于包括有若干不同元件的硬件以及借助于适当编程的计算机来实现。在列举了若干装置的单元权利要求中,这些装置中的若干个可以是通过同一个硬件项来具体体现。单词第一、第二、以及第三等的使用不表示任何顺序。可将这些单词解释为名称。[0224]至此,本领域技术人员应认识到,虽然本文己详尽示出和描述了本发明的多个示例性实施例,但是,在不脱离本发明精神和范围的情况下,仍可根据本发明公开的内容直接确定或推导出符合本发明原理的许多其他变型或修改。因此,本发明的范围应被理解和认定为覆盖了所有这些其他变型或修改。[0225]本发明实施例提供了A1.-种防止进程被误杀的方法,包括:当操作系统中存在关闭进程的操作时,调用与管理关闭进程的特定系统进程挂钩的预设可执行文件;通过所述预设可执行文件判断被关闭的进程是否为预设的白名单中的进程;当所述被关闭的进程为所述预设的白名单中的进程时,通过所述预设可执行文件将所述进程的属性设置为不可关闭。A2.根据A1所述的方法,其中,在调用与管理关闭进程的特定系统进程挂钩的预设可执行文件之前,所述方法还包括:向操作系统中注入所述预设可执行文件,将所述预设可执行文件与所述特定系统进程挂钩。A3.根据A2所述的方法,其中,所述向操作系统中注入预设可执行文件,包括:通过静态注入或动态注入的方式向操作系统中注入预设可执行文件。A4.根据A3所述的方法,其中,所述通过静态注入的方式向操作系统中注入预设可执行文件,将预设可执行文件与特定系统进程挂钩,包括:在所述操作系统中添加所述预设可执行文件,并修改所述特定系统进程对应的程序文件,在所述特定系统进程对应的程序文件中加入指向所述预设可执行文件的地址。A5.根据A3所述的方法,其中,所述通过动态注入的方式向操作系统中注入预设可执行文件,包括:通过Ptrace函数向操作系统中注入预设可执行文件。A6•根据A5所述的方法,其中,所述通过Ptrace函数向操作系统中注入预设可执行文件,将预设可执行文件与特定系统进程挂钩,包括:在Ptrace函数中指定特定系统进程;通过所述Ptrace函数获取所述特定系统进程的寄存器;通过所述Ptrace函数修改所述寄存器,使所述寄存器中的地址指向预设地址;通过所述Ptrace函数在所述预设地址对应的地址空间写入所述预设可执行文件。A7.根据A2至A6任一项所述的方法,其中,在所述向操作系统中注入预设可执行文件之前,所述方法还包括:获取所述操作系统的ROOT权限。A8.根据A1至A7任一项所述的方法,其中,在所述调用与管理关闭进程的特定系统进程挂钩的预设可执行文件之前,所述方法还包括:检测所述操作系统中是否存在任意一个进程的调度组变量被标记为预设值;其中,进程的调度组变量被标记为预设值为所述进程即将被所述操作系统执行关闭操作的标记。A9.根据A1至A8任一项所述的方法,其中,所述调用与管理关闭进程的特定系统进程挂钩的预设可执行文件,包括:通过Ptrace函数修改所述寄存器的方式执行所述与管理关闭进程的特定系统进程挂钩的预设可执行文件;或者,通过预设编译器套件的预编译指令执行所述与管理关闭进程的特定系统进程挂钩的预设可执行文件;或者,通过预设编程语言的全局对象始化操作执行所述与管理关闭进程的特定系统进程挂钩的预设可执行文件。A10.根据A2至A9任一项所述的方法,其中,在所述向操作系统中注入预设可执行文件之前,所述方法还包括:获取所述操作系统的预设环境变量;其中,所述预设环境变量为JNIEniAll.根据A10所述的方法,其中,所述向操作系统中注入预设可执行文件,包括:通过JAVA本地接口JNI以及环境变量JNIEnv,执行向操作系统中注入预设可执行文件的操作。A12.根据A1至All任一项所述的方法,其中,所述特定系统进程为ActivityManagerService进程;所述预设可执行文件为动态链接库SO文件;所述调度组变量为curSchedGroup;所述预设值为Process•THREAD_GROUP_BG_NONINTERACTIVE。[0226]本发明实施例提供了B13.-种防止进程被误杀的装置,包括:调用模块,适于当所述操作系统中存在关闭进程的操作时,调用与管理关闭进程的特定系统进程挂钩的预设可执行文件;判断模块,适于通过所述预设可执行文件判断被关闭的进程是否为预设的白名单中的进程;禁止模块,适于当所述被关闭的进程为所述预设的白名单中的进程时,通过所述预设可执行文件将所述进程的属性设置为不可关闭。B14.根据B13所述的装置,其中,所述装置还包括:注入模块,适于在调用与管理关闭进程的特定系统进程挂钩的预设可执行文件之前,向操作系统中注入所述预设可执行文件,将所述预设可执行文件与所述特定系统进程挂钩。B15.根据B14所述的装置,其中,所述注入模块具体适于按照如下方式向操作系统中注入预设可执行文件:通过静态注入或动态注入的方式向操作系统中注入预设可执行文件。B16.根据B15所述的装置,其中,所述注入模块具体适于按照如下方式通过静态注入的方式向操作系统中注入预设可执行文件,将预设可执行文件与特定系统进程挂钩:在所述操作系统中添加所述预设可执行文件,并修改所述特定系统进程对应的程序文件,在所述特定系统进程对应的程序文件中加入指向所述预设可执行文件的地址。B17.根据B15所述的装置,其中,所述注入模块具体适于按照如下方式通过动态注入的方式向操作系统中注入预设可执行文件:通过Ptrace函数向操作系统中注入预设可执行文件。B18.根据B17所述的装置,其中,所述注入模块具体,包括:进程指定单元,适于在Ptrace函数中指定特定系统进程;寄存器读取单元,适于通过所述Ptrace函数获取所述特定系统进程的寄存器;寄存器修改单元,适于通过所述Ptrace函数修改所述寄存器,使所述寄存器中的地址指向预设地址;文件写入单元,适于通过所述Ptrace函数在所述预设地址对应的地址空间写入所述预设可执行文件。B19.根据B14至B18任一项所述的装置,其中,所述装置还包括:权限获取模块,适于在向操作系统中注入预设可执行文件之前,获取所述操作系统的ROOT权限。B20•根据B13至B19任一项所述的装置,其中,所述装置还包括:检测模块,适于在调用与管理关闭进程的特定系统进程挂钩的预设可执行文件之前,检测所述操作系统中是否存在任意一个进程的调度组变量被标记为预设值;其中,进程的调度组变量被标记为预设值为所述进程即将被所述操作系统执行关闭操作的标记。B21.根据B13至B20任一项所述的装置,其中,所述调用模块适于按照如下方式调用与管理关闭进程的特定系统进程挂钩的预设可执行文件:通过Ptrace函数修改所述寄存器的方式执行所述与管理关闭进程的特定系统进程挂钩的预设可执行文件;或者,通过预设编译器套件的预编译指令执行所述与管理关闭进程的特定系统进程挂钩的预设可执行文件;或者,通过预设编程语言的全局对象初始化操作执行所述与管理关闭进程的特定系统进程挂钩的预设可执行文件。B22•根据B14至B21任一项所述的装置,其中,所述装置还包括:环境变量获取模块,适于在向操作系统中注入预设可执行文件之前,获取所述操作系统的预设环境变量;其中,所述预设环境变量为JNIEI1VOB23.根据B22所述的装置,其中,所述注入模块适于按照如下方式向操作系统中注入预设可执行文件:通过JAVA本地接口JNI以及环境变量JNIEnv,执行向操作系统中注入预设可执行文件的操作。B24.根据B13至B23任一项所述的装置,其中,所述特定系统进程为ActivityManagerService进程;所述预设可执行文件为动态链接库SO文件;所述调度组变量为curSchedGroup;所述预设值为Process•THREAD_GROUP_BG_NONINTERACTIVE。

权利要求:1.一种防止进程被误杀的方法,包括:检测操作系统中是否存在任意一个进程的调度组变量被标记为预设值,其中,进程的调度组变量被标记为预设值为所述进程即将被所述操作系统执行关闭操作的标记;当操作系统中存在关闭进程的操作时,调用与管理关闭进程的特定系统进程挂钩的预设可执行文件;通过所述预设可执行文件判断被关闭的进程是否为预设的白名单中的进程;当所述被关闭的进程为所述预设的白名单中的进程时,通过所述预设可执行文件将所述进程的属性设置为不可关闭。2.根据权利要求1所述的方法,其中,在所述调用与管理关闭进程的特定系统进程挂钩的预设可执行文件之前,所述方法还包括:向操作系统中注入所述预设可执行文件,将所述预设可执行文件与所述特定系统进程挂钩。3.根据权利要求2所述的方法,其中,所述向操作系统中注入预设可执行文件,包括:通过静态注入或动态注入的方式向操作系统中注入预设可执行文件。4.根据权利要求3所述的方法,其中,所述通过静态注入的方式向操作系统中注入预设可执行文件,将预设可执行文件与特定系统进程挂钩,包括:在所述操作系统中添加所述预设可执行文件,并修改所述特定系统进程对应的程序文件,在所述特定系统进程对应的程序文件中加入指向所述预设可执行文件的地址。5.根据权利要求3所述的方法,其中,所述通过动态注入的方式向操作系统中注入预设可执行文件,包括:通过Ptrace函数向操作系统中注入预设可执行文件。6.根据权利要求5所述的方法,其中,所述通过Ptrace函数向操作系统中注入预设可执行文件,将预设可执行文件与特定系统进程挂钩,包括:在Ptrace函数中指定特定系统进程;通过所述Ptrace函数获取所述特定系统进程的寄存器;通过所述Ptrace函数修改所述寄存器,使所述寄存器中的地址指向预设地址;通过所述Ptrace函数在所述预设地址对应的地址空间写入所述预设可执行文件。7.根据权利要求2至6任一项所述的方法,其中,在所述向操作系统中注入预设可执行文件之前,所述方法还包括:获取所述操作系统的ROOT权限。8.根据权利要求1至6任一项所述的方法,其中,所述调用与管理关闭进程的特定系统进程挂钩的预设可执行文件,包括:通过Ptrace函数修改所述寄存器的方式执行所述与管理关闭进程的特定系统进程挂钩的预设可执行文件;或者,通过预设编译器套件的预编译指令执行所述与管理关闭进程的特定系统进程挂钩的预设可执行文件;或者,通过预设编程语言的全局对象始化操作执行所述与管理关闭进程的特定系统进程挂钩的预设可执行文件。9.根据权利要求2至6任一项所述的方法,其中,在所述向操作系统中注入预设可执行文件之前,所述方法还包括:获取所述操作系统的预设环境变量;其中,所述预设环境变量为JNIEnv。10.根据权利要求9所述的方法,其中,所述向操作系统中注入预设可执行文件,包括:通过JAVA本地接口JNI以及环境变量JNIEnv,执行向操作系统中注入预设可执行文件的操作。11.根据权利要求1至6任一项所述的方法,其中,所述特定系统进程为ActivityManagerService进程;所述预设可执行文件为动态链接库SO文件;所述调度组变量为curSchedGroup;所述预设值为Process•THREAD_GROUP_BG_NONINTERACTIVE〇12.-种防止进程被误杀的装置,包括:检测模块,适于检测操作系统中是否存在任意一个进程的调度组变量被标记为预设值,其中,进程的调度组变量被标记为预设值为所述进程即将被所述操作系统执行关闭操作的标记;调用模块,适于当所述操作系统中存在关闭进程的操作时,调用与管理关闭进程的特定系统进程挂钩的预设可执行文件;判断模块,适于通过所述预设可执行文件判断被关闭的进程是否为预设的白名单中的进程;禁止模块,适于当所述被关闭的进程为所述预设的白名单中的进程时,通过所述预设可执行文件将所述进程的属性设置为不可关闭。13.根据权利要求12所述的装置,其中,所述装置还包括:注入模块,适于在调用与管理关闭进程的特定系统进程挂钩的预设可执行文件之前,向操作系统中注入所述预设可执行文件,将所述预设可执行文件与所述特定系统进程挂钩。14.根据权利要求13所述的装置,其中,所述注入模块具体适于按照如下方式向操作系统中注入预设可执行文件:通过静态注入或动态注入的方式向操作系统中注入预设可执行文件。15.根据权利要求14所述的装置,其中,所述注入模块具体适于按照如下方式通过静态注入的方式向操作系统中注入预设可执行文件,将预设可执行文件与特定系统进程挂钩:在所述操作系统中添加所述预设可执行文件,并修改所述特定系统进程对应的程序文件,在所述特定系统进程对应的程序文件中加入指向所述预设可执行文件的地址。16.根据权利要求14所述的装置,其中,所述注入模块具体适于按照如下方式通过动态注入的方式向操作系统中注入预设可执行文件:通过Ptrace函数向操作系统中注入预设可执行文件。17.根据权利要求16所述的装置,其中,所述注入模块具体包括:进程指定单元,适于在Ptrace函数中指定特定系统进程;寄存器读取单元,适于通过所述Ptrace函数获取所述特定系统进程的寄存器;寄存器修改单元,适于通过所述Ptrace函数修改所述寄存器,使所述寄存器中的地址指向预设地址;文件写入单元,适于通过所述Ptrace函数在所述预设地址对应的地址空间写入所述预设可执行文件。18.根据权利要求12至17任一项所述的装置,其中,所述装置还包括:权限获取模块,适于在向操作系统中注入预设可执行文件之前,获取所述操作系统的ROOT权限。19.根据权利要求12至17任一项所述的装置,其中,所述调用模块适于按照如下方式调用与管理关闭进程的特定系统进程挂钩的预设可执行文件:通过Ptrace函数修改所述寄存器的方式执行所述与管理关闭进程的特定系统进程挂钩的预设可执行文件;或者,通过预设编译器套件的预编译指令执行所述与管理关闭进程的特定系统进程挂钩的预设可执行文件;或者,通过预设编程语言的全局对象初始化操作执行所述与管理关闭进程的特定系统进程挂钩的预设可执行文件。20.根据权利要求13至17任一项所述的装置,其中,所述装置还包括:环境变量获取模块,适于在向操作系统中注入预设可执行文件之前,获取所述操作系统的预设环境变量;其中,所述预设环境变量为JNIEnv。21.根据权利要求20所述的装置,其中,所述注入模块适于按照如下方式向操作系统中注入预设可执行文件:通过JAVA本地接口JNI以及环境变量JNIEnv,执行向操作系统中注入预设可执行文件的操作。22.根据权利要求12至17任一项所述的装置,其中,所述特定系统进程为ActivityManagerService进程;所述预设可执行文件为动态链接库SO文件;所述调度组变量为curSchedGroup;所述预设值为Process.THREAD_GROUP_BG_NONINTERACTIVE〇

百度查询: 北京奇虎科技有限公司;奇智软件(北京)有限公司 防止进程被误杀的方法和装置

免责声明
1、本报告根据公开、合法渠道获得相关数据和信息,力求客观、公正,但并不保证数据的最终完整性和准确性。
2、报告中的分析和结论仅反映本公司于发布本报告当日的职业理解,仅供参考使用,不能作为本公司承担任何法律责任的依据或者凭证。