[0044] 下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动的前提下所获得的所有其他实施例,都属于本发明保护的范围。
[0045] 需要说明的是,在不冲突的情况下,本发明中的实施例及实施例中的特征可以相互组合。
[0046] 下面结合附图和具体实施例对本发明作进一步说明,但不作为本发明的限定。
[0047] 本发明基于如下发现:
[0048] 现有的Android系统中所有进程从根本上都是由init进程开启的,在Android系统init进程开启后会执行init.rc脚本,此脚本中有如下一段脚本代码:
[0049] Service zygote/system/bin/app_proces-Xzygote/system/bin--zygote--start-system-server,
[0050] 通过此脚本代码可以知init.rc脚本中会创建一个zygote进程。zygote进程是Android系统中最核心的进程,它会为每一个用户进程创建一个Dalvik虚拟机,通过Dalvik虚拟机来处理用户进程。zygote进程要执行的主程序是系统中的/system/bin/app_process,由此可知/system/bin/app_process是zygote进程的主体。采用zygote处理用户进程的流程都是在app_process中完成。如果app_process文件在系统中被替换成一个注册了一些系统接口对应的钩子函数的同名文件且执行,即可通过被替换的app_process中注册的钩子函数来截获系统接口,则会威胁到用户的个人隐私。所谓钩子函数就是钩住系统接口,简单来说就是系统在调用系统接口时被钩子函数截获,强行在调用系统接口的前后执行一些钩子函数自己的操作。在Android系统中Xposed框架由于其自身的特性容易被一些恶意程序所利用,通过Xposed框架会替换掉系统中的app_process文件,当Android系统开启,zygote进程执行已被替换了的app_process时,通过执行此app_process来加载XposedBridge.jar包,注册对应系统接口的钩子函数来实现对系统接口的截获,以获取用户的隐私信息,造成用户信息泄露。
[0051] 基于上述问题,本发明旨在提供一种防止app_process被替换的防止截获系统接口的系统及方法。
[0052] 如图1所示,一种防止截获系统接口的系统,应用于Android中,包括:
[0053] 一获取单元1,用以获取用户发送的执行指令;
[0054] 一判断单元2,连接获取单元1,用以判断用户是否为超级用户,以获取判断结果;
[0055] 一识别单元4,分别连接获取单元1和判断单元2,提供一预设条件,识别单元4用以根据判断结果将执行指令与预设条件进行匹配,以获取匹配结果;
[0056] 一处理单元5,分别连接判断单元2和识别单元4,用以根据判断结果和/或匹配结果,执行执行指令;或
[0057] 根据匹配结果停止执行执行指令。
[0058] 在本实施例中,通过判断单元2判断用户的权限,通过识别单元4识别执行指令的风险,以防止恶意程序截获系统接口。
[0059] 在优选的实施例中,执行指令包括执行主体和复数个参数;
[0060] 识别单元4将执行指令的执行主体与预设主体进行匹配;
[0061] 当不匹配时,处理单元5执行执行指令;
[0062] 当匹配时,识别单元4将复数个参数依次与预设参数进行匹配;
[0063] 当复数个参数均与预设参数不匹配时,处理单元5执行执行指令;
[0064] 当参数与预设参数匹配时,处理单元5停止执行执行指令。
[0065] 进一步地,预设主体可采用拷贝命令:cp,预设参数为app-process。
[0066] 在本实施例中,拷贝命令主要指将相同文件名的文件拷贝到需要替换的原文件名所在的地址中,以实现将原文件替换掉的目的,也可是通过移动等操作将相同文件名的文件替换。
[0067] 在Android系统中可通过拷贝指令来替换一个文件。拷贝文件的指令的格式一般都是由“命令主体参数1参数2..”来呈现。拷贝文件命令的格式为“命令主体,参数1,参数2..”其中“命令”为指令的主体,“参数1”和“参数2”为执行指令时传入的参数。当程序执行指令时会按照命令的流程来执行,其中会使用到传入的参数。比如Xposed框架中会将框架中的app_process文件替换掉Android系统中/system/bin/目录下的原app_process文件。
这种替换是通过执行替换文件的命令来实现的。通过拷贝可以作为替换命令的一种方法完成替换文件,命令的格式如下:
[0068] cp app_process/system/bin/,
[0069] 在上述的命令中“cp”为拷贝文件命令的主体,实质是一段程序。“app_process”作为传入命令主体的参数1是Xposed框架中的用来替换系统/system/bin/app_process的文件。“system/bin/”作为传入命令主体的参数2是确定app_process拷贝的目标目录。当上述指令被执行后Xposed框架中的app_process将会把系统中/system/bin/目录下原app_process替换掉,在app_process文件被替换后,Android系统开启时由init进程创建zygote进程,被替换的app_process开始运行,此时这个app_process已不是原系统的app_process了,它会加载一些jar包,且完成对所有注册钩子函数的系统接口的截获。
[0070] 在本实施例中,采用识别单元4将执行指令与拷贝命令:cp进行匹配,以识别执行指令是否为拷贝指令,当不是拷贝指令时可执行相应的执行指令;当是拷贝指令时,需将执行指令中的参数与app-process进行匹配,以识别拷贝指令是否要替换掉系统/system/bin/app_process的文件,为了截获系统接口,若匹配,则停止执行拷贝指令;若不匹配,则继续执行拷贝指令。从而达到防止恶意程序截获系统接口的目的。
[0071] 在优选的实施例中,还包括:
[0072] 一存储单元3,分别连接获取单元1和识别单元4,用以将复数个参数存入一预设的字符串数组中;
[0073] 当执行主体与预设主体匹配时,识别单元4将存储单元3中的字符串数组中的复数个参数依次与预设参数进行匹配,以获取每个匹配结果;
[0074] 当匹配结果为匹配时,处理单元5停止执行执行指令;
[0075] 当复数个参数的匹配结果均为不匹配时,处理单元5执行执行指令。
[0076] 参数可以为两个或者更多,所有的参数全部存入存储单元3中的一个字符串数组中。以便于将执行指令中的参数与预设字符串进行匹配。
[0077] 在本实施例中,采用存储单元3存储拷贝指令中所有参数的字符串数组,识别单元4可采用for循环的方式将每个参数索引出来分别与“app_process”字符串匹配。若存储单元3中的参数中没有和“app_process”字串匹配的。说明不是要替换app_process文件,可以继续按拷贝指令流程向下执行;如果在字符串数组中有某一个元素中的字符串和“app_process”字符串想匹配,说明可能是对系统中的app_process文件做替,有潜在的app_process文件被替换的风险,则停止替换文件指令的执行,以防止用户在获取Root权限的情况下,通过Xposed开源框架来截获用户隐私信息的程序,从根本上解决恶意程序截获系统的接口的问题。
[0078] 如图2所示,一种防止截获系统接口的方法,应用于Android中,包括下述步骤:
[0079] S1.获取用户发送的执行指令;
[0080] S2.判断用户是否为超级用户,若是,执行步骤S3;若否,执行步骤S4;
[0081] S3.将执行指令与条件进行匹配,若匹配,执行步骤S5;若不匹配,执行步骤S4;
[0082] S4.执行执行指令;
[0083] S5.停止执行执行指令。
[0084] 在本实施例中,防止截获系统接口的方法通过获取用户的权限及对执行指令进行识别,以修改替换文件指令的流程来拒绝恶意程序替换体Android系统中的文件,以避免用户隐私泄露。
[0085] 在优选的实施例中,执行指令包括执行主体和复数个参数,步骤S3包括:
[0086] S31.将执行指令的执行主体与预设主体进行匹配,若匹配,执行步骤S4;若不匹配,执行步骤S32;
[0087] S32.将复数个参数依次与预设参数进行匹配;
[0088] 当复数个参数均与预设参数不匹配时,执行步骤S4;
[0089] 当参数与预设参数匹配时,执行步骤S5。
[0090] 进一步地,预设主体可采用拷贝命令:cp,预设参数为app-process。
[0091] 在本实施例中,拷贝命令主要指将相同文件名的文件拷贝到需要替换的原文件名所在的地址中,以实现将原文件替换掉的目的,也可是通过拷贝,移动等操作将相同文件名的文件替换。
[0092] 在步骤S3中将执行指令与拷贝命令cp进行匹配,以识别执行指令是否为拷贝指令,当不是拷贝指令时可执行相应的执行指令;当是拷贝指令时,需将执行指令中的参数与app-process进行匹配,以识别拷贝指令是否要替换掉系统/system/bin/app_process的文件,为了截获系统接口,若匹配,则停止执行拷贝指令;若不匹配,则继续执行拷贝指令。从而达到防止恶意程序截获系统接口的目的。
[0093] 在优选的实施例中,提供一存储单元用以将复数个参数存入一预设的字符串数组中,在步骤S32中,将存储单元中的字符串数组中复数个参数依次与预设参数进行匹配,以获取每个匹配结果;
[0094] 当匹配结果为匹配时,执行步骤S5;
[0095] 当复数个参数的匹配结果均为不匹配时,执行步骤S4。参数可以为两个或者更多,所有的参数全部存入存储单元中的一个字符串数组中。
[0096] 在本实施例中,当接收到用户发送的执行指令时,判断当前用户是否为Root用户,如果不是Root用户,则执行替换指令替换文件的流程;如果是Root用户,则识别执行指令是否为拷贝指令,若不是,则执行相应的执行指令;若是则存储替换指令中所有参数的字符串数组,可采用for循环的方式将每个参数索引出来分别与“app_process”字符串匹配。若存入的参数中没有和“app_process”字串匹配的。说明不是要替换app_process文件,可以继续按替换指令流程向下执行;如果在字符串数组中有某一个元素中的字符串和“app_process”字符串想匹配,说明很有可能是对系统中的app_process文件做替,有潜在的app_process文件被替换的风险,则停止替换文件指令的执行。
[0097] 本发明通过修改替换指令的执行流程来实现阻止app_process的替换,进而防止系统接口的动态截获。
[0098] 以上所述仅为本发明较佳的实施例,并非因此限制本发明的实施方式及保护范围,对于本领域技术人员而言,应当能够意识到凡运用本发明说明书及图示内容所作出的等同替换和显而易见的变化所得到的方案,均应当包含在本发明的保护范围内。