溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

竊聽風(fēng)云——關(guān)機竊聽原理與實現(xiàn)

發(fā)布時間:2020-08-25 17:16:20 來源:網(wǎng)絡(luò) 閱讀:597 作者:FKwuxing 欄目:移動開發(fā)

前言

斯諾登此前在接受采訪時曾指出美國國家安全局(NSA)可以對手機進行竊聽,即使是在關(guān)機的情況下也不能幸免。

竊聽風(fēng)云——關(guān)機竊聽原理與實現(xiàn)
就在不久前的GeekPwn大賽(一個旨在演示智能設(shè)備安全漏洞利用、宣傳安全意識的會議)上,來自KeenTeam的高手現(xiàn)場演示了Android手機在關(guān)機狀態(tài)下被***通過聽筒進行竊聽的全過程,如此炫酷的神技原來果真存在。
視頻地址:http://v.qq.com/page/v/e/x/v0141kvwrex.html
“沒有想不到,只有做不到”。在強烈的好奇心的驅(qū)使下,筆者根據(jù)猜想,分析和模仿實現(xiàn)了一個類似的場景。技術(shù)原理就是在Android手機上安裝用于竊聽的程序偽裝成關(guān)機狀態(tài)后實現(xiàn)監(jiān)聽、偷拍等操作,并遠程發(fā)送給壞人。
先看看效果,手機雖然被“關(guān)機”了,但是電話仍然可以撥通,這時聲音會通過電話傳給***而讓用戶毫不察覺。


竊聽風(fēng)云——關(guān)機竊聽原理與實現(xiàn)

安卓系統(tǒng)源碼分析

要對關(guān)機做手腳,先要了解它到底是怎么關(guān)機的。來看下Android源碼對關(guān)機事件的處理。從按電源鍵開始,下面是PhoneWindowManager.interceptKeyBeforeQueueing方法的部分代碼,如圖1。

竊聽風(fēng)云——關(guān)機竊聽原理與實現(xiàn)

圖 1
interceptKeyBeforeQueueing方法主要做一些對特殊按鍵的處理,這里可以看到當(dāng)電源鍵按下時做一些處理,最后進入了interceptPowerKeyDown。

竊聽風(fēng)云——關(guān)機竊聽原理與實現(xiàn)
圖 2
如圖2,在interceptPowerKeyDown中,判斷參數(shù)handled,如果為false就延時500ms觸發(fā)一個Runnable,這里主要負責(zé)檢測長按事件。

竊聽風(fēng)云——關(guān)機竊聽原理與實現(xiàn)

圖 3
如圖3,進入LONG_PRESS_POWER_GLOBAL_ACTIONS這個case,分別執(zhí)行以下動作:

1.     發(fā)起振動;

2.     請求關(guān)閉所有窗口;

3.     顯示關(guān)機對話框。
關(guān)注一下第三步,這里調(diào)用showGlobalActionsDialog顯示一個關(guān)機選擇對話框,進入這個方法后后直接轉(zhuǎn)入GlobalActions.showDialog,如圖4。

竊聽風(fēng)云——關(guān)機竊聽原理與實現(xiàn)

圖 4
如圖4,在showDialog中再調(diào)用createDialog創(chuàng)建一個對話框列表供用戶選擇“關(guān)機”、“飛行模式”、“靜音”等操作,以下為createDialog的部分代碼,如圖5。

竊聽風(fēng)云——關(guān)機竊聽原理與實現(xiàn)

圖 5
注意圖5的onPress方法,這里調(diào)用mWindowManagerFuncs.shutdown。代碼執(zhí)行到這里framework層的工作基本就結(jié)束了,再往下分析就是關(guān)閉系統(tǒng)服務(wù),還有Power.cpp中實現(xiàn)的電源管理,執(zhí)行系統(tǒng)調(diào)用關(guān)閉內(nèi)核等。要實現(xiàn)之前說的關(guān)機竊聽不用再往下看,只要了解到這一步就夠了。
不過還有個問題,mWindowManagerFuncs這個引用是怎么得到的,從剛才的代碼開始向上回溯,最終找到了PhoneWindowManager類的init方法,如圖6。

竊聽風(fēng)云——關(guān)機竊聽原理與實現(xiàn)

圖 6

 

Xposed模塊實現(xiàn)
了解了Android處理關(guān)機的流程以后,想一想怎么關(guān)機竊聽呢?斷電了還怎么竊聽?你問我,我也不知道。不過要實現(xiàn)看上去像是“關(guān)機竊聽”,這我倒是知道怎么做。無非就是播放關(guān)機動畫,然后讓手機裝死,讓用戶以為它真的關(guān)機了,其實只是屏幕黑了、聲音沒了、按鍵沒反應(yīng)了而已。
現(xiàn)在要做的是當(dāng)用戶要關(guān)機的時候阻止用戶關(guān)機,并且實施自己的“關(guān)機竊聽”計劃。劫持關(guān)機動作只需要掛鉤mWindowManagerFuncs對象的shutdown方法。掛鉤的話這里我們采用的是xposed框架。
之前說到mWindowManagerFuncs的引用是在PhoneWindowManager的init中傳過來的,從這里入手吧,Hook之,如圖7。

竊聽風(fēng)云——關(guān)機竊聽原理與實現(xiàn)
圖 7
如圖8,在init方法結(jié)尾處插入一段代碼,把this對象(即phoneWindowManager的引用)保存下來,取到this.mWindowManagerFuncs,反射它,利用它再次Hook它自己的shutdown方法。

竊聽風(fēng)云——關(guān)機竊聽原理與實現(xiàn)
圖 8

如圖9在shutdown執(zhí)行之前保存一個關(guān)機flag,然后顯示關(guān)機動畫,直接返回方法,阻止系統(tǒng)真實關(guān)機。在播放關(guān)機動畫的同時還延時5秒拋了一個Runnable。

竊聽風(fēng)云——關(guān)機竊聽原理與實現(xiàn)

圖 9
關(guān)機時保存的flag主要用來阻止一些系統(tǒng)事件,如按鍵、屏幕喚醒等,使偽裝關(guān)機更加真實,如圖10。

竊聽風(fēng)云——關(guān)機竊聽原理與實現(xiàn)

圖 10
5秒以后關(guān)閉關(guān)機窗口,關(guān)閉系統(tǒng)音量,休眠機器,放一個Recriver監(jiān)聽來電,一有來電自動接聽,如圖11。

竊聽風(fēng)云——關(guān)機竊聽原理與實現(xiàn)

圖 11

發(fā)現(xiàn)與防御
要發(fā)現(xiàn)這種***其實也很簡單,只要抓住他的弱點——關(guān)機狀態(tài)下檢查手機和SIM卡的使用情況,如通話記錄、流量記錄等,實在有強迫癥的同學(xué)可以把手機電池摳出來(要是你是高大上的iPhone系列那就把手機放遠點,再遠一點)。
至于防御,要及時更新系統(tǒng),不要安裝未知來源的APP??傊€是一句話:珍愛Android,遠離root。

文中提到的工具可以在“騰訊安全應(yīng)急響應(yīng)中心”的實驗室中下載到
地址:http://security.tencent.com/index.php/opensource/detail/14


向AI問一下細節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI