@Monster 《窃听风云》关机窃听原理与实现
斯诺登此前在接受采访时曾指出美国国家安全局(NSA)可以对手机进行窃听,即使是在关机的情况下也不能幸免。
就在不久前的GeekPwn大赛(一个旨在演示智能设备安全漏洞利用、宣传安全意识的会议)上,来自KeenTeam的高手现场演示了Android手机在关机状态下被黑客通过听筒进行窃听的全过程,如此炫酷的神技原来果真存在。
“没有想不到,只有做不到”。在强烈的好奇心的驱使下,笔者根据猜想,分析和模仿实现了一个类似的场景。技术原理就是在Android手机上安装用于窃听的程序伪装成关机状态后实现监听、偷拍等操作,并远程发送给坏人。
先看看效果,手机虽然被“关机”了,但是电话仍然可以拨通,这时声音会通过电话传给黑客而让用户毫不察觉。
安卓系统源码分析
要对关机做手脚,先要了解它到底是怎么关机的。来看下Android源码对关机事件的处理。从按电源键开始,下面是PhoneWindowManager.interceptKeyBeforeQueueing方法的部分代码,如图1。
interceptKeyBeforeQueueing方法主要做一些对特殊按键的处理,这里可以看到当电源键按下时做一些处理,最后进入了interceptPowerKeyDown。
如图2,在interceptPowerKeyDown中,判断参数handled,如果为false就延时500ms触发一个Runnable,这里主要负责检测长按事件。
如图3,进入LONG_PRESS_POWER_GLOBAL_ACTIONS这个case,分别执行以下动作:
1. 发起振动;
2. 请求关闭所有窗口;
3. 显示关机对话框。
关注一下第三步,这里调用showGlobalActionsDialog显示一个关机选择对话框,进入这个方法后后直接转入GlobalActions.showDialog,如图4。
如图4,在showDialog中再调用createDialog创建一个对话框列表供用户选择“关机”、“飞行模式”、“静音”等操作,以下为createDialog的部分代码,如图5。
注意图5的onPress方法,这里调用mWindowManagerFuncs.shutdown。代码执行到这里framework层的工作基本就结束了,再往下分析就是关闭系统服务,还有Power.cpp中实现的电源管理,执行系统调用关闭内核等。要实现之前说的关机窃听不用再往下看,只要了解到这一步就够了。
不过还有个问题,mWindowManagerFuncs这个引用是怎么得到的,从刚才的代码开始向上回溯,最终找到了PhoneWindowManager类的init方法,如图6。
Xposed模块实现
了解了Android处理关机的流程以后,想一想怎么关机窃听呢?断电了还怎么窃听?你问我,我也不知道。不过要实现看上去像是“关机窃听”,这我倒是知道怎么做。无非就是播放关机动画,然后让手机装死,让用户以为它真的关机了,其实只是屏幕黑了、声音没了、按键没反应了而已。
现在要做的是当用户要关机的时候阻止用户关机,并且实施自己的“关机窃听”计划。劫持关机动作只需要挂钩mWindowManagerFuncs对象的shutdown方法。挂钩的话这里我们采用的是xposed框架。
之前说到mWindowManagerFuncs的引用是在PhoneWindowManager的init中传过来的,从这里入手吧,Hook之,如图7。
如图8,在init方法结尾处插入一段代码,把this对象(即phoneWindowManager的引用)保存下来,取到this.mWindowManagerFuncs,反射它,利用它再次Hook它自己的shutdown方法。
如图9在shutdown执行之前保存一个关机flag,然后显示关机动画,直接返回方法,阻止系统真实关机。在播放关机动画的同时还延时5秒抛了一个Runnable。
关机时保存的flag主要用来阻止一些系统事件,如按键、屏幕唤醒等,使伪装关机更加真实,如图10。
5秒以后关闭关机窗口,关闭系统音量,休眠机器,放一个Recriver监听来电,一有来电自动接听,如图11。
发现与防御
要发现这种攻击其实也很简单,只要抓住他的弱点——关机状态下检查手机和SIM卡的使用情况,如通话记录、流量记录等,实在有强迫症的同学可以把手机电池抠出来(要是你是高大上的iPhone系列那就把手机放远点,再远一点)。
至于防御,要及时更新系统,不要安装未知来源的APP。总之还是一句话:珍爱Android,远离root。
文中提到的工具可以在“腾讯安全应急响应中心”的实验室中下载到
地址:http://security.tencent.com/index.php/opensource/detail/14
欢迎大家与我们交流。
安卓系统源码分析
要对关机做手脚,先要了解它到底是怎么关机的。来看下Android源码对关机事件的处理。从按电源键开始,下面是PhoneWindowManager.interceptKeyBeforeQueueing方法的部分代码,如图1。
interceptKeyBeforeQueueing方法主要做一些对特殊按键的处理,这里可以看到当电源键按下时做一些处理,最后进入了interceptPowerKeyDown。
如图2,在interceptPowerKeyDown中,判断参数handled,如果为false就延时500ms触发一个Runnable,这里主要负责检测长按事件。
如图3,进入LONG_PRESS_POWER_GLOBAL_ACTIONS这个case,分别执行以下动作:
1. 发起振动;
2. 请求关闭所有窗口;
3. 显示关机对话框。
关注一下第三步,这里调用showGlobalActionsDialog显示一个关机选择对话框,进入这个方法后后直接转入GlobalActions.showDialog,如图4。
如图4,在showDialog中再调用createDialog创建一个对话框列表供用户选择“关机”、“飞行模式”、“静音”等操作,以下为createDialog的部分代码,如图5。
注意图5的onPress方法,这里调用mWindowManagerFuncs.shutdown。代码执行到这里framework层的工作基本就结束了,再往下分析就是关闭系统服务,还有Power.cpp中实现的电源管理,执行系统调用关闭内核等。要实现之前说的关机窃听不用再往下看,只要了解到这一步就够了。
不过还有个问题,mWindowManagerFuncs这个引用是怎么得到的,从刚才的代码开始向上回溯,最终找到了PhoneWindowManager类的init方法,如图6。
Xposed模块实现
了解了Android处理关机的流程以后,想一想怎么关机窃听呢?断电了还怎么窃听?你问我,我也不知道。不过要实现看上去像是“关机窃听”,这我倒是知道怎么做。无非就是播放关机动画,然后让手机装死,让用户以为它真的关机了,其实只是屏幕黑了、声音没了、按键没反应了而已。
现在要做的是当用户要关机的时候阻止用户关机,并且实施自己的“关机窃听”计划。劫持关机动作只需要挂钩mWindowManagerFuncs对象的shutdown方法。挂钩的话这里我们采用的是xposed框架。
之前说到mWindowManagerFuncs的引用是在PhoneWindowManager的init中传过来的,从这里入手吧,Hook之,如图7。
如图8,在init方法结尾处插入一段代码,把this对象(即phoneWindowManager的引用)保存下来,取到this.mWindowManagerFuncs,反射它,利用它再次Hook它自己的shutdown方法。
如图9在shutdown执行之前保存一个关机flag,然后显示关机动画,直接返回方法,阻止系统真实关机。在播放关机动画的同时还延时5秒抛了一个Runnable。
关机时保存的flag主要用来阻止一些系统事件,如按键、屏幕唤醒等,使伪装关机更加真实,如图10。
5秒以后关闭关机窗口,关闭系统音量,休眠机器,放一个Recriver监听来电,一有来电自动接听,如图11。
发现与防御
要发现这种攻击其实也很简单,只要抓住他的弱点——关机状态下检查手机和SIM卡的使用情况,如通话记录、流量记录等,实在有强迫症的同学可以把手机电池抠出来(要是你是高大上的iPhone系列那就把手机放远点,再远一点)。
至于防御,要及时更新系统,不要安装未知来源的APP。总之还是一句话:珍爱Android,远离root。
文中提到的工具可以在“腾讯安全应急响应中心”的实验室中下载到
地址:http://security.tencent.com/index.php/opensource/detail/14
欢迎大家与我们交流。关注公众号:拾黑(shiheibook)了解更多
[广告]赞助链接:
四季很好,只要有你,文娱排行榜:https://www.yaopaiming.com/
让资讯触达的更精准有趣:https://www.0xu.cn/
关注网络尖刀微信公众号随时掌握互联网精彩
赞助链接
排名
热点
搜索指数
- 1 习近平同马克龙交流互动的经典瞬间 7904101
- 2 日本飞机多次抵近滋扰中国海军训练 7808600
- 3 中国队今晚将再次对阵日本队 7714370
- 4 三项世界级成就见证中国实力 7616792
- 5 全网寻找的用围巾擦地女乘客找到了 7521407
- 6 烈犬撕咬路人致死 主人需承担刑责吗 7427533
- 7 轰-6甲投下我国第一枚氢弹 7327763
- 8 荷兰大臣:没想到中方叫停芯片出口 7232395
- 9 男子装电表箱触电身亡 家属索赔142万 7137019
- 10 今日大雪 要做这些事 7045331







站内编辑
