李 宏,郭江波
(1.中國電子科技集團公司第五十四研究所,河北 石家莊 050081;2.河北科技大學 信息科學與工程學院,河北 石家莊 050018)
近年來,隨著智能手機的迅猛發展和普及,智能手機正改變著人們的生活方式,但隨之而來的手機丟失等問題也日益凸顯。發生手機丟失情況時,如何能快速、精準地尋找到丟失的手機就顯得尤為重要。針對這種情況,蘋果公司設計了一套比較完善的丟失手機定位解決方案,通過建立自己的服務器iCloud記錄并綁定用戶信息和蘋果設備ID,如果用戶蘋果手機丟失,則可以通過在PC端登錄自己的iCloud賬號實現定位丟失手機、鎖屏、播放鈴聲、銷毀iPhone上的用戶信息等功能。Android手機并沒有開發類似的功能,但一些安全衛士類的軟件,例如“360”和“騰訊”等公司設計實現的基于短信方式尋找丟失手機的方案[1],通過設置安全號碼,在手機丟失后安全號碼向丟失手機發送短信指令,而丟失手機通過監控短信的內容,獲得定位、播報音樂和恢復出廠設置等相關指令。但自從Android5.0版本推出后,引入了多項安全增強措施,越來越難獲得root權限,而應用軟件監控短信內容的做法也被Google公司拋棄。至此,傳統的基于短信方式尋找丟失手機的方案也因新版本的Android采用用戶授予短信發送權限的安全模式變得不那么可靠了;還有就是在拾到者或偷盜者更換掉手機的SIM卡之后,用戶丟失的手機就接收不到安全號碼發送的短信指令,丟失手機也不能執行相應的指令功能。而蘋果公司的基于iColud云服務方式找尋丟失手機的方式在Android系統上并不適用,首先IOS系統是閉源的,但Android系統是開源的[2],而且各大公司買入Android版權定制更改Android系統底層的源碼[3],尤其是對權限授予的管理各不相同,這就導致蘋果手機可以設置用戶首次使用時激活輸入身份驗證信息,而Android系統手機不能;其次驗證用戶的身份信息需要長期提供驗證云服務,投資成本太高,而且也說服不了所有Android系統手機生產廠家按照此規定去做。
通信協議的選擇需要考慮數據的實時、不丟、不重、保序、節能、流暢和安全這幾個因素,而長輪詢的方式是通過高頻率地從服務器拉取新消息[4],這不但增加服務器的壓力,浪費用戶的流量,而且消息仍然不夠及時[5],如果不考慮傳輸時間,最長的延遲就是輪詢的間隔,所以使用HTTP輪詢方式不可取。而消息的生產者主動推送消息[6],可以解決長輪詢的缺點。消息推送協議可以選擇XMPP協議[7]和MQTT協議,但XMPP協議較復雜、冗余(基于XML)、費流量、費電、部署硬件成本高,這主要是因為XML有大量的標簽冗余信息,網絡流量的70%都消耗在XMPP協議層了,這不適合手機防盜方案,而MQTT協議簡潔、小巧、可擴展性強、省流量、省電,適合做大量節點弱和網絡差的場景,非常適合現在移動互聯網的基礎設施,是推送服務的最佳協議。
針對傳統的基于短信方式Android手機防盜的弊端[8],提出了一種基于MQTT協議的Android手機防盜設計方案[9]。這種設計方案與蘋果公司的方案類似,也是先綁定設備的ID并通過網絡傳輸相關指令執行相應操作。
MQTT協議是一個基于客戶端-服務器,構建于TCP/IP協議上[10],基于消息發布/訂閱(publish/subscribe)模式的輕量級即時通信協議[11]。其特點是傳輸代價較小(協議頭部只有2 Byte),適用于低帶寬、低耗電量不可靠連接、嵌入式設備和CPU內存緊張的設備[12],可以以極少的代碼和有限的帶寬為遠程設備提供實時可靠的消息服務[13]。MQTT協議目前在物聯網、小型化設備、智能家居以及移動設備等方面得到了較廣泛的應用。
MQTT協議實現方式如圖1所示。MQTT協議有3種身份:發布者(Publisher)、代理(Broker)和訂閱者(Subscriber)。其中,客戶端既可以是消息的發布者又可以是消息的訂閱者,消息代理是服務器,而消息發布者又可以訂閱接收自己發布的消息。MQTT服務端被稱為消息代理(Broker),它是消息發送方和訂閱相同Topic消息的接收方之間的中介,服務器是用來處理客戶端網絡連接請求、訂閱和取消訂閱消息請求、接收客戶端消息體并轉發給訂閱相同Topic的客戶端。

圖1 MQTT協議實現方式
本方案的功能主要包括Android手機定位、鈴聲報警、鎖定手機和刪除數據這4個功能。Android手機定位實現在用戶丟失手機時通過安全手機能夠快速準確地定位;鈴聲報警實現使丟失手機播報鈴聲,輔助定位功能幫助用戶尋找丟失手機;鎖定手機實現對用戶丟失的手機鎖屏操作,用以保護隱私內容和財產安全,一旦鎖定手機,其他人將不能開啟該手機;刪除數據實現對用戶手機刪除一切數據功能,是為了應對用戶在無法找到丟失手機時,為防止隱私信息泄露和財產損失而執行恢復出廠設置操作,銷毀用戶使用的一切痕跡。用例示意圖如圖2所示。

