基于MQTT协议的Android手机防盗方法
2018-04-10郭江波
李 宏,郭江波
(1.中国电子科技集团公司第五十四研究所,河北 石家庄 050081;2.河北科技大学 信息科学与工程学院,河北 石家庄 050018)
0 引言
近年来,随着智能手机的迅猛发展和普及,智能手机正改变着人们的生活方式,但随之而来的手机丢失等问题也日益凸显。发生手机丢失情况时,如何能快速、精准地寻找到丢失的手机就显得尤为重要。针对这种情况,苹果公司设计了一套比较完善的丢失手机定位解决方案,通过建立自己的服务器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并通过网络传输相关指令执行相应操作。
1 MQTT协议
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协议实现方式
2 总体设计
2.1 功能设计
本方案的功能主要包括Android手机定位、铃声报警、锁定手机和删除数据这4个功能。Android手机定位实现在用户丢失手机时通过安全手机能够快速准确地定位;铃声报警实现使丢失手机播报铃声,辅助定位功能帮助用户寻找丢失手机;锁定手机实现对用户丢失的手机锁屏操作,用以保护隐私内容和财产安全,一旦锁定手机,其他人将不能开启该手机;删除数据实现对用户手机删除一切数据功能,是为了应对用户在无法找到丢失手机时,为防止隐私信息泄露和财产损失而执行恢复出厂设置操作,销毁用户使用的一切痕迹。用例示意图如图2所示。
图2 用例示意
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手机防盗总体架构
3 设计实现
基于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类实现网络连接与订阅主题等操作。其主要功能实现如下。
3.1 手机定位
Android手机定位功能是在用户手机和安全手机设置相同的订阅主题(Topic)的情况下,用户手机必须开启一个Service来监听安全手机发送相应的指令,这个监听类就是mqttReceiverService类,而安全手机通过mqttSenderIS类向用户手机发送“dingwei#”指令,antitheftmqttsenderIS类继承于IntentService类,用户手机接收到定位消息指令后,会通过locationService类实现定位功能,然后通过locationSenderIS类向安全手机发送定位信息,而安全手机通过location-ReceiverService类监听用户手机发送的定位信息[14]。通过百度地图技术实现定位信息展示,用户手机通过定位获取百度地图经纬度信息,而安全手机收到此信息以后进行逆地址解析,解析出结构化地址(即用户能看懂的地址信息),并显示在百度地图的图层界面上,手机定位活动图如图4所示。此项功能在系统安装时需要用户授予本系统定位权限,当用户开启精确定位服务时,定位信息会更加精准。
3.2 铃声报警
这项功能是为了辅助用户能够更精确地寻找到丢失的手机。用户通过定位获取手机位置后,可以通过铃声报警获取手机具体在什么位置。用户手机通过mqttReceiverService类监听相应的指令,安全手机通过mqttSenderIS类向用户手机发送播放报警铃声指令,即“baojing#”。铃声报警的具体功能是通过ringAlarm函数实现的。此功能需要动态获得音频管理器AudioManager权限,以便在用户设置静音或者振动模式时能开启声音并调节音量大小。
3.3 锁定手机
本功能是对用户手机进行锁屏保护,用户丢失手机时,为了防止他人偷窥用户隐私或者窃取用户财产,需要对丢失的手机采取相应的保护措施。安全手机需要通过mqttSenderIS类向用户手机发送锁屏指令并将锁屏密码一起发送给用户手机;用户手机开启mqttReceiverService服务监听安全手机发送“suoping#”指令并解析指令协议中包含的锁屏密码。
图4 手机定位活动示意
3.4 删除数据
删除数据功能主要是为了用户在找不到丢失手机的情况下,为防止得到者窥探用户隐私或者窃取财产等行为[15],不得已采用执行数据恢复出厂设置操作而删除丢失手机中的数据[16]。安全手机通过mqttSenderIS类向用户手机发送删除指令;用户手机首先开启mqttReceiverService服务监听安全手机发送“shanchu#”指令,然后执行“wipedata”操作。恢复出厂设置也需要动态地获取系统权限。
锁定手机和删除数据这2项功能都必须激活系统管理员权限,激活权限需要一个继承Device-AdminReceiver的广播接收者,该广播接收者的作用是激活一个授权的组件,帮助本系统申请系统管理员权限。获取权限之后,通过设备管理类Device-PolicyManager的lockNow函数和resetPassword函数实现密码锁屏功能,通过wipeData函数实现数据删除功能。锁屏和恢复出厂设置这2个功能必须要考虑Android系统版本的问题,因为Google公司为了Android系统的安全考虑,会逐渐加大对申请系统权限、申请成功以后执行业务的监管。
4 测试结果分析
为了验证方案的可行性和有效性,进行了相应程序设计并搭建了测试环境,测试环境包括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手机定位、铃声报警、锁定手机和删除数据等功能,且系统运行效果良好,有效地证明了该方案的可行性。
5 结束语
本文提出了一种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.