李 宏,郭江波
(1.中國電子科技集團公司第五十四研究所,河北 石家莊 050081;2.河北科技大學 信息科學與工程學院,河北 石家莊 050018)
近年來,隨著智能手機的迅猛發(fā)展和普及,智能手機正改變著人們的生活方式,但隨之而來的手機丟失等問題也日益凸顯。發(fā)生手機丟失情況時,如何能快速、精準地尋找到丟失的手機就顯得尤為重要。針對這種情況,蘋果公司設計了一套比較完善的丟失手機定位解決方案,通過建立自己的服務器iCloud記錄并綁定用戶信息和蘋果設備ID,如果用戶蘋果手機丟失,則可以通過在PC端登錄自己的iCloud賬號實現(xiàn)定位丟失手機、鎖屏、播放鈴聲、銷毀iPhone上的用戶信息等功能。Android手機并沒有開發(fā)類似的功能,但一些安全衛(wèi)士類的軟件,例如“360”和“騰訊”等公司設計實現(xiàn)的基于短信方式尋找丟失手機的方案[1],通過設置安全號碼,在手機丟失后安全號碼向丟失手機發(fā)送短信指令,而丟失手機通過監(jiān)控短信的內(nèi)容,獲得定位、播報音樂和恢復出廠設置等相關指令。但自從Android5.0版本推出后,引入了多項安全增強措施,越來越難獲得root權限,而應用軟件監(jiān)控短信內(nèi)容的做法也被Google公司拋棄。至此,傳統(tǒng)的基于短信方式尋找丟失手機的方案也因新版本的Android采用用戶授予短信發(fā)送權限的安全模式變得不那么可靠了;還有就是在拾到者或偷盜者更換掉手機的SIM卡之后,用戶丟失的手機就接收不到安全號碼發(fā)送的短信指令,丟失手機也不能執(zhí)行相應的指令功能。而蘋果公司的基于iColud云服務方式找尋丟失手機的方式在Android系統(tǒng)上并不適用,首先IOS系統(tǒng)是閉源的,但Android系統(tǒng)是開源的[2],而且各大公司買入Android版權定制更改Android系統(tǒng)底層的源碼[3],尤其是對權限授予的管理各不相同,這就導致蘋果手機可以設置用戶首次使用時激活輸入身份驗證信息,而Android系統(tǒng)手機不能;其次驗證用戶的身份信息需要長期提供驗證云服務,投資成本太高,而且也說服不了所有Android系統(tǒng)手機生產(chǎn)廠家按照此規(guī)定去做。
通信協(xié)議的選擇需要考慮數(shù)據(jù)的實時、不丟、不重、保序、節(jié)能、流暢和安全這幾個因素,而長輪詢的方式是通過高頻率地從服務器拉取新消息[4],這不但增加服務器的壓力,浪費用戶的流量,而且消息仍然不夠及時[5],如果不考慮傳輸時間,最長的延遲就是輪詢的間隔,所以使用HTTP輪詢方式不可取。而消息的生產(chǎn)者主動推送消息[6],可以解決長輪詢的缺點。消息推送協(xié)議可以選擇XMPP協(xié)議[7]和MQTT協(xié)議,但XMPP協(xié)議較復雜、冗余(基于XML)、費流量、費電、部署硬件成本高,這主要是因為XML有大量的標簽冗余信息,網(wǎng)絡流量的70%都消耗在XMPP協(xié)議層了,這不適合手機防盜方案,而MQTT協(xié)議簡潔、小巧、可擴展性強、省流量、省電,適合做大量節(jié)點弱和網(wǎng)絡差的場景,非常適合現(xiàn)在移動互聯(lián)網(wǎng)的基礎設施,是推送服務的最佳協(xié)議。
針對傳統(tǒng)的基于短信方式Android手機防盜的弊端[8],提出了一種基于MQTT協(xié)議的Android手機防盜設計方案[9]。這種設計方案與蘋果公司的方案類似,也是先綁定設備的ID并通過網(wǎng)絡傳輸相關指令執(zhí)行相應操作。
MQTT協(xié)議是一個基于客戶端-服務器,構建于TCP/IP協(xié)議上[10],基于消息發(fā)布/訂閱(publish/subscribe)模式的輕量級即時通信協(xié)議[11]。其特點是傳輸代價較小(協(xié)議頭部只有2 Byte),適用于低帶寬、低耗電量不可靠連接、嵌入式設備和CPU內(nèi)存緊張的設備[12],可以以極少的代碼和有限的帶寬為遠程設備提供實時可靠的消息服務[13]。MQTT協(xié)議目前在物聯(lián)網(wǎng)、小型化設備、智能家居以及移動設備等方面得到了較廣泛的應用。
MQTT協(xié)議實現(xiàn)方式如圖1所示。MQTT協(xié)議有3種身份:發(fā)布者(Publisher)、代理(Broker)和訂閱者(Subscriber)。其中,客戶端既可以是消息的發(fā)布者又可以是消息的訂閱者,消息代理是服務器,而消息發(fā)布者又可以訂閱接收自己發(fā)布的消息。MQTT服務端被稱為消息代理(Broker),它是消息發(fā)送方和訂閱相同Topic消息的接收方之間的中介,服務器是用來處理客戶端網(wǎng)絡連接請求、訂閱和取消訂閱消息請求、接收客戶端消息體并轉(zhuǎn)發(fā)給訂閱相同Topic的客戶端。
圖1 MQTT協(xié)議實現(xiàn)方式
本方案的功能主要包括Android手機定位、鈴聲報警、鎖定手機和刪除數(shù)據(jù)這4個功能。Android手機定位實現(xiàn)在用戶丟失手機時通過安全手機能夠快速準確地定位;鈴聲報警實現(xiàn)使丟失手機播報鈴聲,輔助定位功能幫助用戶尋找丟失手機;鎖定手機實現(xiàn)對用戶丟失的手機鎖屏操作,用以保護隱私內(nèi)容和財產(chǎn)安全,一旦鎖定手機,其他人將不能開啟該手機;刪除數(shù)據(jù)實現(xiàn)對用戶手機刪除一切數(shù)據(jù)功能,是為了應對用戶在無法找到丟失手機時,為防止隱私信息泄露和財產(chǎn)損失而執(zhí)行恢復出廠設置操作,銷毀用戶使用的一切痕跡。用例示意圖如圖2所示。
圖2 用例示意
系統(tǒng)主要由用戶手機、消息代理服務器Apollo和安全手機3部分組成。用戶手機在丟失以后通過網(wǎng)絡接收手機定位、鈴聲報警、鎖定手機或刪除數(shù)據(jù)的指令,從而執(zhí)行相應操作;Apollo的作用是轉(zhuǎn)發(fā)用戶手機和安全手機發(fā)送的消息;安全手機是控制端,通過用戶的需要向用戶手機發(fā)送相應指令。
本方案的總體框架結(jié)構是基于客戶端/服務器模式,MQTT服務器采用Apache推出的基于ActiveMQ的消息代理服務器Apollo,Apollo是一個更快、更強健、更容易維護的流文本定向消息協(xié)議(Streaming Text Orientated Message Protocol,STOMP)服務器;用戶手機與安全手機通信采用IBM輕量級的消息發(fā)布/訂閱(publish/subscribe)的即時通信協(xié)議MQTT協(xié)議,2個手機之間的相互通信都要經(jīng)過Apollo服務器作為中轉(zhuǎn),這其中包括安全手機向用戶手機發(fā)送的相關指令和用戶手機向安全手機返回的定位信息;SQLite是Android本地的數(shù)據(jù)庫,它用于保存用戶設置的主題(Topic),只有當訂閱主題一致時用戶才能通過MQTT協(xié)議接收服務器轉(zhuǎn)發(fā)的消息?;贛QTT協(xié)議的Android手機防盜方案總體框架結(jié)構圖如圖3所示。
圖3 基于MQTT協(xié)議的Android手機防盜總體架構
基于MQTT協(xié)議的Android手機防盜方案主要針對Android手機在丟失時如何快速準確定位尋找到手機而設計的,其主要功能模塊包括手機定位、鈴聲報警、鎖定手機和刪除數(shù)據(jù)這些功能。根據(jù)MQTT協(xié)議v3.1版本要求客戶端ID必須小于23 Byte的要求,用只有15 Byte的手機國際移動設備身份碼(International Mobile Equipment Identity,IMEI)這一手機設備唯一ID作為與服務器端連接的clientId。而訂閱的主題(Topic)可以由用戶自己選擇填寫,這樣就能實現(xiàn)用戶手機與安全手機之間互換角色,因為訂閱的主題不一樣,它們收發(fā)的信息也是不一樣的。
用戶手機與安全手機之間的通信都需要發(fā)送一個CONNECT報文與服務器Apollo建立連接,然后2部手機都向服務器訂閱一個相同的TopicName,這樣2部手機就可以實現(xiàn)消息通信了,用戶手機可以根據(jù)規(guī)定的指令協(xié)議按照安全手機發(fā)送的指令實現(xiàn)相應功能。用戶手機通過mqttReceiverService類實現(xiàn)與服務器進行網(wǎng)絡連接以及訂閱相關主題等操作,mqttReceiverService類繼承于Service類;安全手機則通過mqttSenderIS類實現(xiàn)網(wǎng)絡連接與訂閱主題等操作。其主要功能實現(xiàn)如下。
Android手機定位功能是在用戶手機和安全手機設置相同的訂閱主題(Topic)的情況下,用戶手機必須開啟一個Service來監(jiān)聽安全手機發(fā)送相應的指令,這個監(jiān)聽類就是mqttReceiverService類,而安全手機通過mqttSenderIS類向用戶手機發(fā)送“dingwei#”指令,antitheftmqttsenderIS類繼承于IntentService類,用戶手機接收到定位消息指令后,會通過locationService類實現(xiàn)定位功能,然后通過locationSenderIS類向安全手機發(fā)送定位信息,而安全手機通過location-ReceiverService類監(jiān)聽用戶手機發(fā)送的定位信息[14]。通過百度地圖技術實現(xiàn)定位信息展示,用戶手機通過定位獲取百度地圖經(jīng)緯度信息,而安全手機收到此信息以后進行逆地址解析,解析出結(jié)構化地址(即用戶能看懂的地址信息),并顯示在百度地圖的圖層界面上,手機定位活動圖如圖4所示。此項功能在系統(tǒng)安裝時需要用戶授予本系統(tǒng)定位權限,當用戶開啟精確定位服務時,定位信息會更加精準。
這項功能是為了輔助用戶能夠更精確地尋找到丟失的手機。用戶通過定位獲取手機位置后,可以通過鈴聲報警獲取手機具體在什么位置。用戶手機通過mqttReceiverService類監(jiān)聽相應的指令,安全手機通過mqttSenderIS類向用戶手機發(fā)送播放報警鈴聲指令,即“baojing#”。鈴聲報警的具體功能是通過ringAlarm函數(shù)實現(xiàn)的。此功能需要動態(tài)獲得音頻管理器AudioManager權限,以便在用戶設置靜音或者振動模式時能開啟聲音并調(diào)節(jié)音量大小。
本功能是對用戶手機進行鎖屏保護,用戶丟失手機時,為了防止他人偷窺用戶隱私或者竊取用戶財產(chǎn),需要對丟失的手機采取相應的保護措施。安全手機需要通過mqttSenderIS類向用戶手機發(fā)送鎖屏指令并將鎖屏密碼一起發(fā)送給用戶手機;用戶手機開啟mqttReceiverService服務監(jiān)聽安全手機發(fā)送“suoping#”指令并解析指令協(xié)議中包含的鎖屏密碼。
圖4 手機定位活動示意
刪除數(shù)據(jù)功能主要是為了用戶在找不到丟失手機的情況下,為防止得到者窺探用戶隱私或者竊取財產(chǎn)等行為[15],不得已采用執(zhí)行數(shù)據(jù)恢復出廠設置操作而刪除丟失手機中的數(shù)據(jù)[16]。安全手機通過mqttSenderIS類向用戶手機發(fā)送刪除指令;用戶手機首先開啟mqttReceiverService服務監(jiān)聽安全手機發(fā)送“shanchu#”指令,然后執(zhí)行“wipedata”操作?;謴统鰪S設置也需要動態(tài)地獲取系統(tǒng)權限。
鎖定手機和刪除數(shù)據(jù)這2項功能都必須激活系統(tǒng)管理員權限,激活權限需要一個繼承Device-AdminReceiver的廣播接收者,該廣播接收者的作用是激活一個授權的組件,幫助本系統(tǒng)申請系統(tǒng)管理員權限。獲取權限之后,通過設備管理類Device-PolicyManager的lockNow函數(shù)和resetPassword函數(shù)實現(xiàn)密碼鎖屏功能,通過wipeData函數(shù)實現(xiàn)數(shù)據(jù)刪除功能。鎖屏和恢復出廠設置這2個功能必須要考慮Android系統(tǒng)版本的問題,因為Google公司為了Android系統(tǒng)的安全考慮,會逐漸加大對申請系統(tǒng)權限、申請成功以后執(zhí)行業(yè)務的監(jiān)管。
為了驗證方案的可行性和有效性,進行了相應程序設計并搭建了測試環(huán)境,測試環(huán)境包括2部Android智能手機(1部為用戶手機,另一部為安全手機)和1個MQTT服務器。系統(tǒng)測試需要有4G或Wifi網(wǎng)絡環(huán)境。2部Android智能手機需要安裝設計的手機防盜App,通過配置文件設置來區(qū)分是運行在用戶手機或安全手機上。MQTT服務器端需要安裝Apollo并進行相應的配置。
下面以鈴聲報警功能為例進行測試過程說明。
① 2部手機都開啟網(wǎng)絡連接功能,獲取clientId(IMEI碼),并連接到MQTT服務器(Apollo);
② 2部手機TopicName都設置為ringOrder;
③ 2部手機向MQTT服務器訂閱相同主題;
④ 安全手機通過點擊“鈴聲報警開啟”按鈕向MQTT服務器發(fā)送鈴聲報警“baojing#”指令,其界面如圖5所示;
⑤ 用戶手機從MQTT服務器接收到鈴聲報警“jingbao#”指令并開始響鈴報警,其界面如圖6所示。
圖5 安全手機端鈴聲 報警界面
圖6 用戶手機端鈴聲 報警界面
測試表明,該方案實現(xiàn)了Android手機定位、鈴聲報警、鎖定手機和刪除數(shù)據(jù)等功能,且系統(tǒng)運行效果良好,有效地證明了該方案的可行性。
本文提出了一種Android手機防盜設計方案,由于該方案基本調(diào)用的都是Android應用層和系統(tǒng)層API的函數(shù),而不用處理底層繁瑣的業(yè)務,這樣大大縮短了開發(fā)周期,降低了開發(fā)難度和開發(fā)成本。經(jīng)測試該方案實現(xiàn)了Android手機定位、鈴聲報警、鎖定手機和刪除數(shù)據(jù)功能,運行效果良好,為其他基于Android手機防盜應用項目的開發(fā)提供了參考。
[1]汪文斌,楊少輝.基于短信控制的Android手機安全系統(tǒng)的設計與實現(xiàn)[J].軟件,2015,36(6):21-25.
[2]郭宏志.Android應用開發(fā)詳解[M].北京:電子工業(yè)出版社,2011.
[3]吳亞峰,索依娜.Android核心技術與實例詳解[M].北京:電子工業(yè)出版社,2010.
[4]李曄,王勁林.一種面向移動終端的內(nèi)容定時推送平臺[J].微計算機應用,2008(10):97-99.
[5]王克鋒.基于Android的信息推送管理系統(tǒng)的設計和實現(xiàn)[D].大連:大連理工大學,2012.
[6]萬爽.基于Android平臺的即時位置信息推送系統(tǒng)設計與實現(xiàn)[D].成都:西南交通大學,2016.
[7]黃偉敏.基于XMPP協(xié)議的Android即時通信系統(tǒng)設計[J].計算機系統(tǒng)應用,2011(8):57-59.
[8]孫其博.移動互聯(lián)網(wǎng)安全綜述[J].無線電通信技術,2016,42(2):1-8.
[9]向東南,申敏,陳政貴.LTE核心網(wǎng)安全缺陷的研究[J].無線電通信技術,2016,42(1):31-34.
[10] 林滸,張家銘,楊海波.基于MQTT協(xié)議的即時消息業(yè)務設計與實現(xiàn)[J].計算機系統(tǒng)應用,2017,26(3):219-224.
[11] 于金剛,耿云飛,楊海波,等.基于MQTT協(xié)議的消息引擎服務器的設計與實現(xiàn)[J].小型微型計算機系統(tǒng),2016,37(10):2238-2243.
[12] 關慶余,李鴻彬,于波.MQTT協(xié)議在Android平臺上的研究與應用[J].計算機系統(tǒng)應用,2014,23(4):197-200.
[13] 楊鵬.基于MQTT協(xié)議的信息推送平臺系統(tǒng)的設計與實現(xiàn)[D].成都:電子科技大學,2015.
[14] 莫晗飛,王春東,馮超然,等.基于安卓的手機防盜追蹤與隱私控制系統(tǒng)的研究[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的手機遺失后數(shù)據(jù)自毀系統(tǒng)的設計與實現(xiàn)[D].軟件,2017,38(1):34-36.