避免进程被注入的方法和装置制造方法

文档序号:6625624阅读:867来源:国知局
避免进程被注入的方法和装置制造方法
【专利摘要】本发明提出一种避免进程被注入的方法和装置,该方法包括接收应用程序的启动参数;根据所述启动参数判断所述应用程序是否为需要保护的应用程序;如果是,将所述启动参数发送给预先创建的私有进程,使得所述私有进程根据所述启动参数孵化得到所述应用程序,其中,所述私有进程是未被注入的孵化载体。该方法能够提高避免进程间注入的效果。
【专利说明】避免进程被注入的方法和装置

【技术领域】
[0001]本发明涉及安全【技术领域】,尤其涉及一种避免进程被注入的方法和装置。

【背景技术】
[0002]进程注入是指一个应用程序进程将自己的模块通过调试等方式,插入到另一个应用程序进程中然后执行,这样就可以任意劫持对方应用程序的运行流程,窃取其内存数据。在Android系统中,应用程序进程都是由Zygote进程孵化(fork)的,所以注入Zygote进程是目前通用的注入方法,一旦Zygote进程被注入,之后由Zygote进程孵化的所有进程都被注入。
[0003]相关技术中,可以对被注入的Zygote进程进行修复,以避免进程间注入。但是,采用修复Zygote进程的方式,得到的效果并不理想。


【发明内容】

[0004]本发明旨在至少在一定程度上解决相关技术中的技术问题之一。
[0005]为此,本发明的一个目的在于提出一种避免进程被注入的方法,该方法可以提高避免进程间注入的效果。
[0006]本发明的另一个目的在于提出一种避免进程被注入的装置。
[0007]为达到上述目的,本发明第一方面实施例提出的避免进程被注入的方法,包括:接收应用程序的启动参数;根据所述启动参数判断所述应用程序是否为需要保护的应用程序;如果是,将所述启动参数发送给预先创建的私有进程,使得所述私有进程根据所述启动参数孵化得到所述应用程序,其中,所述私有进程是未被注入的孵化载体。
[0008]本发明第一方面实施例提出的避免进程被注入的方法,通过在应用程序是需要保护的应用程序时,由私有进程完成该应用程序的孵化,由于私有进程是未被注入的,因此可以避免该应用程序的进程被注入,并且,本实施例采用建立私有进程的方式,而不是修复的方式,可以提高避免进程被注入的效果。
[0009]为达到上述目的,本发明第二方面实施例提出的避免进程被注入的装置,包括:接收模块,用于接收应用程序的启动参数;判断模块,用于根据所述启动参数判断所述应用程序是否为需要保护的应用程序;发送模块,用于在所述应用程序是需要保护的应用程序时,将所述启动参数发送给预先创建的私有进程,使得所述私有进程根据所述启动参数孵化得到所述应用程序,其中,所述私有进程是未被注入的孵化载体。
[0010]本发明第二方面实施例提出的避免进程被注入的装置,通过在应用程序是需要保护的应用程序时,由私有进程完成该应用程序的孵化,由于私有进程是未被注入的,因此可以避免该应用程序的进程被注入,并且,本实施例采用建立私有进程的方式,而不是修复的方式,可以提高避免进程被注入的效果。
[0011]本发明附加的方面和优点将在下面的描述中部分给出,部分将从下面的描述中变得明显,或通过本发明的实践了解到。

【专利附图】

【附图说明】
[0012]本发明上述的和/或附加的方面和优点从下面结合附图对实施例的描述中将变得明显和容易理解,其中:
[0013]图1是相关技术中应用程序启动的流程不意图;
[0014]图2是相关技术中进程注入的流程示意图;
[0015]图3是本发明一实施例提出的避免进程被注入的方法的流程示意图;
[0016]图4是本发明实施例中一种避免进程被注入的具体实现示意图;
[0017]图5是本发明另一实施例提出的避免进程被注入的方法的流程示意图;
[0018]图6是本发明另一实施例提出的避免进程被注入的实现装置;
[0019]图7是本发明另一实施例提出的避免进程被注入的实现装置。

