查看原文
其他

Google 给 7.1+ 加了段代码,让你觉得更安全了吗?

2017-07-19 承香墨影 承香墨影

版权声明:

本公众号发布的所有文章,未特殊署名,均属于原创,版权归本公众号所有。

转载请参阅公众号的:转载授权。

一、前言

虽然看到这篇文章朋友,知道如何预防一些 Android 下的流氓软件。 但是 Android 的大多数用户,并没有这种预防的意识,基本上每隔一段时间,都会有一些 Android 上的恶意软件而对用户造成损失的事件报出来。

据我所知,有一些恶意软件,会试图获取 Root 权限,然后劫持用户的屏幕,让用户无法离开它设置的界面。当用户无法自由的操作自己的手机屏幕,也就无法进行一些补救措施。

近期 Android 7.1 Nougat 中,悄悄的加入了一项新的安全相关的功能,被称为 “Panic Detection“ ,翻译过来就是 “紧急检测“ ,它的主要作用是连续监听用户的多次后退按钮事件,当触发到一定的临界值的时候,就直接让用户返回到主屏幕。

这样的一个功能,系统来做其实就比较好理解了,当你被恶意软件劫持屏幕的时候,如果触发了”紧急检测”的功能,让用户可以回到主页上,就有机会去卸载掉这些恶意软件。

二、Panic Detection

Panic Detection 现在应该还在测试阶段,默认情况下,它现在是处于被关闭的状态,所以哪怕现在设备运行在 Android 7.1+ 的环境下,也并不会将这个功能开启。

关于 Panic Detection 的一些开关配置,可以在 config.xml 文件中找到。

默认情况下,它的值是 0 ,表示什么都不做。而一旦将它设置为 1 之后,就开启了 Panic Detection 模式,当触发到它的时候,会回到主屏幕。

首先,这样的一个功能,让我们自己来开发实现的话,实际上思路大致上也差不多:

  1. 需要一个开关配置来标记是否启用。

  2. 需要设置点击多少次触发 Panic Detection 模式。

  3. 需要设定每次点击的间隔。

开关配置我们已经了解到了,后面的思路,其实有点像我们比较常见,点击两次退出 App 的需求实现。

实际上 Google 也是这样实现的。

它在 PhoneWindowManager.java 中,定义了点击 Back 键,触发 “Panic Detection“ 的次数。

PANIC_PRESS_BACK_COUNT 设置的就是进入 Panic 模式的 Back 按钮点击的次数。这里可以看到,配置的是点击 4 次,就会触发。

而 PANIC_PRESS_BACK_NOTHING 和 PANIC_PRESS_BACK_HONE 分别表示了在 config.xml 中配置的 config_backPanicBehavior 的值。

不管 config_backPanicBehavior 是否开启,用户每次点击 back 按钮,实际上都会被检查。而当它开启的时候,首先,系统会拦截 KEYCODE_BACK 事件的按下,并检查是否多次按下或者是一次长按,然后再来判断是触发 Panic Detection 模式,还是将事件向上传递给应用程序。

这个的处理是在 PhoneWindowManager.interceptKeyBeforeQueueing() 中完成的。

可以看到,在 KEYCODE_BACK 被按下的时候,会调用 interceptBackKeyDown() 来处理。

在 interceptBackKeyDown() 方法中,会有一个点击次数的计数,来比较当前点击 Back 键的次数,是否达到 PANIC_PRESS_BACK_COUNT 配置的次数。

一旦没有达到 PANIC_PRESS_BACK_COUNT 配置的次数,就会移除 MSG_BACK_DELAYED_PRESS 的消息。

而这个 MSG_BACK_DELAYED_PRESS 的消息,是在 interceptBackKeyUp() 发出的,它拦截了 Back 按键的抬起。

从这里可以看出来,它在每次 Back 键点击的时候,都有一个超时的时间(300ms),去检查是否是连续的点击,也就是说,两次点击的间隔在 300ms 之间,4 次点击,会触发 Panic Detection 模式。

300ms 的值,存储在 ViewConfiguration.java 中。

接下来再看看发送出去的 MSG_BACK_DELAYED_PRESS 消息的处理。

最终会调用 backMultiPressAction() 和 finishBackKeyPress() 方法,在 finishBackKeyPress() 中,会将 Back 按键的计数器置为 0 。

而在 BackMultiPressAction() 中,就会去做启动 Home 页的操作。

launchHomeFromHoyKey() 就是真的去执行去到桌面的逻辑了,代码一屏截图截不下,有兴趣可以在线查阅源码,本文中,所有代码的截图,都有行号,可以方便查找。

在线源码地址:

PhoneWindowManager:https://android.googlesource.com/platform/frameworks/base/+/refs/heads/master/services/core/java/com/android/server/policy/PhoneWindowManager.java

ViewConfiguration:https://android.googlesource.com/platform/frameworks/base/+/master/core/java/android/view/ViewConfiguration.java

三、小结

虽然这是一个非常小且未公开的功能,但是仍然能看出 Google 在为 Android 的系统安全问题做努力。

不过 Panic Detection 感觉更像是一个在 Android 系统中的镇定剂,让用户可以有响应的操作自己的设备,回到 Home 页,但是实际上,真正复杂的过程是如何卸载掉这些恶意程序。不过这个功能应该还在测试阶段,期待它的完善能让 Android 更安全。

Panic Detection 的改动,最早是于 7 月 7 日,被 XDA Developers 的开发者 @Mishaal Rahman 发现的,目前也被 Google 确认了。


推荐阅读:



您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存