美文网首页Android知识Android技术知识Android开发经验谈
Google 给 7.1+ 加了段代码,让你觉得更安全了吗?

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

作者: 承香墨影 | 来源:发表于2017-07-24 00:20 被阅读138次

    版权声明:

    本账号发布文章均来自公众号,承香墨影(cxmyDev),版权归承香墨影所有。

    未经允许,不得转载。

    一、前言

    虽然看到这篇文章朋友,知道如何预防一些 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 确认了。

    公众号二维码.jpg

    相关文章

      网友评论

        本文标题:Google 给 7.1+ 加了段代码,让你觉得更安全了吗?

        本文链接:https://www.haomeiwen.com/subject/mrsvkxtx.html