不完美的软件锁

    当前多种安全软件实现了“软件锁”的功能:在启动某个APP时会弹出密码输入界面,如果密码错误,您就不能使用这个APP啦。但是大多数安全软件在实现这个功能的时候都存在着不足。

下面就是@腾讯手机管家 拦截某APP的界面。

 


@安卓安全小分队 在研究这一功能时,有自己的话要说!

一、目前安全软件的实现方式

    通过一些技术手段,我们发现,大部分软件都是在某APP 被启动的时候,安全软件APP界面上再覆盖一层Activity用于解锁。

@腾讯手机管家 为例。其软件锁的实现方式是后台某线程中每隔500毫秒调用一次getRunningTasks (int maxNum, int flags, IThumbnailReceiver receiver) 函数,用来“实时”查询自己关注的某个APP是否启动,如果发现启动,则马上弹出一个Activity来要求用户输入密码,就是我们前面看到的界面了。

    这就是为什么我们在使用这个功能时会发现有时候在很短的时间里能看到被锁的软件的启动画面。启动某APP,正好赶在500毫秒一次的扫描结束以后,那么要再等500毫秒以后程序锁才会启动,这个时候APP已经被秀出来了,我们就看到了启动画面。

并且大家可以想到,重复不断的调用系统函数来查询,多多少少都消耗了系统资源,如果因为这个功能导致IPC等待或者系统耗电严重可就得不偿失了。

   当然了,@腾讯手机管家 还是比较人性化的,在屏幕关闭的时候,就不会查询了。以此来减少系统开销。

二、我们的想法

   上面的做法只是一种障眼法。通过上面的分析,用户可能明白了,软件被锁的时候,其实被锁软件已经启动,如果软件启动会播放声音,则有可能泄露用户隐私(有的安全软件在实现这一功能时还会禁用声音,但是这是治标不治本的方法)。有的时候,我们在短时间内还可以看到被锁软件的启动画面,从某种程度上说,用户隐私也会被泄露。

   因此软件锁要从根本上解决就需要系统来配合。通过中断软件的启动流程来达到软件锁的功能才是上上策。我们可以向某个已经被验证过的优秀安全软件开放一定权限来监视软件启动操作。某软件启动前先通知安全软件询问是否允许,如果输入密码错误则结束这个软件的启动。实实在在的实现了软件锁的功能,即不解锁就不启动。

   所以我们还是重申我们的主张,手机安全还是要从系统入手,只要系统本身能够提供安全软件的功能,或者有针对性地将系统接口给安全软件使用,那么,安卓系统在安全上的“水土不服”就能够解决了

 附:

    有的朋友关心乐安全的软件锁是如何实现的,笔者查看了一下,发现也没有什么特殊之处。它没有直接调用ActivityManager的getRuningTasks, 而是调用了ActivityManagerService的getTasks方法。至于通过什么方式,可能是注入后的反射,具体细节就没研究了。下面附张图来说明。


pid为966的app一直在调用getTasks,而这个app正是乐安全


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值