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

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

一、前言

虽然看到这篇文章朋友,知道如何预防一些 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 模式,当触发到它的时候,会回到主屏幕。

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

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

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

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

开关配置我们已经了解到了,后面的思路,其实有点像我们比较常见,点击两次退出 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 确认了。

【本文为51CTO专栏作者“张旸”的原创稿件,转载请通过微信公众号联系作者获取授权】

戳这里,看该作者更多好文

责任编辑:武晓燕 来源: 51CTO专栏
相关推荐

2016-03-28 10:19:54

代码智慧人类

2013-07-15 16:55:45

2018-02-06 08:31:27

2022-08-28 10:08:53

前端代码前端

2012-10-24 09:42:27

数据安全BYOD云数据

2020-08-13 10:11:14

物联网安全智能家居物联网

2018-03-22 12:44:13

2023-09-06 12:55:42

2014-02-26 15:57:41

eLTE华为

2021-03-28 16:55:11

Python工具链代码

2018-05-14 17:30:25

2010-08-24 10:21:00

2011-08-01 15:45:47

垃圾广告电子邮箱安全

2022-05-09 13:37:44

VR智慧城市智慧交通

2017-09-08 12:15:54

Python代码Pythonic

2019-01-15 17:40:03

华为

2022-10-08 07:54:24

JavaScriptAPI代码

2022-05-10 10:28:21

JavaScript代码

2019-06-19 08:09:05

CSSJavaScript前端

2021-10-28 19:35:02

代码main方法
点赞
收藏

51CTO技术栈公众号