-
-
[原创]不完美的软件锁
-
发表于:
2013-5-9 20:12
6153
-
当前多种安全软件实现了“软件锁”的功能:在启动某个APP时会弹出密码输入界面,如果密码错误,您就不能使用这个APP啦。下面就是@腾讯手机管家 拦截某APP的界面。
@安卓安全小分队 在研究这一功能时,有自己的话要说!
一、目前安全软件的实现方式
通过一些技术手段,我们发现,大部分软件都是在某APP 被启动的时候,安全软件在APP界面上再覆盖一层Activity用于解锁。
以@腾讯手机管家 为例。其软件锁的实现方式是后台某线程中每隔500毫秒调用一次getRunningTasks (int maxNum, int flags, IThumbnailReceiver receiver) 函数,用来“实时”查询自己关注的某个APP是否启动,如果发现启动,则马上弹出一个Activity来要求用户输入密码,就是我们前面看到的界面了。
这就是为什么我们在使用这个功能时会发现有时候在很短的时间里能看到被锁的软件的启动画面。启动某APP,正好赶在500毫秒一次的扫描结束以后,那么要再等500毫秒以后程序锁才会启动,这个时候APP已经被秀出来了,我们就看到了启动画面。
并且大家可以想到,重复不断的调用系统函数来查询,多多少少都消耗了系统资源,如果因为这个功能导致IPC等待或者系统耗电严重可就得不偿失了。
当然了,@腾讯手机管家 还是比较人性化的,在屏幕关闭的时候,就不会查询了。以此来减少系统开销。
二、我们的想法
上面的做法只是一种障眼法。通过上面的分析,用户可能明白了,软件被锁的时候,其实被锁软件已经启动,如果软件启动会播放声音,则有可能泄露用户隐私(有的安全软件在实现这一功能时还会禁用声音,但是这是治标不治本的方法)。有的时候,我们在短时间内还可以看到被锁软件的启动画面,从某种程度上说,用户隐私也会被泄露。
因此软件锁要从根本上解决就需要系统来配合。通过中断软件的启动流程来达到软件锁的功能才是上上策。我们可以向某个已经被验证过的优秀安全软件开放一定权限来监视软件启动操作。某软件启动前先通知安全软件询问是否允许,如果输入密码错误则结束这个软件的启动。实实在在的实现了软件锁的功能,即不解锁就不启动。
所以我们还是重申我们的主张,手机安全还是要从系统入手,只要系统本身能够提供安全软件的功能,或者有针对性地将系统接口给安全软件使用,那么,安卓系统在安全上的“水土不服”就能够解决了。
@安卓安全小分队
http://weibo.com/androidsecurity
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!