界面劫持即自己的应用使用过程中,被恶意app弹出的劫持页面覆盖掉了自己app的页面,而许多用户并未察觉异样,从而输入了敏感信息导致信息被窃取。罪魁祸首在于Android的一个系统漏洞,FLAG_ACTIVITY_NEW_TASK标志位可以让自己的activity覆盖掉其他activity页面。而界面劫持目前的防护做法只能是当我们的app被非人为切换到后台时给与用户警示提醒。
我自己在尝试过程中,总结出以下几点:
1.可在baseactivity的onpause()方法中进行判断和提示操作,比较省力。
2.要排除掉用户点击 返回,home,菜单(最近使用)这三个主动操作,点击back键在onkeydown中监听,而home键,最近使用两个键只能监听ACTION_CLOSE_SYSTEM_DIALOGS广播来接收,并且手势导航下,上滑退出app也是要在这个广播中监听。
3.app使用过程中,从一个activity跳到另一个activity,上一个activity也要走onpause,此时就需要判断当前app是否在前台运行了,是则不弹提示。
4.app退出时,在onpause中判断,系统返回结果app仍然在前台运行,只有到onstop中,才能得到app是在后台运行。
5.当app退出时,onpause方法先运行,广播后到达,因此onpause中需要启动延时任务,在延时的runnable中判断是主动退出还是被动切换到后台的。
另外,按照网络上许多文章的做法,模拟界面劫持,在关键的service中,去获取当前运行的进程,如果要劫持的进程运行在前台,就进行劫持,弹出劫持页面,我是这样写的,
但是,获取到的进程列表就只有本app,也就是这个模拟劫持的app自己的进程,为什么获取不到其他进程呢,模拟失败,求教