Android安全防护模式「多任务窗口中的界面高斯模糊处理」其实是个骗局?

Android技术篇 尼古拉斯.赵四 9396℃

一、情景介绍

应用开发过程中安全问题的确需要系统考虑也要开发者自己多考虑,一个小的细节可能会让你的应用变的更安全,最近在用招商银行App的时候无意中发现了iPhone上多任务一个好玩的东西:

看到招商银行的应用有一个特别的地方就是当应用出现在多任务中的时候界面被高斯模糊处理了,也就是我们看不到界面内容了,你看后面的今日头条还是可以看到内容的,为什么看不到这个应该都知道为了安全,假如招商应用当前的界面是余额界面无意中被人看到多任务窗口信息等于就被人看到余额了,这个还是很危险的,因为比如像我的账户余额一般不超过两位数,如果这么高的余额被人看到了很危险的。

 

二、高斯模糊处理方式

然后我就好奇去网上一搜iPhone的这种技术处理是怎么做到的,其实没搜索之前也大致猜到了,因为我们开发过iOS都知道有两个回调方法就是应用退到后台和应用返回前台,其实Android中也有这些事件但是和iPhone相比太多了处理起来很麻烦,而且iPhone多任务就是双击Home键即可,但是Android机型很多需要处理多种机型的事件很麻烦:

网上资料一大堆都是关于iPhone的,感兴趣的同学可以百度自行实践一下,很简单就是在退出后台之后把当前的应用UIWindow图片取出来然后高斯模糊一下在设置回去即可,而关于Android的呢相关知识呢?我们在搜一下:

看到了吗?竟然没有大部分都还是iPhone的,而且都是求助,也就说肯定有人想实现这样的逻辑,那Android中到底能实现吗?不多说了直接看看手机上验证一下:

我用oppo手机查看的确可以呀,所以我就开始写代码实现了,因为大致思路上面都说到了,我们首先监听系统的打开多任务键事件,oppo手机打开多任务就是长按home键,所以我们只需要监听长按home键事件即可,这个网上有方案了通过广播就可以实现了,监听到多任务打开的时候我们就把当前我们自己应用的TopActivity界面获取到然后高斯模糊处理在用一个新的控件展示图片,把新的控件放到View中即可,这里需要了解Android中界面的结构:

Android中每个Activity也会对应一个Window,我们可以在Activity中获取到这个一般都是PhoneWindow,这个和iPhone非常类似,Window中包含了一个根视图DecorView,这个其实是一个FrameLayout布局,然后他还有一个ContentView,也是一个FrameLayout布局,而且他的id是R.id.content,而后面我们调用setContentView等方法其实就是把我们自定义的布局加到这个ContentView中。所以我们现在如果有了TopActivity之后就可以获取当前的View视图的界面图片,这个网上也有对应的方法可以获取当前Activity的截图:

有了Bitmap我们在高斯模糊处理一下,然后新建一个ImageView,把图片设置展示处理之后,再把这个ImageView控件直接放到ContentView中,因为他是FrameLayout的所以可以叠加展示最上面一层。当应用回到前台的时候就把当前最顶端的View移除也就是把高斯模糊的ImageView控件移除即可。

有了这些知识时候我们还需要利用一个栈维护当前的应用的Activity信息,每次Activity销毁就从栈中移除pop一下即可,每次onCreate的时候就放到栈顶push一下即可。然后每次需要操作的时候就取出栈顶activity操作即可,这个利用Java中的Stack数据结构即可。然后我们从网上找了一个比较通用的监听多任务事件:

有了事件之后就开始添加控件:

那下面开始运行程序吧:

 

三、原来是个骗局

看到日志了,说明我们添加的代码成功了但是可惜的是,他并没有变模糊。

然后就折腾了一上午,就换个手机试试发现一个奇葩的现象:

小米4手机的招商银行竟然没有高斯模糊处理,那么这里就有两种可能了,一种是小米4手机实现不了这个功能,还有一种就是oppo手机系统做了高斯模糊,所以我们直接验证第二种即可,我们知道这种多任务一般都在系统的UI包中:

一般都是在/system/priv-app/SystemUI.apk中,手机root之后把这个apk导出来看看:

在recent目录下逐个查找之后看到这里加载应用的缩略图和图标信息,继续往下看:

这里看到核心点了,就是判断是否为安全类应用,如果是就把图片高斯模糊处理了,所以到这里我们就清楚了这些操作原来是oppo手机系统做了,并非应用自己做的,那么我们继续看看这个安全类应用怎么判断的:

查看这个安全白名单是什么:

看到这里有一些安全应用的特殊字符,如果应用的名称包含了这些字符就认为是安全进行高斯模糊处理,我们为了验证就把我们的应用名称改成带有支付字样的看看会不会被高斯模糊:

看到这里把应用的名字加了支付字样,系统就自动进行模糊处理了,好了到这里我们就发现了Android中的高斯模糊处理其实是特定手机做的,那应用本身可以做吗?通过案例可以看到应该很难实现,因为系统展示多任务界面的时机早于我们监听到的home键时机,所以我们操作修改界面已经晚了。所以这个就是为什么标题说是骗局了,因为被oppo手机欺骗了,害的我折腾那么长时间去实现结果还没有成功。

那么上面的高斯模糊处理不了?假如我们想让应用安全点就是不要在多任务中泄露信息可以怎么做呢?我们有两种体验很差的方式实现,一种是在当前Activity页面添加安全属性:

getWindow().setFlags(WindowManager.LayoutParams.FLAG_SECURE, WindowManager.LayoutParams.FLAG_SECURE);

这个添加之后应用在多任务界面中就显示透明样式了:

看到了吧,当前应用的页面展示透明了,但是这样的体验是不是很差呀,用户发现觉得很奇怪的,所以为了安全应用自己衡量吧,当然还有一种方式在xml的application标签中添加属性:android:excludeFromRecents=”true” 这样这个应用就不会出现在多任务列表中了,这样用户会觉得更奇怪,因为多任务很多时候是为了更好的启动应用,而你把它给隐藏了,用户体验会更差。所以从上面来看,应用退到后台界面有些数据的确敏感需要处理,但是也需要考虑用户体验。而对于Android中要想修改多任务中的界面的话只能系统来做。应用自身是做不了的。

 

本文的目的只有一个就是学习逆向分析技巧,如果有人利用本文技术进行非法操作带来的后果都是操作者自己承担,和本文以及本文作者没有任何关系,本文涉及到的代码项目可以去编码美丽小密圈自取,欢迎加入小密圈一起学习探讨技术

 

四、总结

有时候我们会发现应用的安全问题不值得忽视,一个小的问题做好了防护,会对用户安全隐私提供了一份保障,银行app的余额要是被人看到了会很危险的,让别人知道你那么穷是多么受打击。所以为了保护用户的自尊心必须要做好安全防护。

《Android应用安全防护和逆向分析》

点击立即购买:京东  天猫  

更多内容:点击这里

关注微信公众号,最新技术干货实时推送

转载请注明:尼古拉斯.赵四 » Android安全防护模式「多任务窗口中的界面高斯模糊处理」其实是个骗局?

喜欢 (11)or分享 (0)