圖2 用例示意
系統主要由用戶手機、消息代理服務器Apollo和安全手機3部分組成。用戶手機在丟失以后通過網絡接收手機定位、鈴聲報警、鎖定手機或刪除數據的指令,從而執行相應操作;Apollo的作用是轉發用戶手機和安全手機發送的消息;安全手機是控制端,通過用戶的需要向用戶手機發送相應指令。
本方案的總體框架結構是基于客戶端/服務器模式,MQTT服務器采用Apache推出的基于ActiveMQ的消息代理服務器Apollo,Apollo是一個更快、更強健、更容易維護的流文本定向消息協議(Streaming Text Orientated Message Protocol,STOMP)服務器;用戶手機與安全手機通信采用IBM輕量級的消息發布/訂閱(publish/subscribe)的即時通信協議MQTT協議,2個手機之間的相互通信都要經過Apollo服務器作為中轉,這其中包括安全手機向用戶手機發送的相關指令和用戶手機向安全手機返回的定位信息;SQLite是Android本地的數據庫,它用于保存用戶設置的主題(Topic),只有當訂閱主題一致時用戶才能通過MQTT協議接收服務器轉發的消息。基于MQTT協議的Android手機防盜方案總體框架結構圖如圖3所示。

圖3 基于MQTT協議的Android手機防盜總體架構
基于MQTT協議的Android手機防盜方案主要針對Android手機在丟失時如何快速準確定位尋找到手機而設計的,其主要功能模塊包括手機定位、鈴聲報警、鎖定手機和刪除數據這些功能。根據MQTT協議v3.1版本要求客戶端ID必須小于23 Byte的要求,用只有15 Byte的手機國際移動設備身份碼(International Mobile Equipment Identity,IMEI)這一手機設備唯一ID作為與服務器端連接的clientId。而訂閱的主題(Topic)可以由用戶自己選擇填寫,這樣就能實現用戶手機與安全手機之間互換角色,因為訂閱的主題不一樣,它們收發的信息也是不一樣的。
用戶手機與安全手機之間的通信都需要發送一個CONNECT報文與服務器Apollo建立連接,然后2部手機都向服務器訂閱一個相同的TopicName,這樣2部手機就可以實現消息通信了,用戶手機可以根據規定的指令協議按照安全手機發送的指令實現相應功能。用戶手機通過mqttReceiverService類實現與服務器進行網絡連接以及訂閱相關主題等操作,mqttReceiverService類繼承于Service類;安全手機則通過mqttSenderIS類實現網絡連接與訂閱主題等操作。其主要功能實現如下。
Android手機定位功能是在用戶手機和安全手機設置相同的訂閱主題(Topic)的情況下,用戶手機必須開啟一個Service來監聽安全手機發送相應的指令,這個監聽類就是mqttReceiverService類,而安全手機通過mqttSenderIS類向用戶手機發送“dingwei#”指令,antitheftmqttsenderIS類繼承于IntentService類,用戶手機接收到定位消息指令后,會通過locationService類實現定位功能,然后通過locationSenderIS類向安全手機發送定位信息,而安全手機通過location-ReceiverService類監聽用戶手機發送的定位信息[14]。通過百度地圖技術實現定位信息展示,用戶手機通過定位獲取百度地圖經緯度信息,而安全手機收到此信息以后進行逆地址解析,解析出結構化地址(即用戶能看懂的地址信息),并顯示在百度地圖的圖層界面上,手機定位活動圖如圖4所示。此項功能在系統安裝時需要用戶授予本系統定位權限,當用戶開啟精確定位服務時,定位信息會更加精準。
這項功能是為了輔助用戶能夠更精確地尋找到丟失的手機。用戶通過定位獲取手機位置后,可以通過鈴聲報警獲取手機具體在什么位置。用戶手機通過mqttReceiverService類監聽相應的指令,安全手機通過mqttSenderIS類向用戶手機發送播放報警鈴聲指令,即“baojing#”。鈴聲報警的具體功能是通過ringAlarm函數實現的。此功能需要動態獲得音頻管理器AudioManager權限,以便在用戶設置靜音或者振動模式時能開啟聲音并調節音量大小。
本功能是對用戶手機進行鎖屏保護,用戶丟失手機時,為了防止他人偷窺用戶隱私或者竊取用戶財產,需要對丟失的手機采取相應的保護措施。安全手機需要通過mqttSenderIS類向用戶手機發送鎖屏指令并將鎖屏密碼一起發送給用戶手機;用戶手機開啟mqttReceiverService服務監聽安全手機發送“suoping#”指令并解析指令協議中包含的鎖屏密碼。

