应用程序启动鉴权方法及装置的制造方法_4

文档序号:9376127阅读:来源:国知局
序,即由后台服务对拦截的启动接口函数放行,使得活动管理服务继续从原挂钩函数的跳转处执行后续代码,静默执行应用程序的启动过程。
[0092]在本发明的另一种实施方案中,系统接收了启动事件通知之后,在启动锁定界面进行鉴权之前,先通过远程接口向云端服务器提交获取允许启动的应用程序包名列表的远程请求,然后接收云端服务器反馈的允许启动的应用程序包名列表。对照待启动应用程序包名与云端服务器反馈的允许启动的应用程序包名列表,当待启动的应用程序存在于云端服务器反馈的允许启动的应用程序包名列表时,无需用户输入密码鉴权,直接通知所述后台服务放行启动该些应用程序,即由后台服务对拦截的启动接口函数放行,使得活动管理服务继续从原挂钩函数的跳转处执行后续代码,静默执行应用程序的启动过程。
[0093]以下基于模块化思维,进一步揭示依照本发明所述的应用程序启动鉴权方法所实现的实施方式。
[0094]请参阅图2,本发明所提供的应用程序启动鉴权装置,包含接收单元11、响应单元12、执行单元13。结合上述应用程序启动鉴权方法,以下详细揭示各模块所实现的具体功會K:
[0095]接收单元11:用于接收预设的后台服务发送的基于后台服务拦截的应用程序的启动行为而生成的启动事件通知。
[0096]本实施例所称的后台服务,是指由以本发明所预先实现的一个程序模块,运行于内存中,通过内存中的相应主进程实现如前所述的提权操作后,向系统注册的一个通信服务进程。所述后台服务基于Android系统所提供的Binder机制,向System Manager注册,通过Android提供的固有的Binder机制,在后台服务与其监听的活动管理服务(AMS)进程之间建立C/S架构的沟通管道。具体而言,当获取到系统的Root权限后,为了便于后续实现对系统中其它进程的监听以及相关操作功能,本发明首先启动具有已经获得Root权限的由本方法实例化后得以运行而形成的主进程,通过主进程在系统中插入所述后台服务,例如具体可通过系统调用函数ServiceManager.addService ()来实现插入操作,由此实现对本方法实例化程序所构造的后台服务的成功注册,所述后台服务由此成为系统底层级别的服务进程。需要注意的是,所述后台服务进程通过上述的配置,已经成为系统级别的服务进程,其权限显然高于其他用户层服务进程或应用进程的权限,因此该后台服务进程可以作为通信基础,为其他调用它的进程提供通信保障,完成系统与其他调用它的进程之间的通信连接。因此,所述的后台服务进程,具有与其监听的活动管理服务进程进行通信的能力,两者之间基于Binder机制进行通信,这种通信方式具有快速稳定的特点。所述后台服务进程主要用于实施对系统活动管理服务进程的监控,以便拦截活动管理服务进程用于启动某一应用程序的行为,这一行为主要是指通过函数调用激起的指令操作事件行为。
[0097]在具体实施例中,获取系统的Root权限后,向系统注册一个后台服务SecurityService,该后台服务运行于系统的Framework层,用于监控待启动应用程序的启动行为,所述启动行为具体为当AMS执行启动操作时,调用任意执行启动操作的函数接口的行为。
[0098]具体而言,在App层的接收单元11注册监听器,用于接收所述后台服务发送的应用程序启动的事件通知。在具体实施例中,本发明所述接收单元11定义回调函数接口 QihooPkgStartListener.checkPkgStart O,并提供一个自定义的接口函数QihooAppManager.setPkgStartListener(String packageName, QihooPkgStartListener listener)用于向系统中注册监听器。其中,参数packageName表征待启动应用程序的包名。同时,在系统框架层添加一个名为SecurityService的安全服务,当应用启动时,framework层的后台服务提供的接口函数checkPkgStartForUser O会调用App层安全软件的回调函数接口 checkPkgStart (String packageName),将应用程序的启动事件通知由框架层发送到应用层,以便在应用层提供可视化界面对该启动事件进行鉴权。需要说明的是,此时应用程序的实际启动动作还未触发。其中,所述checkPkgStartForUser O函数如下:
[0099]public boolean checkPkgStartForUser(String packageName,
[0100]IBinder caller, Intent intent,
[0101]String resolvedType, IBinder resultTo,
[0102]String resultffho, int requestCode,
[0103]int startFlags, String profileFile,
[0104]ParcelFileDescriptor profileFd,
[0105]Bundle opt1ns, int userid)
[0106]运行checkPkgStartForUser ()函数检测是否有应用程序启动,其中,所述函数参数包括应用程序包名packageName、启动事件相关信息的描述信息intent等。
[0107]在调用该应用程序启动检测函数之前,先通过由后台服务预先注入框架层的钩子函数监控应用程序的启动行为并获取相关参数信息,其中,所述钩子函数可以对StartActivityO函数进行挂钩以实现对启动行为的拦截。所述函数接口 startActivity O为启动应用程序Activity的一种方式,通过调用该函数接口创建应用程序主界面的一个实例,以调用显示Activity桟中的应用程序主界面。故而,对函数接口 startActivity O进行挂钩,以实现对应用程序启动事件的拦截,生成启动事件通知。
[0108]当然,以上只是对挂钩函数的一种列举,也可以是应用程序启动过程执行的任意可挂钩的操作,本领域人员应该理解相应的挂钩操作。
[0109]其中,术语“钩子”涵盖了用于通过拦截在软件组件之间传递的函数调用、消息、或事件来改变或增加操作系统、应用程序、或其他软件组件的行为的技术。而处理这种被拦截的函数调用、事件或消息的代码就被称为钩子函数。钩子通常用于各种目标,包括对功能进行调试和对功能进行扩展。其示例可以包括在键盘或鼠标事件传递到应用程序之前拦截它们,或者拦截系统调用(system call)、或者系统函数行为、函数执行结果等,以监视或修改应用程序或其他组件的功能等等。本实施例即可采用钩子函数接管所述应用程序启动时执行的任意可挂钩接口函数的操作。
[0110]所述运行于系统的framework层后台服务SecurityService,一旦发现有应用程序自行启动,立即将该待启动应用程序的程序包名packageName作为参数调用App层安全软件提供的回调函数,将所述启动事件通知发送到系统的App层,由所述接收单元11接收所述启动事件通知。
[0111]响应单元12:响应于该启动事件通知,用于启动锁定界面以接收用户的密码输入指令,对该应用程序的启动行为进行鉴权;
[0112]所述后台服务通过调用回调函数,将应用程序的包名作为参数从Framework层传到App层,以通知应用程序的启动行为。本发明所述响应单元12便可以基于接收到的该应用程序包名参数,对相应的应用程序的启动行为进行鉴权。
[0113]具体而言,所述响应单元12响应于应用程序的启动事件通知,依据应用程序的包名packageName确定要锁定的应用程序,暂停该应用程序的启动行为,并启动锁定界面。所述锁定界面仅当接收到应用程序的启动事件通知时显示,具体为提供密码输入框的用户交互界面,所述密码输入框具体可以为简单的文本编辑框、数字密码键盘、图案密码键盘、指纹识别区等任何用于接收密码输入的界面形式。响应单元12接收用户的密码输入指令,验证输入的密码,以对应用程序的启动行为进行鉴权。
[0114]在其他实施例中,本发明装置还包括远程交互单元,在启动锁定界面进行鉴权之前,由所述远程交互单元通过向云端服务器请求允许启动的应用程序包名列表,以确定获得启动授权的应用程序包名,具体执行步骤如下:
[0115]1、通过远程接口提交获取允许启动的应用程序包名列表的运程请求;
[0116]基于设备的身份信息或第三方账户通过远程接口提交远程请求,请求获取允许启动的应用程序包名列表。其中,所述允许启动的应用程序包名列表由云端服务器预先统计生成,客户端接收用户设定的允许应用程序启动的指令,将相应的应用程序的包名封装成数据包,发送给云端服务器,云端服务器将该应用程序包名与该设备的身份信息或第三方的账户关联存储。在其他实施例中,所述允许启动的应用程序包名列表也可以由云端服务器统计应用程序允许启动的用户数量生成,云端服务器将用户数量超过一定阈值的应用程序记录于所述允许启动的应用程序包名列表中。
[0117]2、接收云端服务器反馈的允许启动的应用程序包名列表。
[0118]接收反馈的包
当前第4页1 2 3 4 5 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1