“没有想不到,只要做不到”。在强烈的猎奇心的差遣下,按照料想,阐发和模拟实现了一个类似的场景。手艺原理就是在Android手机上安拆用于窃听的法式假装成关机形态后实现监听、偷拍等操做,并长途发送给坏人。
先看看效果,手机固然被“关机”了,但是德律风仍然能够拨通,那时声音会通过德律风传给黑客而让用户毫不察觉。
安卓系统源码阐发
要对关机做四肢举动,先要领会它到底是怎么关机的。来看下Android源码对关机事务的处置。从按电源键起头,下面是
PhoneWindowManager.interceptKeyBeforeQueueing办法的部门代码。interceptKeyBeforeQueueing办法次要做一些对特殊按键的处置,那里能够看到当电源键按下时做一些处置,最初进入了interceptPowerKeyDown。
在interceptPowerKeyDown中,判断参数handled,若是为false就延时500ms触发一个Runnable,那里次要负责检测长按事务。
进入
LONG_PRESS_POWER_GLOBAL_ACTIONS那个case,别离施行以下动做:1. 倡议振动;
2. 恳求封闭所有窗口;
3. 显示关机对话框。
存眷一下第三步,那里挪用showGlobalActionsDialog显示一个关机选择对话框,进入那个办法后后间接转入GlobalActions.showDialog
在showDialog中再挪用createDialog创建一个对话框列表供用户选择“关机”、“飞翔形式”、“静音”等操做,以下为createDialog的部门代码,
留意onPress办法,那里挪用
mWindowManagerFuncs.shutdown。代码施行到那里framework层的工做根本就完毕了,再往下阐发就是封闭系统办事,还有Power.cpp中实现的电源办理,施行系统挪用封闭内核等。要实现之前说的关机窃听不消再往下看,只要领会到那一步就够了。不外还有个问题,mWindowManagerFuncs那个引用是怎么得到的,从适才的代码起头向上回溯,最末找到了PhoneWindowManager类的init办法,
Xposed模块实现
领会了Android处置关机的流程以后,想一想怎么关机窃听呢?断电了还怎么窃听?你问我,我也不晓得。不外要实现看上去像是“关机窃听”,那我却是晓得怎么做。无非就是播放关灵活画,然后让手机拆死,让用户认为它实的关机了,其实只是屏幕黑了、声音没了、按键没反响了罢了。
如今要做的是当用户要关机的时候阻遏用户关机,而且施行本身的“关机窃听”方案。劫持关灵活做只需要挂钩mWindowManagerFuncs对象的shutdown办法。挂钩的话那里我们接纳的是xposed框架。
之前说到mWindowManagerFuncs的引用是在PhoneWindowManager的init中传过来的,从那里动手吧,Hook之
在init办法结尾处插入一段代码,把this对象(即phoneWindowManager的引用)保留下来,取到this.mWindowManagerFuncs,反射它,操纵它再次Hook它本身的shutdown办法。
在shutdown施行之前保留一个关机flag,然后显示关灵活画,间接返回办法,阻遏系统实在关机。在播放关灵活画的同时还延时5秒抛了一个Runnable。
关机时保留的flag次要用来阻遏一些系统事务,如按键、屏幕唤醒等,使假装关机愈加实在,
5秒以后封闭关机窗口,封闭系统音量,休眠机器,放一个Recriver监听来电,一有来电主动接听。
发现与防御
要发现那种攻击其实也很简单,只要抓住他的弱点——关机形态下查抄手机和SIM卡的利用情况,如通话记录、流量记录等,其实有强迫症的同窗能够把手机电池抠出来。但是如今良多手机不克不及扣了那就放远一点再远一点。
至于防御,要及时更新系统,不要安拆未知来源的APP。所以仍是一句话:珍爱Android,远离root。
文中提到的东西能够在“腾讯平安应急响应中心”的尝试室中下载到
地址:
http://security.tencent.com/index.php/opensource/detail/14