【具体实施方式】
[0020]下面详细描述本发明的实施例,所述实施例的示例在附图中示出,其中自始至终相同或类似的标号表示相同或类似的元件或具有相同或类似功能的元件。下面通过参考附图描述的实施例是示例性的,仅用于解释本发明,而不能理解为对本发明的限制。相反,本发明的实施例包括落入所附加权利要求书的精神和内涵范围内的所有变化、修改和等同物。
[0021]为了更好的理解本发明,首先对应用程序(app)的启动流程进行描述。
[0022]以Android平台为例,参见图1,相关技术中,Android平台下,应用程序(app)的启动流程包括:
[0023]Sll:启动器启动app,并将app的启动参数发送给服务线程。
[0024]启动器可以具体可以是指launcher。服务线程可以具体是指system_server进程中的 ActivityManagerService 服务线程。
[0025]S12:服务线程将app的启动参数发送给孵化载体。
[0026]其中,孵化载体可以具体是指Zygote进程。Zygote进程可以监听socket连接,月艮务进程通过socket连接将启动参数发送给Zygote进程。
[0027]S13:孵化载体完成app孵化。
[0028]其中,Zygote进程接收到启动参数后,可以解析参数并孵化相应app的进程。之后,Zygote进程可以将孵化得到的新进程的进程标识(Process Identifier, PID)等数据返回给 ActivityManagerService, ActivityManagerService 收到 PID 等数据后,在该进程内启动Activity Tread,进而完成app的启动。
[0029]相关技术中,参见图2,当Zygote进程被注入后,其孵化的应用程序的进程也被注入。
[0030]为了避免进程被注入,本发明给出如下实施例。
[0031]图3是本发明一实施例提出的避免进程被注入的方法的流程示意图,该方法包括:
[0032]S31:接收应用程序的启动参数;
[0033]其中,参见图4,可以在Zygote进程和ActivityManagerService (以下简称AMS)之间设置sygote桥(sygoteBridge),在sygoteBridge中创建socket服务端,且修改AMS中的socket客户端,使得修改后的socket客户端重定向连接到sygoteBridge中创建的socket服务端。从而sygoteBridge可以接收服务线程ActivityManagerService通过socket发送的启动参数。
[0034]S32:根据所述启动参数判断所述应用程序是否为需要保护的应用程序;
[0035]其中,参见图4,安全入口设备中可以预先配置需要保护的应用程序的信息列表,该信息列表中包括:应用程序包名(app包名)和用户标识(用户ID),另外,启动参数中可以包括:app包名和用户ID,
[0036]当接收的启动参数中包含的app包名和用户ID与预先配置的需要保护的应用程序的信息列表中保存的app包名和用户ID—致时,可以判断出该应用程序是需要保护的应用程序。
[0037]S33:如果是,将所述启动参数发送给预先创建的私有进程,使得所述私有进程根据所述启动参数孵化得到所述应用程序,其中,所述私有进程是未被注入的孵化载体。
[0038]其中,私有进程可以称为Sygote进程,意为safe Zygote。Sygote进程在本质上的进程内存空间与Zygote几乎一样,它的目的在于提供一个新的干净的孵化载体,让需要保护的app由其孵化。
[0039]参见图4,当应用程序是需要保护的应用程序时,可以将启动参数发送给Sygote进程,由Sygote进程完成app孵化。
[0040]另一方面,参见图4,当启动参数对应的应用程序不是需要保护的app时,可以将启动参数发送给原有的Zygote进程,由Zygote进程完成相应孵化,此时会存在进程被注入问题。
[0041]本实施例通过在应用程序是需要保护的应用程序时,由私有进程完成该应用程序的孵化,由于私有进程是未被注入的,因此可以避免该应用程序的进程被注入,并且,本实施例采用建立私有进程的方式,而不是修复的方式,可以提高避免进程被注入的效果。
[0042]图5是本发明另一实施例提出的避免进程被注入的方法的流程示意图,该方法包括:
[0043]S51:创建私有进程,并创建该私有进程的守护进程。
[0044]以android平台为例,私有进程可以称为Sygote进程。
[0045]其中,可以创建一个新的zygote进程,将该新的zygote进程确定为Sygote进程。
[0046]具体的,Zygote进程由执行Android系统中的/system/bin/app_process文件来创建。为了能够创建新的zygote进程,本实施例可以编写一个私有的app_process,用该私有的app_process修改socket服务端的名字,例如修改后的名字为sygote,通过执行该私有的app_process创建Sygote进程。
[0047]Sygote进程创建时,可以同时创建一个守护进程。守护进程可以保护Sygote进程,避免Sygote进程被注入。
[0048]具体的,当创建守护进程后,可以用守护进程优先调试Sygote进程,并转发所有的Signal给Sygote进程。因为Sygote进程已经被守护进程调试了,所以其他进程就无法再去调试Sygote 了 ;同时因为守护进程转发了所有的signal给Sygote进程,所以Sygote进程可以正常运行。由于注入的前提是要调试,所以一旦Sygote被保护了避免调试,那么其他程序也就无法注入Sygote 了。
[0049]S52:设置需要保护的应用程序的参数。
[0050]设置的参数可以包括:app包名和用户ID。
[0051]S53:接收应用程序的启动参数。
[0052]安全入口设备可以接收服务线程ActivityManagerService通过socket发送的启动参数。
[0053]启动参数可以包括app包名和用户ID。
[0054]S54:根据所述启动参数判断所述应用程序是否为需要保护的应用程序,若是,执行S55,否则,执行56。
[0055]S55:将所述启动参数发送给预先创建的私有进程,使得所述私有进程根据所述启动参数孵化得到所述应用程序。
[0056]例如,将启动参数发送给Sygote进程,由Sygote进程完成app孵化。
[0057]S56:将启动参数发送给原有孵化载体,由原有孵化载体完成应用程序孵化。
[0058]例如,可以将启动参数发送给原有的Zygote进程,由Zygote进程完成相应孵化,此时会存在进程被注入问题。
[0059]本实施例通过在应用程序是需要保护的应用程序时,由私有进程完成该应用程序的孵化,由于私有进程是未被注入的,因此可以避免该应用程序的进程被注入,并且,本实施例采用建立私有进程的方式,而不是修复的方式,可以提高避免进程被注入的效果。另夕卜,本实施例通过创建守护进程,可以保证私有进程和由其孵化的应用程序避免被注入,进一步提高进程免注入效果。
[0060]图6是本发明另一实施例提出的避免进程被注入的实现装置,该装置60包括接收模块61、判断模块62和发送模块63。
[0061]接收模块61用于接收应用程序的启动参数;
[0062]其中,参见图4,可以在Zygote进程和ActivityManagerService (以下简称AMS)之间设置sygote桥(sygoteBridge),在sygoteBridge中创建socket服务端,且修改AMS中的socket客户端,使得修改后的socket客户端重定向连接到sygoteBridge中创建的socket服务端。从而sygoteBridge可以接收服务线程ActivityManagerService通过socket发送的启动参数。
[0063]判断模块62用于根据所述启动参数判断所述应用程序是否为需要保护的应用程序;
[0064]一个实施例中,所述启动参数中包含应用程序包名和用户标识,所述判断模块62具体用于:
[0065]获取预先保存的需要保护的应用程序的信息列表,所述信息列表中记录应用程序包名和对应的用户标识;
[0066]判断所述启动参数中包含的应用程序包名和用户标识,是否属于预先保存的所述信息列表;
[0067]如果属于,判断出所述应用程序是需要保护的应用程序。
[0068]其中,参见图4,安全入口方案对应的模块中可以预先配置需要保护的应用程序的信息列表,该信息列表中包括:应用程序包名(app包名)和用户标识(用户ID),另外,启动参数中可以包括:app包名和用户ID,
[0069]当接收的启动参数中包含的app包名和用户ID与预先配置的需要保护的应用程序的信息列表中保存的app包名和用户ID—致时,可以判断出该应用程序是需要保护的应用程序。
[0070]发送模块63用于在所述应用程序是需要保护的应用程序时,将所述启动参数发送给预先创建的私有进程,使得所述私有进程根据所述启动参数孵化得到所述应用程序,其中,所述私有进程是未被注入的孵化载体。
[0071]其中,私有进程可以称为Sygote进程,意为safe Zygote。Sygote进程在本质上的进程内存空间与Zygote几乎一样,它的目的在于提供一个新的干净的孵化载体,让需要保护的app由其孵化。
[0072]参见图4,当应用程序是需要保护的应用程序时,可以将启动参数发送给Sygote进程,由Sygote进程完成app孵化。
[0073]另一方面,参见图4,当启动参数对应的应用程序不是需要保护的app时,可以将启动参数发送给原有的Zygote进程,由Zygote进程完成相应孵化,此时会存在进程被注入问题。
[0074]一个实施例中,参见图7,该装置60还包括:
[0075]创建模块64,用于对应原有的孵化载体,创建新的进程,将所述新的进程确定为所述私有进程。
[0076]—个实施例中,所述方法应用在android平台,所述原有的孵化载体是zygote进程,所述创建模块具体用于:
[0077]创建新的zygote进程,将所述新的zygote进程确定为所述私有进程。
[0078]具体的,Zygote进程由执行Android系统中的/system/bin/app_process文件来创建。为了能够创建新的zygote进程,本实施例可以编写一个私有的app_process,用该私有的app_process修改socket服务端的名字,例如修改后的名字为sygote,通过执行该私有的app_process创建Sygote进程。
[0079]一个实施例中,所述创建模块64还用于:
[0080]创建所述私有进程的守护进程,所述守护进程用于避免所述私有进程被注入。
[0081]Sygote进程创建时,可以同时创建一个守护进程。守护进程可以保护Sygote进程,避免Sygote进程被注入。
[0082]一个实施例中,参见图7,该装置60还包括:
[0083]调试模块65,用于采用所述守护进程调试所述私有进程。
[0084]具体的,当创建守护进程后,可以用守护进程优先调试Sygote进程,并转发所有的Signal给Sygote进程。因为Sygote进程已经被守护进程调试了,所以其他进程就无法再去调试Sygote 了 ;同时因为守护进程转发了所有的signal给Sygote进程,所以Sygote进程可以正常运行。由于注入的前提是要调试,所以一旦Sygote被保护了避免调试,那么其他程序也就无法注入Sygote 了。
[0085]本实施例通过在应用程序是需要保护的应用程序时,由私有进程完成该应用程序的孵化,由于私有进程是未被注入的,因此可以避免该应用程序的进程被注入,并且,本实施例采用建立私有进程的方式,而不是修复的方式,可以提高避免进程被注入的效果。另夕卜,本实施例通过创建守护进程,可以保证私有进程和由其孵化的应用程序避免被注入,进一步提高进程免注入效果。需要说明的是,在本发明的描述中,术语“第一”、“第二”等仅用于描述目的,而不能理解为指示或暗示相对重要性。此外,在本发明的描述中,除非另有说明,“多个”的含义是两个或两个以上。
[0086]流程图中或在此以其他方式描述的任何过程或方法描述可以被理解为,表示包括一个或更多个用于实现特定逻辑功能或过程的步骤的可执行指令的代码的模块、片段或部分,并且本发明的优选实施方式的范围包括另外的实现,其中可以不按所示出或讨论的顺序,包括根据所涉及的功能按基本同时的方式或按相反的顺序,来执行功能,这应被本发明的实施例所属【技术领域】的技术人员所理解。
[0087]应当理解,本发明的各部分可以用硬件、软件、固件或它们的组合来实现。在上述实施方式中,多个步骤或方法可以用存储在存储器中且由合适的指令执行系统执行的软件或固件来实现。例如,如果用硬件来实现,和在另一实施方式中一样,可用本领域公知的下列技术中的任一项或他们的组合来实现:具有用于对数据信号实现逻辑功能的逻辑门电路的离散逻辑电路,具有合适的组合逻辑门电路的专用集成电路,可编程门阵列(PGA),现场可编程门阵列(FPGA)等。
[0088]本【技术领域】的普通技术人员可以理解实现上述实施例方法携带的全部或部分步骤是可以通过程序来指令相关的硬件完成,所述的程序可以存储于一种计算机可读存储介质中,该程序在执行时,包括方法实施例的步骤之一或其组合。
[0089]此外,在本发明各个实施例中的各功能单元可以集成在一个处理模块中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个模块中。上述集成的模块既可以采用硬件的形式实现,也可以采用软件功能模块的形式实现。所述集成的模块如果以软件功能模块的形式实现并作为独立的产品销售或使用时,也可以存储在一个计算机可读取存储介质中。
[0090]上述提到的存储介质可以是只读存储器,磁盘或光盘等。
[0091]在本说明书的描述中,参考术语“一个实施例”、“一些实施例”、“示例”、“具体示例”、或“一些示例”等的描述意指结合该实施例或示例描述的具体特征、结构、材料或者特点包含于本发明的至少一个实施例或示例中。在本说明书中,对上述术语的示意性表述不一定指的是相同的实施例或示例。而且,描述的具体特征、结构、材料或者特点可以在任何的一个或多个实施例或示例中以合适的方式结合。
[0092]尽管上面已经示出和描述了本发明的实施例,可以理解的是,上述实施例是示例性的,不能理解为对本发明的限制,本领域的普通技术人员在本发明的范围内可以对上述实施例进行变化、修改、替换和变型。
【权利要求】
1.一种避免进程被注入的方法,其特征在于,包括: 接收应用程序的启动参数; 根据所述启动参数判断所述应用程序是否为需要保护的应用程序; 如果是,将所述启动参数发送给预先创建的私有进程,使得所述私有进程根据所述启动参数孵化得到所述应用程序,其中,所述私有进程是未被注入的孵化载体。
2.根据权利要求1所述的方法,其特征在于,还包括: 对应原有的孵化载体,创建新的进程,将所述新的进程确定为所述私有进程。
3.根据权利要求2所述的方法,其特征在于,所述方法应用在android平台,所述原有的孵化载体是zygote进程,所述对应原有的孵化载体,创建新的进程,将所述新的进程确定为所述私有进程,包括: 创建新的zygote进程,将所述新的zygote进程确定为所述私有进程。
4.根据权利要求2所述的方法,其特征在于,还包括: 创建所述私有进程的守护进程,所述守护进程用于避免所述私有进程被注入。
5.根据权利要求4所述的方法,其特征在于,所述创建所述私有进程的守护进程之后,所述方法包括: 采用所述守护进程调试所述私有进程。
6.根据权利要求1所述的方法,其特征在于,所述启动参数中包含应用程序包名和用户标识,所述根据所述启动参数判断所述应用程序是否为需要保护的应用程序,包括: 获取预先保存的需要保护的应用程序的信息列表,所述信息列表中记录应用程序包名和对应的用户标识; 判断所述启动参数中包含的应用程序包名和用户标识,是否属于预先保存的所述信息列表; 如果属于,判断出所述应用程序是需要保护的应用程序。
7.—种避免进程被注入的装置,其特征在于,包括: 接收模块,用于接收应用程序的启动参数; 判断模块,用于根据所述启动参数判断所述应用程序是否为需要保护的应用程序; 发送模块,用于在所述应用程序是需要保护的应用程序时,将所述启动参数发送给预先创建的私有进程,使得所述私有进程根据所述启动参数孵化得到所述应用程序,其中,所述私有进程是未被注入的孵化载体。
8.根据权利要求7所述的装置,其特征在于,还包括: 创建模块,用于对应原有的孵化载体,创建新的进程,将所述新的进程确定为所述私有进程。
9.根据权利要求8所述的装置,其特征在于,所述方法应用在android平台,所述原有的孵化载体是zygote进程,所述创建模块具体用于: 创建新的zygote进程,将所述新的zygote进程确定为所述私有进程。
10.根据权利要求8所述的装置,其特征在于,所述创建模块还用于: 创建所述私有进程的守护进程,所述守护进程用于避免所述私有进程被注入。
11.根据权利要求10所述的装置,其特征在于,还包括: 调试模块,用于采用所述守护进程调试所述私有进程。
12.根据权利要求7所述的装置,其特征在于,所述启动参数中包含应用程序包名和用户标识,所述判断模块具体用于: 获取预先保存的需要保护的应用程序的信息列表,所述信息列表中记录应用程序包名和对应的用户标识; 判断所述启动参数中包含的应用程序包名和用户标识,是否属于预先保存的所述信息列表; 如果属于,判断出所述应用程序是需要保护的应用程序。
【文档编号】G06F21/52GK104239781SQ201410441405
【公开日】2014年12月24日 申请日期:2014年9月1日 优先权日:2014年9月1日
【发明者】周荣誉, 张宇平 申请人:百度在线网络技术(北京)有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1