圖4 手機定位活動示意
刪除數據功能主要是為了用戶在找不到丟失手機的情況下,為防止得到者窺探用戶隱私或者竊取財產等行為[15],不得已采用執行數據恢復出廠設置操作而刪除丟失手機中的數據[16]。安全手機通過mqttSenderIS類向用戶手機發送刪除指令;用戶手機首先開啟mqttReceiverService服務監聽安全手機發送“shanchu#”指令,然后執行“wipedata”操作。恢復出廠設置也需要動態地獲取系統權限。
鎖定手機和刪除數據這2項功能都必須激活系統管理員權限,激活權限需要一個繼承Device-AdminReceiver的廣播接收者,該廣播接收者的作用是激活一個授權的組件,幫助本系統申請系統管理員權限。獲取權限之后,通過設備管理類Device-PolicyManager的lockNow函數和resetPassword函數實現密碼鎖屏功能,通過wipeData函數實現數據刪除功能。鎖屏和恢復出廠設置這2個功能必須要考慮Android系統版本的問題,因為Google公司為了Android系統的安全考慮,會逐漸加大對申請系統權限、申請成功以后執行業務的監管。
為了驗證方案的可行性和有效性,進行了相應程序設計并搭建了測試環境,測試環境包括2部Android智能手機(1部為用戶手機,另一部為安全手機)和1個MQTT服務器。系統測試需要有4G或Wifi網絡環境。2部Android智能手機需要安裝設計的手機防盜App,通過配置文件設置來區分是運行在用戶手機或安全手機上。MQTT服務器端需要安裝Apollo并進行相應的配置。
下面以鈴聲報警功能為例進行測試過程說明。
① 2部手機都開啟網絡連接功能,獲取clientId(IMEI碼),并連接到MQTT服務器(Apollo);
② 2部手機TopicName都設置為ringOrder;
③ 2部手機向MQTT服務器訂閱相同主題;
④ 安全手機通過點擊“鈴聲報警開啟”按鈕向MQTT服務器發送鈴聲報警“baojing#”指令,其界面如圖5所示;
⑤ 用戶手機從MQTT服務器接收到鈴聲報警“jingbao#”指令并開始響鈴報警,其界面如圖6所示。

圖5 安全手機端鈴聲 報警界面

圖6 用戶手機端鈴聲 報警界面
測試表明,該方案實現了Android手機定位、鈴聲報警、鎖定手機和刪除數據等功能,且系統運行效果良好,有效地證明了該方案的可行性。
本文提出了一種Android手機防盜設計方案,由于該方案基本調用的都是Android應用層和系統層API的函數,而不用處理底層繁瑣的業務,這樣大大縮短了開發周期,降低了開發難度和開發成本。經測試該方案實現了Android手機定位、鈴聲報警、鎖定手機和刪除數據功能,運行效果良好,為其他基于Android手機防盜應用項目的開發提供了參考。
[1]汪文斌,楊少輝.基于短信控制的Android手機安全系統的設計與實現[J].軟件,2015,36(6):21-25.
[2]郭宏志.Android應用開發詳解[M].北京:電子工業出版社,2011.
[3]吳亞峰,索依娜.Android核心技術與實例詳解[M].北京:電子工業出版社,2010.
[4]李曄,王勁林.一種面向移動終端的內容定時推送平臺[J].微計算機應用,2008(10):97-99.
[5]王克鋒.基于Android的信息推送管理系統的設計和實現[D].大連:大連理工大學,2012.
[6]萬爽.基于Android平臺的即時位置信息推送系統設計與實現[D].成都:西南交通大學,2016.
[7]黃偉敏.基于XMPP協議的Android即時通信系統設計[J].計算機系統應用,2011(8):57-59.
[8]孫其博.移動互聯網安全綜述[J].無線電通信技術,2016,42(2):1-8.
[9]向東南,申敏,陳政貴.LTE核心網安全缺陷的研究[J].無線電通信技術,2016,42(1):31-34.
[10] 林滸,張家銘,楊海波.基于MQTT協議的即時消息業務設計與實現[J].計算機系統應用,2017,26(3):219-224.
[11] 于金剛,耿云飛,楊海波,等.基于MQTT協議的消息引擎服務器的設計與實現[J].小型微型計算機系統,2016,37(10):2238-2243.
[12] 關慶余,李鴻彬,于波.MQTT協議在Android平臺上的研究與應用[J].計算機系統應用,2014,23(4):197-200.
[13] 楊鵬.基于MQTT協議的信息推送平臺系統的設計與實現[D].成都:電子科技大學,2015.
[14] 莫晗飛,王春東,馮超然,等.基于安卓的手機防盜追蹤與隱私控制系統的研究[J].天津理工大學學報,2014,30(3):21-25.
[15] 王靖瑜,徐明昆,王浩宇,等.Android應用隱私條例與敏感行為一致性檢測[J/OL].計算機科學與探索,[2017-11-28].http:∥kns.cnki.net/detail/11.5602.TP.20171128.0857.010.html
[16] 魏晉.基于Android的手機遺失后數據自毀系統的設計與實現[D].軟件,2017,38(1):34-36.