溫州市公用事業(yè)投資集團(tuán)有限公司 傅弘弼 金有星 王弋出
移動(dòng)設(shè)備管理系統(tǒng)中遠(yuǎn)程卸載功能的設(shè)計(jì)與實(shí)現(xiàn)
溫州市公用事業(yè)投資集團(tuán)有限公司 傅弘弼 金有星 王弋出
本文為解決移動(dòng)設(shè)備數(shù)據(jù)安全問(wèn)題,通過(guò)對(duì)移動(dòng)設(shè)備Android系統(tǒng)本地靜默卸載技術(shù)和云推送技術(shù)的研究,有效地將兩個(gè)技術(shù)相結(jié)合,實(shí)現(xiàn)通過(guò)互聯(lián)網(wǎng)遠(yuǎn)程卸載Android系統(tǒng)指定APP的功能。此功能模塊分服務(wù)端和客戶端,客戶端作為APP獨(dú)立運(yùn)行于Android系統(tǒng)移動(dòng)設(shè)備上,服務(wù)端內(nèi)嵌于移動(dòng)設(shè)備管理系統(tǒng)。從而實(shí)現(xiàn)在任何地方任意時(shí)間遠(yuǎn)程卸載APP,防止智能移動(dòng)終端數(shù)據(jù)泄露。
云推送;靜默卸載;Android;數(shù)據(jù)安全
隨著智能移動(dòng)終端、4G網(wǎng)絡(luò)的普及,通信網(wǎng)絡(luò)質(zhì)量的提高,企業(yè)的信息化應(yīng)用逐步由傳統(tǒng)信息化向移動(dòng)信息化發(fā)展,移動(dòng)信息化正在成為企業(yè)信息化有力的補(bǔ)充。移動(dòng)信息化的發(fā)展,將企業(yè)業(yè)務(wù)由傳統(tǒng)辦公區(qū)擴(kuò)展到智能移動(dòng)終端和移動(dòng)通信網(wǎng)絡(luò)所能達(dá)到的任何地方,從而真正實(shí)現(xiàn)了anytime and anywhere的辦公模式,大大提高了工作效率,節(jié)約了工作成本。
但是,由于將企業(yè)業(yè)務(wù)系統(tǒng)擴(kuò)展到智能移動(dòng)終端,隨之而來(lái)的是智能終端數(shù)據(jù)泄露的安全問(wèn)題日益嚴(yán)重[1]。本文以百度云推送為例,介紹了通過(guò)設(shè)計(jì)Android系統(tǒng)靜默卸載程序,同時(shí)結(jié)合云推送技術(shù),實(shí)現(xiàn)遠(yuǎn)程卸載Android設(shè)備指定APP的功能,從而解決智能移動(dòng)終端設(shè)備丟失等情況下遠(yuǎn)程卸載指定APP,防止企業(yè)數(shù)據(jù)泄露的方法[2]。
遠(yuǎn)程卸載模塊分服務(wù)器端和客戶端,服務(wù)器端主要是在管理系統(tǒng)卸載APP功能模塊中集成云推送服務(wù)端。客戶端共有二部分組成:Android靜默卸載程序、云推送模塊。
(1)Android靜默卸載程序[4]。Android系統(tǒng)獲得root權(quán)限后,靜默卸載程序在系統(tǒng)后臺(tái)執(zhí)行卸載命令,而無(wú)需用戶參與操作、或在系統(tǒng)中彈出提示信息。目前大多數(shù)的Android助手型軟件均采用靜默安裝卸載方式實(shí)現(xiàn)程序的一鍵安裝或卸載。本模塊采用靜默卸載方式目的是在推送卸載命令后,Android系統(tǒng)接受到命令能夠自動(dòng)執(zhí)行命令,而不受外界任何操作的干擾。
(2)百度云推送(Push)是百度云平臺(tái)向開(kāi)發(fā)者提供的消息推送服務(wù)。通過(guò)百度云與程序客戶端之間建立穩(wěn)定、可靠的長(zhǎng)連接,使開(kāi)發(fā)者能夠?yàn)榭蛻舳顺绦蛱峁?shí)時(shí)推送消息功能[7]。百度云推送服務(wù)支持推送三種類型的消息:通知、透?jìng)飨⒓案幻襟w:支持向所有用戶或根據(jù)標(biāo)簽分類向特定用戶群體推送消息,相對(duì)與客戶端pull方式,push方式實(shí)時(shí)性更強(qiáng)[8]。PUSH方式與Pull方式的特點(diǎn)如表1所示:
表1 push和pull方式對(duì)比
消息推送服務(wù)是由消息發(fā)送方發(fā)起,消息接收方和發(fā)送方事先建立網(wǎng)絡(luò)連接,然后接收推送消息。在程序開(kāi)發(fā)中,發(fā)起方稱作推送服務(wù)器(Push Server),接收方稱作客戶端(Client)。相比通過(guò)Pull方式來(lái)接收消息或通知,Push方式實(shí)時(shí)性更強(qiáng),同時(shí)更節(jié)約網(wǎng)絡(luò)流量。所以,目前大部分對(duì)實(shí)時(shí)性要求高的程序,均采用Push的方式來(lái)進(jìn)行消息通知[8]。
推送服務(wù)器可向指定的設(shè)備(Device)或是用戶(User)推送消息,一個(gè)用戶對(duì)應(yīng)一個(gè)UserID,一個(gè)User可能擁有多臺(tái)設(shè)備,我們向同一個(gè)UserID推送消息時(shí),他所有綁定了UserID的設(shè)備都能收到消息[9]。百度云推送是通過(guò)客戶端向推送服務(wù)器注冊(cè),并在客戶端的監(jiān)聽(tīng)端口獲取推送服務(wù)器返回的 ChannelID和UserID,ChannelID對(duì)應(yīng)一個(gè)終端,在向推送服務(wù)器注冊(cè)的過(guò)程中,設(shè)備可以發(fā)送IMIE碼或者UUID作為唯一標(biāo)識(shí),在推送服務(wù)器注冊(cè)后再將生成的ChannelID和UserID返回給客戶端[9]。設(shè)備注冊(cè)完畢后,推送服務(wù)器維護(hù)一個(gè)注冊(cè)設(shè)備列表,這個(gè)列表維護(hù)了UserID和ChannelID以及與設(shè)備對(duì)應(yīng)的關(guān)系,當(dāng)需要向指定的設(shè)備或用戶推送消息時(shí),推送服務(wù)器會(huì)首先遍歷這個(gè)設(shè)備列表,通過(guò)這兩個(gè)ID來(lái)做唯一性判斷并找到需要推送消息的設(shè)備,然后就可以進(jìn)行消息推送了[9],如圖1所示。
圖1 百度云推送注冊(cè)機(jī)制
百度云推送服務(wù)支持推送三種類型的消息:通知、透?jìng)飨⒓案幻襟w;支持向所有用戶或根據(jù)標(biāo)簽分類向特定用戶群體推送消息;支持多種自定義功能(如自定義內(nèi)容、后續(xù)行為、樣式模板等);提供用戶信息及通知消息統(tǒng)計(jì)信息,方便開(kāi)發(fā)者進(jìn)行后續(xù)開(kāi)發(fā)及運(yùn)營(yíng)。
采用百度云推送是為了能將卸載命令實(shí)時(shí)的推送到Android系統(tǒng)上,只要Android系統(tǒng)聯(lián)網(wǎng)就能接收到推送命令,不需要關(guān)注Android平板所在地,Android平板的聯(lián)網(wǎng)IP等。百度提供了完整的Demo幫助開(kāi)發(fā)者集成云推送服務(wù),推送服務(wù)SDK通過(guò)。jar包和。so文件的方式可以集成到我們自己的工程中,實(shí)現(xiàn)推送功能。
遠(yuǎn)程卸載的實(shí)現(xiàn)原理為:
(1)靜默卸載程序集成推送SDK,實(shí)現(xiàn)與百度云推送服務(wù)器建立連接
(2)移動(dòng)設(shè)備管理系統(tǒng)作為推送命令客戶端調(diào)用百度云SDK服務(wù)器端,將卸載指令發(fā)送到百度云推送服務(wù)器上。
(3)百度云推送服務(wù)器根據(jù)已注冊(cè)的API Key,和推送消息中的USERID和ChannelID 將卸載指令作為消息推送到指定ID的Android設(shè)備上。
(4)Android設(shè)備的SDK接收到推送消息,透?jìng)飨⒔o靜默卸載程序的指定參數(shù)里,實(shí)現(xiàn)程序卸載。
卸載命令推送運(yùn)行機(jī)制,如圖2所示:
圖2 卸載命令推送運(yùn)行機(jī)制
3.1 靜默卸載程序的實(shí)現(xiàn)
要實(shí)現(xiàn)遠(yuǎn)程卸載,首先必須實(shí)現(xiàn)本地靜默卸載。通過(guò)設(shè)計(jì)代碼直接在Android設(shè)備上直接輸入預(yù)推送的消息,以測(cè)試是否能夠?qū)崿F(xiàn)本地靜默卸載。如果代碼能夠?qū)崿F(xiàn)本地靜默卸載,則可以進(jìn)一步通過(guò)推送消息,讓卸載代碼接收消息實(shí)現(xiàn)卸載。靜默卸載的shell 命令格式為: private string cmd_uninstall = "pm uninstall + packageName"。
在Android系統(tǒng)獲得root權(quán)限后,配置以下四步實(shí)現(xiàn)靜默卸載:
(1)獲得卸載權(quán)限。
(2)在主程序MainActivity。java中定義卸載命令。
(3)在主程序MainActivity。java中定義卸載命令的執(zhí)行方法。
(4)為方便測(cè)試本地卸載效果,在主程序MainActivity。java中定義一個(gè)卸載按鈕。
3.2 云推送透?jìng)飨⒌膶?shí)現(xiàn)
靜默卸載程序本地測(cè)試后,就可以配置云推送。將云推送SDK嵌入的wzgyMDM工程中,實(shí)現(xiàn)遠(yuǎn)程信息推送。
要實(shí)現(xiàn)信息推送,首先得在百度開(kāi)發(fā)者平臺(tái)注冊(cè)一個(gè)開(kāi)發(fā)者賬戶,并建立一個(gè)推送消息的工程,生成對(duì)應(yīng)的API key和Secret Key。百度云推送通過(guò)API key和Secret Key作為唯一識(shí)別碼,識(shí)別推送的對(duì)象
賬戶生成API key和Secret Key后,就可以建立工程并下載云推送的客戶端SDK,SDK的壓縮文件中包含一個(gè)例子代碼,一個(gè)用戶手冊(cè),和所需的libs和資源等,
SDK下載完成后,根據(jù)SDK包的用戶手冊(cè)指導(dǎo),在wzgyMDM工程中集成云推送SDK,具體步驟:
(1)將SDK程序包中l(wèi)ibs下文件pushservice-4.1.0.jar導(dǎo)入到工程中的 libs目錄mips目錄下;將libbdpush_V2_1.so導(dǎo)入到工程中的libs 目錄 armeabi目錄下。如圖3所示:
圖3 libbdpush_V2_1.so導(dǎo)入wzgyMDM工程
(2)SDK程序包中主要有四個(gè)類:MyPushMessageReceiver。 java:這個(gè)類作用是接收和發(fā)送消息;DemoApplication。java:這個(gè)類作用是啟動(dòng)和停止推送;Utils。java:這個(gè)類保存了通用函數(shù)和工具集;MainActivity。java:是wzgymdm的主程序。將這四個(gè)類導(dǎo)入到wzgymdm工程src 中com。wzgymdm下。如圖4所示:
圖4 導(dǎo)入到工程內(nèi)的類文件
(3)在AndroidManifest。xml 中添加push service 運(yùn)行需要的權(quán)限。
(4)在AndroidManifest。xml中綁定預(yù)先在百度開(kāi)發(fā)者中心注冊(cè)的apikey。
(5)APPlication 初始化調(diào)用配置:將導(dǎo)入工程的demoapplication的packagename 改為wzgymdm的工程名,并且在AndroidMmanifest。 xml的Application 標(biāo)簽中指定 Android:name 屬性值為該Application。
(6)修改MyPushMessageReceiver。java,使推送消息實(shí)現(xiàn)透?jìng)?并調(diào)用卸載代碼。首先將MyPushMessageReceiver。java 包名修改為wzgymdm工程名,然后在透?jìng)飨⑻幚砗瘮?shù)中,加入透?jìng)餍畔⒌奶幚矸椒ā?/p>
通過(guò)代碼修改和調(diào)整來(lái)集成云推送SDK,實(shí)現(xiàn)了遠(yuǎn)程靜默卸載。可通過(guò)百度開(kāi)發(fā)者平臺(tái)測(cè)試推送信息,調(diào)試是否實(shí)現(xiàn)了遠(yuǎn)程卸載。如圖5和圖6所示:
圖5 百度開(kāi)發(fā)者平臺(tái)云推送調(diào)試界面
圖6 百度開(kāi)發(fā)者平臺(tái)云推送消息推送界面
4.1 遠(yuǎn)程卸載服務(wù)器端實(shí)現(xiàn)原理
遠(yuǎn)程卸載服務(wù)器端主要是集成百度云推送SDK服務(wù)端,通過(guò)調(diào)用云推送SDK服務(wù)端發(fā)送卸載命令到百度云平臺(tái)。目前百度云推送SDK將云推送服務(wù)端的所有操作封裝成一個(gè)類 Channel,通過(guò)對(duì)該類的簡(jiǎn)單初始化,即可調(diào)用其內(nèi)部的各種方法,使用云推送服務(wù)。Channel提供的方法和服務(wù)端 API 對(duì)應(yīng),是對(duì)服務(wù)端 REST API 的封裝。
PHP SDK 壓縮包主要由以下部分組成:
Channel。class。php :PHP_SDK 腳本,包含對(duì)外提供的所有接口。
Lib:云推送使用到的一些基礎(chǔ)公用文件。
sample/sample。php -- 展示如何使用 PHP_SDK 的 demo 文件。
SDK接口基本功能:
函數(shù) function __construct 是建立新channel對(duì)象的函數(shù),如:
public function __construct ($apiKey, $secretKey, $arr_curlopts = array())
$apiKey:從百度開(kāi)發(fā)者中心獲得的 API Key。
$secretKey:從百度開(kāi)發(fā)者中心獲得的 Secret Key。
通過(guò)$apiKey, $secretKey與百度云推送服務(wù)器建立一個(gè)新的channel對(duì)象,$apiKey, $secretKey是必須的值。
推送函數(shù)public function pushMessage,實(shí)現(xiàn)信息推送,是主要的執(zhí)行函數(shù)。該函數(shù)根據(jù) push_type值不同,推送給不同的人群。Push_type為1時(shí),推送給指定某人。Push_type為2時(shí),推送給指定一組人。Push_type為3時(shí),推送給所有人。根據(jù)message type的值,決定消息類型。Message type默認(rèn)為0是消息(透?jìng)?類型,Message type為1是通知類型。
4.2 移動(dòng)設(shè)備管理系統(tǒng)調(diào)用SDK過(guò)程
圖7 設(shè)備管理系統(tǒng)調(diào)用SDK過(guò)程
服務(wù)端的實(shí)現(xiàn)過(guò)程是調(diào)用云推送SDK服務(wù)端,將指定的程序包名發(fā)送的百度云推送服務(wù)器上。整個(gè)調(diào)用過(guò)程如圖7所示。
管理系統(tǒng)執(zhí)行遠(yuǎn)程卸載的過(guò)程如下:
(1)在設(shè)備詳細(xì)信息頁(yè)面,點(diǎn)擊卸載APP,進(jìn)入該設(shè)備的卸載APP頁(yè)面。
(2)卸載APP頁(yè)面會(huì)顯示設(shè)備與百度云推送綁定的userid和channelid,還有設(shè)備可以卸載的應(yīng)用程序。如圖8所示:
圖8 管理系統(tǒng)卸載APP界面
(3)選擇某一個(gè)應(yīng)用程序,點(diǎn)擊卸載。設(shè)備管理系統(tǒng)將以post的方式,將卸載APP頁(yè)面代碼中的userid、channelid、message(程序包名),發(fā)送到baidupush。php。Baidupush。php 接收到post的變量,調(diào)用云推送SDK包中的函數(shù)pushMessage_Android ($message),然后發(fā)送到百度云推送服務(wù)器,而云推送服務(wù)器推送message(程序包名),到Android客戶端。
4.3 遠(yuǎn)程卸載功能的執(zhí)行效果
(1)選擇要卸載的APP,點(diǎn)擊卸載按鈕,如圖9所示:
圖9 卸載APP界面
(2)頁(yè)面跳轉(zhuǎn)到baidupush。php,管理系統(tǒng)post userid、channelid、message(即程序名)執(zhí)行卸載函數(shù)function pushMessage_ Android ($message),卸載成功系統(tǒng)會(huì)返回成功代碼,并彈出提示窗口,如圖10所示。
圖10 卸載成功彈出提示窗口
近幾年,云技術(shù)在各行各業(yè)深入應(yīng)用,云運(yùn)營(yíng)商也提供了許多方便可行的云解決方案。本文采用了成熟的云推送技術(shù)實(shí)現(xiàn)遠(yuǎn)程命令推送,實(shí)時(shí)性高,穩(wěn)定性強(qiáng),有效的實(shí)現(xiàn)了遠(yuǎn)程APP的卸載,從而保證了企業(yè)數(shù)據(jù)安全。
[1]張像,孫秩。淺析移動(dòng)終端信息安全問(wèn)題[J]。信息安全與技術(shù),2011(10):61-62.
[2]潘娟。移動(dòng)互聯(lián)網(wǎng)時(shí)代智能終端面臨安全挑戰(zhàn)[J]。世界電信,2013(1):91-95.
[3]Ed Burnette。Android基礎(chǔ)教程(第3版。修訂版)[M]。人民郵電出版社,2011.
[4]百度云推送實(shí)踐應(yīng)用開(kāi)發(fā)教程[EB/OL]。2014.http://www。 docin。com/p-859458655.html
[5]張長(zhǎng)學(xué),張偉,董智明。移動(dòng)推送技術(shù)面面觀[J]。移動(dòng)通信2015(5): 21-27.
[6]百度。Push服務(wù)SDK用戶手冊(cè)[J/OL]。百度開(kāi)發(fā)者中心,2014.
傅弘弼(1982-),碩士,高級(jí)工程師,主要研究方向:計(jì)算機(jī)網(wǎng)絡(luò),網(wǎng)絡(luò)安全,云技術(shù)。
圖2 指令Cache未使能仿真圖
圖3 指令Cache命中仿真圖
從仿真結(jié)果可以看出,使用Cache和未使用Cache時(shí),指令在流水線的執(zhí)行階段所占用的時(shí)鐘周期數(shù)有著明顯的變化。Cache命中時(shí)的執(zhí)行速度是未命中時(shí)的數(shù)倍,說(shuō)明指令Cache在整個(gè)DSP系統(tǒng)中起到了關(guān)鍵性的作用。
為了使系統(tǒng)整體性能提高一個(gè)檔次,當(dāng)前大多數(shù)計(jì)算機(jī)系統(tǒng)都采用多級(jí)存儲(chǔ)層次。通用嵌入式系統(tǒng)、臺(tái)式機(jī)和服務(wù)器等計(jì)算機(jī)系統(tǒng)幾乎都具有由"寄存器-Cache-主存-輔存"構(gòu)成的多級(jí)存儲(chǔ)層次。為了解決32位DSP處理器運(yùn)行速度與主存儲(chǔ)器運(yùn)行速度不匹配問(wèn)題,本文使用verilog編程語(yǔ)言設(shè)計(jì)并實(shí)現(xiàn)了一款指令Cache,由上述仿真結(jié)果可知,該指令Cache達(dá)到了相應(yīng)的效果。
參考文獻(xiàn)
[1]劉宗林,馬卓,魯建壯,唐濤。一種并行指令Cache的設(shè)計(jì)與實(shí)現(xiàn)[J]。微電子學(xué)與計(jì)算機(jī),2007,12:147-149.
[2]楊曉剛,屈凌翔,張樹(shù)丹。 DSP中指令Cache的低功耗設(shè)計(jì)[J]。 計(jì)算機(jī)工程與應(yīng)用,2011,32:82-86.
[3]謝學(xué)軍,葉以正,王進(jìn)祥,喻明艷。哈佛體系結(jié)構(gòu)的Cache控制器設(shè)計(jì)[J]。計(jì)算機(jī)工程,2004,22:37-39.
[4]戴梅萼。高性能計(jì)算機(jī)系統(tǒng)中Cache的組織方式及性能分析[J]。微電子學(xué)與計(jì)算機(jī),2000,05:15-18+58.
[5]武楊。高速緩沖存儲(chǔ)器Cache設(shè)計(jì)的關(guān)鍵技術(shù)分析[J]。中國(guó)科技信息,2006,07:202-203.
作者簡(jiǎn)介:
呂華智 (1991-),男,湖南郴州人,碩士,研究方向:數(shù)字集成電路設(shè)計(jì)。
黃嵩人 (1973-),男,江蘇無(wú)錫人,博士,高級(jí)工程師,主要研究方向:DSP設(shè)計(jì)等。