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

文档序号:9376127阅读:来源:国知局
服务SecurityService,该后台服务运行于系统的Framework层,用于监控待启动应用程序的启动行为,所述启动行为具体为当AMS执行启动操作时,调用任意执行启动操作的函数接口的行为。
[0064]具体而言,在App层注册监听器,用于接收所述后台服务发送的应用程序启动的事件通知。在具体实施例中,App层安全软件定义回调函数接口 QihooPkgStartListener.checkPkgStart O,并提供一个自定义的接口函数QihooAppManager.setPkgStartListener (String packageName, QihooPkgStartListener listener)用于向系统中注册监听器。其中,参数packageName表征待启动应用程序的包名。同时,在系统框架层添加一个名为SecurityService的安全服务,当应用启动时,framework层的后台服务提供的接口函数checkPkgStartForUser O会调用App层安全软件的回调函数接口checkPkgStart (String packageName),将应用程序的启动事件通知由框架层发送到应用层,以便在应用层提供可视化界面对该启动事件进行鉴权。需要说明的是,此时应用程序的实际启动动作还未触发。其中,所述checkPkgStartForUser O函数如下:
[0065]public boolean checkPkgStartForUser(String packageName,
[0066]IBinder caller, Intent intent,
[0067]String resolvedType, IBinder resultTo,
[0068]String resultffho, int requestCode,
[0069]int startFlags, String profileFile,
[0070]ParcelFileDescriptor profileFd,
[0071]Bundle opt1ns, int userid)
[0072]运行checkPkgStartForUser O函数检测是否有应用程序启动,其中,所述函数参数包括应用程序包名packageName、启动事件相关信息的描述信息intent等。
[0073]在调用该应用程序启动检测函数之前,先通过由后台服务预先注入框架层的钩子函数监控应用程序的启动行为并获取相关参数信息,其中,所述钩子函数可以对StartActivityO函数进行挂钩以实现对启动行为的拦截。所述函数接口 startActivity O为启动应用程序Activity的一种方式,通过调用该函数接口创建应用程序主界面的一个实例,以调用显示Activity桟中的应用程序主界面。故而,对函数接口 startActivity O进行挂钩,以实现对应用程序启动事件的拦截,生成启动事件通知。
[0074]当然,以上只是对挂钩函数的一个列举,也可以是应用程序启动过程执行的任意可挂钩的操作,本领域人员应该理解相应的挂钩操作。
[0075]其中,术语“钩子”涵盖了用于通过拦截在软件组件之间传递的函数调用、消息、或事件来改变或增加操作系统、应用程序、或其他软件组件的行为的技术。而处理这种被拦截的函数调用、事件或消息的代码就被称为钩子函数。钩子通常用于各种目标,包括对功能进行调试和对功能进行扩展。其示例可以包括在键盘或鼠标事件传递到应用程序之前拦截它们,或者拦截系统调用(system call)、或者系统函数行为、函数执行结果等,以监视或修改应用程序或其他组件的功能等等。本实施例即可采用钩子函数接管所述应用程序启动时执行的任意可挂钩接口函数的操作。
[0076]所述运行于系统的framework层后台服务SecurityService,一旦发现有应用程序自行启动,立即将该待启动应用程序的程序包名packageName作为参数调用App层安全软件提供的回调函数,将所述启动事件通知发送到系统的App层。
[0077]步骤S12:响应于该启动事件通知,启动锁定界面以接收用户的密码输入指令,对该应用程序的启动行为进行鉴权。
[0078]所述后台服务通过调用回调函数,将应用程序的包名作为参数从Framework层传到App层,以通知应用程序的启动行为。在本步骤中便可以基于接收到的该应用程序包名参数,对相应的应用程序的启动行为进行鉴权。
[0079]具体而言,响应于应用程序的启动事件通知,依据应用程序的包名packageName确定要锁定的应用程序,暂停该应用程序的启动行为,并启动锁定界面。所述锁定界面仅当接收到应用程序的启动事件通知时显示,具体为提供密码输入框的用户交互界面,所述密码输入框具体可以为简单的文本编辑框、数字密码键盘、图案密码键盘、指纹识别区等任何用于接收密码输入的界面形式。接收用户的密码输入指令,验证输入的密码,以对应用程序的启动行为进行鉴权。
[0080]在其他实施例中,在启动锁定界面进行鉴权之前,还可以通过向云端服务器请求允许启动的应用程序包名列表,以确定获得启动授权的应用程序包名,具体步骤如下:
[0081]1、通过远程接口提交获取允许启动的应用程序包名列表的运程请求;
[0082]基于设备的身份信息或第三方账户通过远程接口提交远程请求,请求获取允许启动的应用程序包名列表。其中,所述允许启动的应用程序包名列表由云端服务器预先统计生成,客户端接收用户设定的允许应用程序启动的指令,将相应的应用程序的包名封装成数据包,发送给云端服务器,云端服务器将该应用程序包名与该设备的身份信息或第三方的账户关联存储。在其他实施例中,所述允许启动的应用程序包名列表也可以由云端服务器统计应用程序允许启动的用户数量生成,云端服务器将用户数量超过一定阈值的应用程序记录于所述允许启动的应用程序包名列表中。
[0083]2、接收云端服务器反馈的允许启动的应用程序包名列表。
[0084]接收反馈的包含允许启动的应用程序包名列表的应答数据包,对其进行解析,获取相应的允许启动的应用程序包名。
[0085]在启动锁定界面之前,查询当前启动的应用程序包名是否属于所述云端服务器反馈的允许启动的应用程序包名列表,如果属于则判断该应用程序获得启动权限;如果不属于则判断该应用程序未获得启动权限,以便于根据该鉴权结果执行后续步骤。
[0086]在其他实施例中,所述允许启动的应用程序包名列表也可以存储于本地,即客户端提供一用于设定允许启动应用程序的可视化界面,接收用户的设定指令,记录用户设定的允许启动的应用程序包名并存储于本机,生成所述允许启动的应用程序包名列表。在启动锁定界面之前,查询当前启动的应用程序包名是否属于所述本地存储的允许启动的应用程序包名列表,如果属于则判断该应用程序获得启动权限;如果不属于则判断该应用程序未获得启动权限,以便于根据该鉴权结果执行后续步骤。
[0087]步骤S13:依据鉴权结果通知所述后台服务放行或禁止启动该应用程序。
[0088]上述步骤验证用户输入的密码信息以对应用程序的启动行为鉴权,由此得知待启动应用程序是否有启动权限,依据该鉴权结果通知所述后台服务放行或禁止启动该应用程序。具体实施例中,App层的安全软件调用接口函数QihooAppManager.resumeOrAbortPackage(String packageName, boolean abort),并由该函数调用所述后台服务 SecurityService 提供的接口函数 resumeOrAbortPackage (StringpackageName, boolean abort),将鉴权结果由 App 层传到 framework 层,以通知 framework放行或禁止启动相应的应用程序。其中,当鉴权成功时,第二个参数abort设置为false,否则设置为true。
[0089]如果鉴权成功,即鉴权结果为允许该应用程序启动,,则后台服务SecurityService接收到允许启动应用程序的事件通知,对该应用程序的启动行为放行,恢复被中断的app启动过程,即对拦截的启动接口函数放行,使得活动管理服务继续从原挂钩函数的跳转处执行后续代码,静默执行应用程序的启动过程。
[0090]如果鉴权失败,即鉴权结果为禁止该应用程序启动,,则后台服务SecurityService接收到禁止启动应用程序的事件通知,结束该应用程序的启动行为。具体可由钩子函数调用Process, kiIIProcess (pid)函数结束应用程序的进程或调用forcestopPackageO函数强制关闭应用程序的进程。同时,App层安全软件提供一用户界面,显示告警信息以提示用户鉴权失败。
[0091 ] 在本发明的另一种实施方案中,系统接收了启动事件通知之后,在启动锁定界面进行鉴权之前,先查询存储于本地的允许启动的应用程序包名列表。对照待启动应用程序包名与存储于本地的允许启动的应用程序包名列表,当待启动的应用程序存在于本地存储的允许启动的应用程序包名列表中时,无需用户输入密码鉴权,直接通知所述后台服务放行启动该些应用程
当前第3页1 2 3 4 5 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1