设为首页 加入收藏 联系我们
关于联盟 联盟工作 联盟成员 WAPI产业链 WAPI专题 行业资讯 咨询测试 WAPI互操作认定 招贤纳士
 
 
 
今日要闻
窃听风云——关机窃听原理与实现
【发布时间:2015-4-1】 【来源:网络安全——红黑联盟】
就在不久前的GeekPwn大赛(一个旨在演示智能设备安全漏洞利用、宣传安全意识的会议)上,来自KeenTeam的高手现场演示了Android手机在关机状态下被黑客通过听筒进行窃听的全过程,如此炫酷的神技原来果真存在。

    “没有想不到,只有做不到”。在强烈的好奇心的驱使下,笔者根据猜想,分析和模仿实现了一个类似的场景。技术原理就是在Android手机上安装用于窃听的程序伪装成关机状态后实现监听、偷拍等操作,并远程发送给坏人。

    先看看效果,手机虽然被“关机”了,但是电话仍然可以拨通,这时声音会通过电话传给黑客而让用户毫不察觉。
 

安卓系统源码分析

    要对关机做手脚,先要了解它到底是怎么关机的。来看下Android源码对关机事件的处理。从按电源键开始,下面是PhoneWindowManager.interceptKeyBeforeQueueing方法的部分代码,如图1。
 

    图 1

    interceptKeyBeforeQueueing方法主要做一些对特殊按键的处理,这里可以看到当电源键按下时做一些处理,最后进入了interceptPowerKeyDown。
 

    图 2

    如图2,在interceptPowerKeyDown中,判断参数handled,如果为false就延时500ms触发一个Runnable,这里主要负责检测长按事件。
 

    图 3

   如图3,进入LONG_PRESS_POWER_GLOBAL_ACTIONS这个case,分别执行以下动作:

    1. 发起振动;

    2. 请求关闭所有窗口;

   3. 显示关机对话框。

    关注一下第三步,这里调用showGlobalActionsDialog显示一个关机选择对话框,进入这个方法后后直接转入GlobalActions.showDialog,如图4。
 

    图 4

    如图4,在showDialog中再调用createDialog创建一个对话框列表供用户选择“关机”、“飞行模式”、“静音”等操作,以下为createDialog的部分代码,如图5。
 

    图 5

    注意图5的onPress方法,这里调用mWindowManagerFuncs.shutdown。代码执行到这里framework层的工作基本就结束了,再往下分析就是关闭系统服务,还有Power.cpp中实现的电源管理,执行系统调用关闭内核等。要实现之前说的关机窃听不用再往下看,只要了解到这一步就够了。

    不过还有个问题,mWindowManagerFuncs这个引用是怎么得到的,从刚才的代码开始向上回溯,最终找到了PhoneWindowManager类的init方法,如图6。
 

    图 6

    Xposed模块实现

    了解了Android处理关机的流程以后,想一想怎么关机窃听呢?断电了还怎么窃听?你问我,我也不知道。不过要实现看上去像是“关机窃听”,这我倒是知道怎么做。无非就是播放关机动画,然后让手机装死,让用户以为它真的关机了,其实只是屏幕黑了、声音没了、按键没反应了而已。

    现在要做的是当用户要关机的时候阻止用户关机,并且实施自己的“关机窃听”计划。劫持关机动作只需要挂钩mWindowManagerFuncs对象的shutdown方法。挂钩的话这里我们采用的是xposed框架。

    之前说到mWindowManagerFuncs的引用是在PhoneWindowManager的init中传过来的,从这里入手吧,Hook之,如图7。
 

    图 7

    如图8,在init方法结尾处插入一段代码,把this对象(即phoneWindowManager的引用)保存下来,取到this.mWindowManagerFuncs,反射它,利用它再次Hook它自己的shutdown方法。
 

    图 8

    如图9在shutdown执行之前保存一个关机flag,然后显示关机动画,直接返回方法,阻止系统真实关机。在播放关机动画的同时还延时5秒抛了一个Runnable。
 

    图 9

    关机时保存的flag主要用来阻止一些系统事件,如按键、屏幕唤醒等,使伪装关机更加真实,如图10。
 

    图 10

    5秒以后关闭关机窗口,关闭系统音量,休眠机器,放一个Recriver监听来电,一有来电自动接听,如图11。
 

    图 11

    发现与防御

    要发现这种攻击其实也很简单,只要抓住他的弱点——关机状态下检查手机和SIM卡的使用情况,如通话记录、流量记录等,实在有强迫症的同学可以把手机电池抠出来(要是你是高大上的iPhone系列那就把手机放远点,再远一点)。
  


 
 


电话:010-82351181/82357730   传真:010-82351181 Ext.1901  邮箱:wapia@wapia.org; wapi@wapia.org

地址:北京市海淀区知春路27号量子芯座1608室 邮编 :100191