基于Android平台的手机安全助手的设计与实现

1.研究(设计)目的意义及国内外研究状况和应用前景(附参考文献):
(一)选题的目的和意义 Android曾经是一家创立于旧金山的公司的名字,该公司于2005年8月份被Google收购,并从此踏上了飞速发展的道路。经过这几年的发展,它已经发展成了一个平台、一个生态体系。Android是基于Linux核心的开源系统。随着Android平台的不断完善,它在市场上占有率快速增长,越来越多的手机厂商开始选择Android系统作为其主要发展方向。随着智能手机的普及,在使用过程中如何保护隐私,监控流量或是手机丢了以后怎么办是用户普遍关心的问题。同时Android平台的开放性构筑了其软件生态的繁荣和多样性给病毒木马提供了可乘之机,它们可以通过篡改正常软件,固件植入,非法获取高权限等多种手段入侵手机,普通用户很难察觉,手机作为个人通信工具,每天跟随用户,保存了很多个人隐私,手机的丢失很容易让用户的隐私或个人信息被别人盗取,这也是目前用户非常关心的问题。本毕业设计的目的是开发一款实用的基于Android智能终端的安全软件,对智能手机的使用进行管理,保障智能手机的运行安全,并且能在一定程度上保护用户的隐私,让用户能放心地使用Android智能手机。同时,该软件的设计与实现也是对Android应用程序开发知识的综合应用,可在设计和实现的过程中学习掌握Android应用开发的基础知识和开发技术,锻炼自主学习能力,积累开发经验,增强发现问题、解决问题的能力。 (二)选题的研究现状 随着移动通信技术的发展,移动终端发生了巨大的变化,朝着智能化的方向不断迈进。研究机构Gartner 称,2011年第一季度手机销量共计4.278 亿部,较上年同期增长19%,其中智能手机销量所占比例为23.6%。该机构称,2011年第一季度智能手机销量较上年同期增长85%。与此同时,移动通信网络也在不断演进,从1G、2G、3G 到LTE,另外就是大量WiFi 热点的部署以及终端开始普遍支持WiFi,业务带宽瓶颈逐渐缓解。伴随着终端智能化及网络宽带化的趋势,移动互联网业务层出不穷,日益繁荣。但与此同时,移动终端越来越多的涉及商业秘密和个人隐私等敏感信息。移动终端也面临各种安全威胁,如恶意订购、自动拨打声讯台、自动联网等,造成用户的话费损失; 木马软件可以控制用户的移动终端,盗取账户、监听通话、发送本地信息等。移动终端作为移动互联网时代最主要的载体,面临着严峻的安全挑战。如今,手机卫士产品主要有几个主流软件商提供,功能五花八门,令用户眼花缭乱,其实一些功能对大多数用户来说根本无用,不仅占用手机资源,而且操作复杂,用户体验差,因此开发一款简单易用,功能强大的手机安全卫士具有很大的市场潜力。手机安全软件是一种可以对病毒、木马等一切意境的对手机有危害的程序代码进行清除的程序工具,它也是管理安全的软件程序。目前安全软件可分为杀毒软件,系统工具和反流氓软件。影响手机安全软件用户体验的因素有很多,根据比达咨询(Big Data-Research)数据显示,53.4%的用户反映安全软件占内存的问题是最影响安全软件体验的;排名第二的因素是频繁弹窗,52.1%的用户反映;有49.3%的用户认为影响手机运行速度是主要因素。(三)应用前景为了保障手机的安全,很多人可能会在手机中下载各种手机安全软件,没事就杀杀毒、清理清理内存什么的,甚至还能获取到更多意想不到的手机功能。随着手机上网功能越来越多样,手机安全开始受到人们的重视。在评价无线安全软件的发展前景时,周逵认为,随着中国无线上网人数的快速增长,以及无线网络的应用成熟度进一步提高,无线网络安全意识更加深入人心,安装网络安全软件将成为人们上网的一种基本需求,因此未来将有很广阔的市场需求。与网络安全软件相比,手机安全软件有一项明显的优势,即拥有既定的收费渠道。安装一款安全软件如下载一首歌曲一样,需要支付一定的费用。而且手机支付方式灵活多样,相对低廉,因此更容易获得用户的广泛订阅。参考文献:[1] 王家林,王家虎,王家俊.Android项目实战:手机安全软件开发案例解析[M].北京:电子工业出版社,2013. [2] Lauren Darcey,Shane Conder.Android移动开发一本就够[M].张巍等,译.人民邮电出版社,2012. [3] 杨建强,吴钊,李学锋.增强智能手机安全的动态恶意软件分析系统[J].计算机工程与设计.2010[13]. [4] Herbert Schildt著,周志彬等译.Java2参考大全[M].北京:电子工业出 版社,2003[5] 宋杰.Android OS手机平台的安全机制分析和应用研究[J].计算机技术与发展.2010[6]. [6] 2011年中国手机安全状况报告.[EB/OL].[2011-08-11]. http://wenku.baidu.com/view/ 577ef96faf1ffc4ffe47ac4e.html. [7] 沈泽刚,秦玉平.Java语言程序设计[M].北京:清华大学出版社,2010[8]智研咨询集团,2017-2022年中国手机安全软件行业分析及未来发展趋势报告,2016年11月http://www.chyxx.com/research/201611/472734.html
2.主要内容、研究方法和思路
主要内容: 设计的目标是实现一个手机安全助手的系统,要求利用Android的四大组件:Activity、Service、BroadCastReceiver、ContentProvider,采用MVC设计模式。采用JAVA为语言,利用MYSQL数据库为系统提供数据支持。本项目所实现的功能模块主要包含以下几个:软件管理模块,显示所有软件、卸载软件、启动软件、分享软件四个子模块。进程管理模块,显示所有正在运行的进程和剩余内存、一键清理两个子模块;流量统计模块,显示软件消耗的流量;手机杀毒模块,检测病毒、清除病毒两个子模块;系统优化模块,缓存清理、SD卡清理两个子模块;高级工具模块,手机号码归属地查询、常用号码查询、备份短信、还原短信、程序锁五个子模块;设置中心模块,自动更新设置、来电归属地显示设置、黑名单拦截设置、程序锁设置、归属地提示框风格、归属地提示框位置六个子模块。当然最实用的功能有手机防盗模块,针对Android手机丢失后或被有意窃取我们手机中的隐私信息等安全隐患,设计了当我们第一次登录安全助手的时候,需判断当前SIM卡号是否和被保护的SIM卡号是否相同,如果不相同,则手机将在后台自动发送短信给我们绑定的安全号码,那么我们的手机就会大大提高了安全性。还有一个是通讯卫士模块,此模块有拦截电话,拦截短信,全部拦截这三大功能,我们可以根据用户的选择从而拦截电话或者短信,避免用户受到骚扰。研究方法和思路: 首先,我们先通过访谈调查法,通过对一些使用Android手机的人群进行问卷调查和走访,统计分析他们使用手机存在的问题,收集回来以后,我们采用对比分析法,对比Android和IOS系统用户使用的问题进行对比,以从而设计系统。其次,我们通过文献调研法,通过强大的互联网平台手机一些开发此系统的相关资料,我们采用数据分析法,在通过对实地调研和网络搜集到的大量数据进行分析之后,我们可以初步的设计出雏形。最后,通过阶段总结法,根据问题的研究方向和实际可行性选择我们系统的运行环境,系统模块和数据库的选择。经过系统的分析,该软件总体上是有一个主界面和主界面上的一些模块组成,在主界面上包含手机防盗、通讯卫士、软件管理、进程管理、流量统计、手机杀毒、系统优化、高级工具以及设置中心等九个模块。该软件可以对手机中的所有软件进行基本的管理,满足用户安全性和使用性的要求。手机防盗模块通过预设密码判断手机是否被盗,如果发生手机被盗事件,手机将自动通过自定义协议发送手机中SIM卡信息和手机的位置信息给安全号码。手机防盗的核心是通过建立Android下的super管理员功能,能远程通过短信指令,对手机设置锁屏密码,远程锁定手机屏幕,远程格式化手机内存卡,恢复出厂设置,而且用户也不能卸载软件,能极大的保护用户的隐私安全。如发生手机被盗事件,super管理员通过安全手机发送预设指令控制被绑定的手机,从而锁定手机或者销毁数据。手机杀毒的实现需要先用PackageManager遍历手机上的所有程序,将扫描到的包名以及数字签名鱼数据库中的病毒对比,发现相同的就视为病毒,弹出删除病毒的界面将其杀死,完成后,返回手机杀毒的界面。最终,此系统将会保护用户的个人隐私,再也不会因为隐私泄露而担心了,并且也远离收费电话,垃圾短信,电话和短信诈骗的骚扰,再也不担心顽固病毒的侵入。

基于Android平台的手机安全助手的设计与实现

论文提纲材料

1.研究意义

(1) 木马和病毒肆虐

对于手机上网用户来说,手机功能将越来越为丰富,手机平台越来越为开放,这些都给黑客带来了可乘之机,各种形形色色的手机病毒都将日益浮出水面。而且手机天生具有方便的收费、缴费渠道,恶意软件驻留手机终端将给用户带来直接的经济损失,尤其还有像手机支付、手机钱包、手机证券等存在潜在巨大利益的手机应用,也更是的其容易成为黑客攻击的目标。

  1. 侵犯用户个人隐私权 我们每个人都想有自己的隐私空间,比方说有的时候我们需要将自己的手机借给弟弟妹妹玩的时候,这时我们就不想让他人看到自己的隐私信息。 (3)层出不穷的垃圾短信和骚扰电话 来自中国互联网协会的调查数据显示,目前国内手机用户平均每周收到8.29条垃圾短信[3],其中包括房地产广告、色情信息以及不法分子利用短信制造的骗局。
  2. 防范手段 (1) 通讯加密 针对隐私泄露,业界目前普遍采用加密的方法来解决。对短信和通话记录进行加密,并且还可以设置多种访问策略和情景模式,以保障隐私内容不会轻易被他人偷窥。 (2) 媒体曝光 垃圾、诈骗、骚扰短信和电话是手机独有的安全问题,其造成的恶劣影响,媒体已经多次报道,并提醒用户注意提防。 (3) 安装安全软件 此保护手机方式也是最常用的防范措施,便捷、高效,但是也存在一些问题,随着互联网时代的快速发展,市面上的手机安全软件泛滥,也导致普通人们无法选择一款实用又安心的软件。同时,手机安全问题涉及到运营商、手机制造商、手机安全软件厂商及用户等诸多层面,只有在这条产业链上各个环节的参与者密切配合才行。
  3. 实现思路

3.1 手机防盗

根据预设参数,判断手机是否被盗,根据自定义协议发送手机中sim卡的信息和手机的位置信息给安全号码。

3.2 通讯卫士

通过添加黑名单,对其来电黑名单/短信黑名单管理。保护以下三个功能:拦截电话,用户在我们的添加黑名单的页面添加一条黑名单,那么我们后台将会拦截到此号码来电,直接挂掉,避免用户受到骚扰电话;拦截短信,用户添加一个黑名单的号码,当这个号码发来信息的时候,后台将此短信进行删除,从而用户就看不到垃圾信息;全部拦截,用户添加的所有号码,不管是来电还是短信,用户都不会看到。

3.3 软件管理

管理系统软件和本地软件,可以显示软件的详细信息,启动,删除应用程序。程序锁可以指定保护的程序,手机锁屏在解屏后,用户第一次进入要保护的程序之前必须输入密码。

3.4 任务管理

显示当前系统运行的进程信息,显示系统内存信息,可以杀死进程,批量杀死进程。

3.5 手机杀毒

从服务器下载最新的病毒库,根据程序的报名和程序的数字签名识别病毒,提示用户并查杀,是恶意软件。

3.6 系统优化

由于Android手机的内存有限,平时我们使用手机的时候就会很卡,严重的影响了正常使用。清理手机缓存,提高手机性能,优化电池管理。

3.7 高级工具

给用户提供手机号码归属地查询,还有一些实用的常用号码查询。

4.进一步工作

目前为止, 此系统的功能基本上都实现了,但是在一些功能中仍存在不完善之处,例如手机防盗模块没有实现每次手机重启完毕后调用系统前置摄像头拍照以便手机丢失后获取小偷的长相、没有加入第三方平台用户登录、没有编写后台管理系统上传和恢复用户数据、远程锁定手机屏幕,远程格式化手机sd卡,恢复出厂设置等。

 

1 引言

1.1研究背景

Android曾经是一家创立于旧金山的公司的名字,该公司于2005年8月份被Google收购,并从此踏上了飞速发展的道路。经过这几年的发展,它已经发展成了一个平台、一个生态体系。Android是基于Linux核心的开源系统。随着Android平台的不断完善,它在市场上占有率快速增长,越来越多的手机厂商开始选择Android系统作为其主要发展方向。随着智能手机的普及,在使用过程中如何保护隐私,监控流量或是手机丢了以后怎么办是用户普遍关心的问题。同时Android平台的开放性构筑了其软件生态的繁荣和多样性给病毒木马提供了可乘之机,它们可以通过篡改正常软件,固件植入,非法获取高权限等多种手段入侵手机,普通用户很难察觉,手机作为个人通信工具,每天跟随用户,保存了很多个人隐私,手机的丢失很容易让用户的隐私或个人信息被别人盗取,这也是目前用户非常关心的问题。

1.2研究现状

随着移动通信技术的发展,移动终端发生了巨大的变化,朝着智能化的方向不断迈进。研究机构Gartner 称,2011年第一季度手机销量共计4.278 亿部,较上年同期增长19%,其中智能手机销量所占比例为23.6%。该机构称,2011年第一季度智能手机销量较上年同期增长85%。与此同时,移动通信网络也在不断演进,从1G、2G、3G 到LTE,另外就是大量WiFi 热点的部署以及终端开始普遍支持WiFi,业务带宽瓶颈逐渐缓解。

伴随着终端智能化及网络宽带化的趋势,移动互联网业务层出不穷,日益繁荣。但与此同时,移动终端越来越多的涉及商业秘密和个人隐私等敏感信息。移动终端也面临各种安全威胁,如恶意订购、自动拨打声讯台、自动联网等,造成用户的话费损失;马软件可以控制用户的移动终端,盗取账户、监听通话、发送本地信息等。移动终端作为移动互联网时代最主要的载体,面临着严峻的安全挑战。

如今,手机卫士产品主要有几个主流软件商提供,功能五花八门,令用户眼花缭乱,其实一些功能对大多数用户来说根本无用,不仅占用手机资源,而且操作复杂,用户体验差,因此开发一款简单易用,功能强大的手机安全卫士具有很大的市场潜力。手机安全软件是一种可以对病毒、木马等一切意境的对手机有危害的程序代码进行清除的程序工具,它也是管理安全的软件程序。目前安全软件可分为杀毒软件,系统工具和反流氓软件。

1.3研究内容

本次毕业设计主要想开发出一套Android平台的安全助手,本系统对手机安全问题和手机管理有着很好的支持。该助手目前实现的有手机防盗功能:我们可以通过我们当时绑定的手机号码进行防盗,也可以通过GPS进行追踪;软件管理:应用的列表展示,应用的卸载,运行与分享等;通讯管理:此功能可以设置黑名单避免用户受到干扰;程序锁:此功能可以的将一些不想让他人看到的程序进行加锁;进程管理:显示所有运行进程列表和内存占用大小,选中的进程进行一键清理;关于我们:我们可以将我们的客服联系方式留在上面。

1.4论文结构

本文的第一部分我们介绍了本次系统的研究背景,现状,内容,和本文结构;第二部分我们主要讲述了Android的一些相关技术和环境的搭建;第三部分系统设计,主要的是设计与分析本系统的功能模块;第四部分系统实现,主要的是实现本系统的功能模块和实现步骤;第五部分系统测试,主要的是针对我们的系统进行测试并完善;最后一部分是总结系统完成怎么样,有什么缺陷等。

2 系统设计

2.1搭建Android开发环境

1.安装并配置JDK:到官网下载jdk文件,根据自己的操作系统选择适合的位数的JDK,下载完毕之后我们配置环境变量,先设置JAVA_HOME这个系统变量名称,变量值为JDK在你电脑上的安装路径,如:E:\ProgramFiles\Java\jdk1.7.0_75,然后在PATH属性变量后加:;%JAVA_HOME%\bin即可。

2.安装配置Android SDK:为了免去安装步骤,我们选择下载SDK的压缩包,点击【android-sdk_r24.0.2-windows.zip】这个超链接,进行下载,下载完毕之后我们对其解压,双击SDK Manager.exe进行安装即可。

3.下载ADT插件:为了使得Android应用的创建,运行和调试更加方便快捷,Android的开发团队专门针对Eclipse IDE定制了一个插件:Android Development Tools(ADT)。

4.下载安装Eclipse2.2 Eclipse 中的Android工程结构如1图:

图 1 Android工程结构图

2.2系统模块总体设计

开发环境准备好以后,我们需要将系统的总体的模块设计出来,整体项目综合运用Android知识点,MVC框架构建项目,本项目所实现的功能模块主要包含以下几个:手机防盗模块,SIM卡变更报警、GPS追踪、远程销毁数据、远程锁闭手机四个子模块;通信卫士模块,黑名单管理、电话拦截、短信拦截三个子模块;软件管理模块,显示所有软件、卸载软件、启动软件、分享软件四个子模块。进程管理模块,显示所有正在运行的进程和剩余内存、一键清理两个子模块;流量统计模块,显示软件消耗的流量;手机杀毒模块,检测病毒、清除病毒两个子模块;系统优化模块,缓存清理、SD卡清理两个子模块;高级工具模块,手机号码归属地查询、常用号码查询、备份短信、还原短信、程序锁五个子模块;设置中心模块,自动更新设置、来电归属地显示设置、黑名单拦截设置、程序锁设置、归属地提示框风格、归属地提示框位置六个子模块。通过需求分析和系统可行性设计出来系统模块总设计如2图:

图 2系统模块图

2.2.1 手机防盗模块设计

针对Android手机丢失后或被有意窃取我们手机中的隐私信息等安全隐患,我们将设计出此功能。

绑定安全手机号码:当我们第一次登录安全助手的时候,需判断当前SIM卡号是否和被保护的SIM卡号是否相同,如果不相同,则手机将在后台自动发送短信给我们绑定的安全号码,那么我们的手机就会大大提高了安全性。

设置报警指令:当我们首次登录安全助手时,如果匹配到当前手机可能遗失,那么这个功能就会给我们自动报警。

设置远程开启防盗指令:开启远程手机防盗功能,用一个广播接收监听手机的启动状态,启动完将判断远程防盗是否开启,并且用TelephonyManager的getSimSerialNumber()方法获取到手机的SIM卡串号,对比手机串号是否一致,从而显示手机有没有被盗。

设置远程锁屏密码:当判断手机已经被盗,那么我们的后台将会启动一个锁屏程序将手机进行锁屏。

2.2.2 通讯卫士模块设计

拦截电话:用户在我们的添加黑名单的页面添加一条黑名单,那么我们后台将会拦截到此号码来电,直接挂掉,避免用户受到骚扰电话。

拦截短信:用户添加一个黑名单的号码,当这个号码发来信息的时候,后台将此短信进行删除,从而用户就看不到垃圾信息。

全部拦截:用户添加的所有号码,不管是来电还是短信,用户都不会看到。

添加黑名单业务流程如3图:

图 3添加黑名单图

通过手机号码进行过滤用户设置的黑名单,将不想看到的手机来电和手机短信进行过滤,数据库设计表如4图:

图 4黑名单数据表图

黑名单表中的字段:id为主键;number为手机号码;status为拦截的状态

2.2.3 软件管理模块设计

当今的手机应用数不胜数,但同时又面临了一个问题,比如当我们遇到急事,想使用QQ的时候,但是我们手机上的应用多达过百,找了半天又找不到。此功能就是解决类似的问题,我们可以启动某个应用程序,卸载一些不用的软件,可以将我们想用的程序分享给小伙伴。软件管理如5图:

图 5软件管理图

2.2.4 进程管理模块设计

当前Android手机有一致命的缺点就是内存大小,如果我们点了很多的程序不关那么我们手机将卡的不动,正因为这样,我们Android的性能就大大降低了。那些我们暂时不需要的软件我们就可以将它关闭,释放内存,此功能可以将内存信息以及运行中进程详细信息展示给用户,然后用户自如的终止某个程序。因此,我们设计出此功能,设计流程如6图:

图 6进程模块图

2.2.5 系统优化模块设计

我们都使用过Android手机,如果我们手机打开的应用过多或者长时间不关机,那么我们的手机很可能就会卡住。那是因为由于Android手机的内存有限,那么我们就需要将不定时的清除手机中的缓存数据,此功能将打开系统自带的查看应用程序详情,进行缓存清除。还有一个优化是我们第一次进入系统的时候,我们写的监听器就会监听软件服务器看是否有新的软件更新,如果有,那么我们将提醒我们的用户将软件进行更新升级,以免功能不能使用等一些BUG。

2.2.6 程序锁模块设计

我们每个人都想有自己的隐私空间,比方说有的时候我们需要将自己的手机借给弟弟妹妹玩的时候,这时我们就不想让他人看到自己的隐私,那么此功能可以将我们的一些程序上锁,比如短信,通讯录和短信等,那么其他人就不能使用这些功能,做到了保护用户隐私的功能。用户再也不需要给屏幕加密码锁,只需要给需要保护的程序上锁即可,当第一次使用上锁的程序的时候才会要我们输入密码,只有当下次锁屏完之后我们就再需要解锁了。数据库表设计如7图:

图 7程序锁定数据库表

2.2.7 手机杀毒模块设计

手机杀毒功能也是我们平时最常用的应用程序,我们需要将市场上收集的病毒建一张表进行数据库存储,下面我们称作病毒表,我们将手机程序扫描出来和病毒表里的病毒进行一一比对,如果比对上那么就是病毒,这边即将采用多线程进行清除工作,如果我们没有比对到病毒,那么手机是暂时安全的状态。手机病毒比对并进行查杀如8图:

图 8查杀病毒流程图

3系统实现

3.1系统优化模块

3.1.1更新软件功能实现

该模块先是我们第一次进入系统的时候,我们的监听器就会第一时间监听中央服务器的软件是否发布过,如果发布过新的版本,那么用户的界面就会弹出一个提醒用户更新软件的信息。用户可以选择暂时不更新,那么这个操作就有可能会影响后续的软件使用问题,也可以选择立即更新。其设计是我们先上传最新版本的系统,当检测出有新的版本可以升级时,我们在onClick方法中获取到下载新的软件的网路地址即可,主要代码如下:

private void downloadApk(String downloadUrl) {

if(!Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {

Toast.makeText(this, “不存在sdcard”, Toast.LENGTH_SHORT).show();

return;

}

HttpUtils httpUtils = new HttpUtils();

String path = Environment.getExternalStorageDirectory().getAbsolutePath() + “/mobileSafe.apk”;

httpUtils.download(downloadUrl, path, new RequestCallBack<File>() {

@Override

public void onSuccess(ResponseInfo<File> responseInfo) {

Log.i(TAG_LOG, “成功—>” + responseInfo.result.getAbsolutePath());

installApk(responseInfo.result.getAbsolutePath());

}

软件更新提醒如9图:

图9提醒更新界面图

当用户选择更新我们系统,那么将会出现这样的界面,如10图:

图10正在更新软件

3.1.2清除缓存功能实现

正如我们知道的那样,我们使用某些应用程序的时候就会有一些不必要的文件下载到手机上来,比如说我们使用浏览器浏览网页的时候,我们并不想一些没用的图片下载下来,但是手机就会缓存下来,此功能有一键清除缓存的功能。如11图:

图11清除缓存页面

3.2手机防盗模块

当我们第一次打开软件的时候,这时候我们将必须进入手机防盗模块的绑定安全号码,当我们的手机遗失的时候,我们将通过这个号码就能找到我们的手机,如果别人捡到此手机,插入的手机卡跟我们设置的手机号不一致的时候,此手机将会自动启动我们的锁屏。其设计是使用系统服务TelephonyManager读取手机卡的序列号,我们将安全号码输入以后,我们需要创建BootPhoneReceiver监听手机卡是否会变,其部分代码:

@Override

public void onReceive(Context context, Intent intent) {

String number = PrefUtils.getString(BaseActivity.PREF_BIND_SIM,””,context);

if(!TextUtils.isEmpty(serialNumber)){

TelephonyManager tm = (TelephonyManager)context.getSystemService(

Context.TELEPHONY_SERVICE);

String simSerialNumber = tm.getSimSerialNumber();

if(serialNumber.equals(simSerialNumber)){

Log.i(BaseActivity.TAG_LOG,”手机正常”);

}else {

Log.i(BaseActivity.TAG_LOG,”sim卡异常”);

}

}

}

实现如12图:

图12绑定安全号码

显而易见,此安全助手我们也必须加程序锁,当我们进入助手的时候,系统就会提醒我们输入程序锁的密码,如图13所示:

图13应用程序主界面密码认证

终于我们进入了程序的主页面,其设计是先创建主页面的Activity和布局文档,我们自定义一个adapter继承父类即可,实现如图14所示:

图14程序主页面

3.3程序锁模块

首先,我们先建一张程序锁表,我们使用的是SQLite数据库,那么写的类就必须继承SQLiteOpenHelper,然后在onCreate这个方法里面写语句,然后,我们点击某个应用的时候,也就是我们点击的应用是我们想加锁的应用,那么将此应用的包名加入到我们刚建的数据表中,并且在上面显示一个锁标志。当我们又点击一次的时候,也就是想解锁的时候我们将把此应用的包名从数据库中删除即可,并且显示已解锁的标志。

因为程序锁表有加锁和未加锁的状态,那么我们将有两个显示的页面未加锁的应用如15图:

图15未加锁的应用

已加锁应用如16图:

图16加锁应用

当我们给我们的必要的软件上程序锁后,如果我们想要使用我们这个软件,那么我们就必须要输入程序锁的密码才能够继续使用,否则不能继续使用。当用户使用我们加了程序锁的应用,如17图:

图 17 验证程序密码页面

3.4病毒查杀模块

此功能模块我们需要先将收集来的病毒的信息存入到数据库中,我们知道每一个病毒都有一个唯一的信息,也就是通过md5信息加密过的。当我们用户使用此模块的时候,我们将遍历出我们手机中的所有的应用程序,用手机上的应用程序的md5信息与病毒数据库中的信息进行一一比对,如果比对上,那么我们就提示用户对其查杀,查杀过程也就是卸载程序的过程,查杀完毕将继续进行扫描,直到扫描结束。

遍历所有的应用程序如18图:

图18遍历比对病毒中

当发现病毒的时候,我们的系统将提示用户将病毒进行查杀,如19图:

图19提示用户查杀病毒

3.5通讯卫士模块

此功能也是我们常用功能之一,我们将监听来电服务和短信服务,从而判断来电号码和短信号码是否是黑名单中的手机号码,如果是,那么我们将主动的拦截此号码来电以及删除短信信息,为保障用户的生活。其设计就是将用户输入的黑名单存入数据库,创建一个监听BlackPhoneReceiver,将内容与我们数据库中的号码进行比对即可;挂断黑名单来电我们是通过Android里面的api方法endCall;删除电话记录即可。其部分代码为:

public class BlackNumberService extends Service {

@Nullable

@Override

public IBinder onBind(Intent intent) {

return null;

}

@Override

public void onCreate() {

super.onCreate();

}

@Override

public void onDestroy() {

super.onDestroy();

}

}

当然,我们可以任意的添加黑名单号码,黑名单管理页面如20图:

图20黑名单管理页面

当我们点击新增黑名单的按钮,新增黑名单号码如21图:

图21新增号码

3.6软件管理模块

此功能也是我们最为常用的功能之一,使用该功能我们将遍历出我们手机中的所有的应用,我们点击某个应用的时候,我们将会显示出此程序的一些详细的信息,我们也可以将此软件进行增删改查,还有一个实用的功能是,我们可以点击发送,可以将此软件分享或者发送给朋友。其设计是通过listview将软件遍历出来,在每条信息上加上运行、卸载、分享这三个单击事件,当用户点击的时候会触发相应的Activity。

当我们进入软件管理这个模块的时候,将会显示如22图:

图22管理首页

当我们点击某一个应用的时候,将会出现如23图:

图23软件的操作

3.7号码归属地模块

此功能模块主要给用户提供归属地查询功能,当我们收到一个短信的时候,我们又不知道该号码是哪里的,我们是否认识,这时,我们就想知道号码是哪里的,从而判断这个号码的主人我们是否认识,这样安全性就大大的提高了。我们将用户输入的号码和手机号码归属地数据库进行比对,从而将数据显示出来。其设计是我们先创建一个监听服务PhoneAddressService,先获取TelephonyManager,通过listen方法实现,然后我们自己写一个监听器继承PhoneStateListener重新写onCallStateChanged方法。其部分代码为:

public static String getAddress(Context context, String number) {

String address = “未知号码”;

String path = new File(context.getFilesDir(), DB_NAME).getAbsolutePath();

SQLiteDatabase database = SQLiteDatabase.openDatabase(path, null, SQLiteDatabase.OPEN_READONLY);

if (number.matches(“^1[3-8]\\d{9}$”)) {

Cursor cursor = database.rawQuery(“select location from data2 where id=(select outkey from data1 where id=?)”,

new String[]{number.substring(0, 7)});

if (cursor.moveToFirst()) {

address = cursor.getString(0);

}

cursor.close();

}

当用户在输入框输入一个号码的时候,我们将查询出来的信息,其设计是一个QueryAddressActivity,我们通过前7查询对应的区域,再根据4位区号再进行查询,如果号码就3-4位那么是紧急号码,如果都不满足,那么就是未知。如24图:

图24查询号码

此模块还有一个常用的号码是,我们可以查询出一些常用号码,这样方便用户的生活。常用号码显示如25图:

图25号码列表

3.8设置中心模块

此功能是我们可以查询出我们哪些功能可以使用,哪些功能我们不想使用,但是这样就有一个问题,就是我们需要每次进来的时候将重新读取我们的所有的应用,以免出现脏读的数据信息。

当我们对一些设置进行管理的时候,如26图:

图26设置中心

4 系统测试

4.1 测试目的以及原因

测试目的是让我们在开发周期的时候今早发现多的bug,从而上线的时候尽量顺利进行。程序员写代码大多是比较疲劳的状态写的代码,那么错误率肯定很高,还有一点的是在一些边界值(最大值和最小值)的时候我们就会犯一些错误,这也是恰恰最容易出现错误的地方。

4.2 软件测试原则

我们深知测试的优点很多,但是测试也会花费昂贵费用,而且测试几乎都是死循环,我们想要测试出所有的问题bug那肯定是不能实现的,而且测试的时间肯定是非常久,且是浪费时间。所以我们将测试个差不多的情况就可以上线使用,然后继续开发测试修复。

4.3 常用测试

主要有黑盒测试:测试结果,白盒测试:测试源码较多,静态测试:检查程序代码、界面或文档可能存在的错误的过程,动态测试:检查输出结果和预期结果匹配度。还有我们最为常见的单元测试和集成测试等。

4.4 测试实现

(1)手机防盗模块的测试:主要测试我们先绑定一个安全号码,然后我们将换上另一张手机卡和我们将安全助手上程序锁,看是否有对应的效果。

测试用例表如表1所示:

表1手机防盗模块测试

序号输入预期实际测试
1换SIM卡显示提醒正确显示提醒通过
2打开安全助手提示输入密码正确提示通过

(2)病毒查杀模块的测试:主要测试我们先下载一些未认证的数据证书到手机上,在病毒表中加入此数据,点击病毒查杀,看是否有对应效果。

测试用例表如表2所示:

表2查杀病毒模块测试

序号输入预期实际测试
1点击查杀病毒可以清除病毒文件能够清除通过

(3)通讯卫士模块测试:主要测试我们先将一个手机号加入黑名单,用该手机发短信、打电话进行测试,看是否有对应效果。

测试用例表如表3所示:

表3通讯卫士模块测试

序号输入预期实际测试
1拦截来电没有收到来电能够拦截通过
2拦截短信没有收到短信能够拦截通过
3全部拦截拦截短信电话能够拦截通过

(4)软件管理模块测试:主要测试我们点击分享、运行、卸载,看是否有对应效果。

测试用例表如表4所示:

表4软件管理模块测试

序号输入预期实际测试
1点击运行运行软件能够运行通过
2点击分享分享给好友成功分享通过
3点击卸载卸载软件卸载成功通过

(5)号码归属地模块测试:主要测试我们进行拨打一个号码和查询一个号码,看是否有对应效果。

测试用例表如表5所示:

表5号码归属地模块测试

序号输入预期实际测试
1拨打一个电话显示归属地能显示归属地通过
2查询正确号码显示归属地能够显示通过
3查询错误号码显示归属地能够显示通过

5 总结

此系统是基于Android平台集成的,首先我通过学习Android基本知识,后来我慢慢的接触了Linux操作系统,linux操作系统相对Windows来说更要胜出一筹,通过java技术遵循三层架构的特点编写的代码,并采用restful风格进行处理。此系统实现了防盗模块,通讯模块,软件管理模块,进程模块,杀毒模块,优化模块设置模块,归属地模块,其基本功能已经实现并可以使用。安全保障主要是通过防盗模块里面有设置安全号码、设置程序锁,杀毒模块和通讯模块中的黑名单将对用户进行全面的保护,不受干扰。同时,通过我们的调查我们也加入了进程管理和软件管理模块,可以让用户使用更加顺畅。

但是一些功能中还是有点缺陷,比如说手机防盗模块中功能,我们手机遗失的时候,我们系统判断出此手机已经遗失,那么我们可以将自动拨号打紧急号码,还有的是我们可以调用手机的前置摄像头将疑犯的面容拍摄下来发给我们绑定的邮箱,没有实现恢复用户误删除的数据,没有实现亲情号码联机等等。今后,作为一个手机安全助手软件,这些功能还远远不够,还需进一步的完善与实现。

参考文献

[1]王家林,王家虎,王家俊.Android项目实战:手机安全软件开发案例解析[M].北京:电子工业出版社,2013.

[2]吴燕波.Android手机安全问题及防护技术分析[J].中国新通信,2018.

[3]Lauren Darcey,Shane Conder.Android移动开发一本就够[M].张巍等,译.人民邮电出版社,2012.

[4]360公司安全IP惠及移动端 手机助手用户活跃度再登榜首[N]. 证券日报,2017-12-27.

[5]杨建强,吴钊,李学锋.增强智能手机安全的动态恶意软件分析系统[J].计算机工程与设计.2010[13].

[6]Herbert Schildt著,周志彬等译.Java2参考大全[M].北京:电子工业出 版社,2003

[7]刘泽平.基于Android系统的手机隐私安全的设计与实现[J].通讯世界,2017.

[8]沈泽刚,秦玉平.Java语言程序设计[M].北京:清华大学出版社,2010

[9]智研咨询集团,2017-2022年中国手机安全软件行业分析及未来发展趋势报告,http://www.chyxx.com/research/201611/472734.html,2016.

[10]tonylau_hnu. 五步搞定Android开发环境部署. https://blog.csdn.net/lxl584685501/article/details/45249217, 2015.

[11]MiracleAce.Android项目实战–手机卫士, https://blog.csdn.net/u011485531.2017

[12]2011年中国手机安全状况报告.[EB/OL].[2011-08-11]. http://wenku.baidu.com/view/577ef96faf1ffc4ffe47ac4e.html.

[13]郭江波. 基于Android手机安全防御系统的设计与实现[D].河北科技大学,2018.

[14]李镇林,陈傲然.浅述Android操作系统手机的安全问题[J].科学技术创新,2017.

[15]洪双喜. Android平台隐私保护方法研究[D].北京邮电大学,2017.

[16]焦丹丹,张晓东,李大尉,那宏壮,张松,王笑庸.基于Android的手机安全卫士[J].黑龙江科学,2016.

[17]严仁飞. 基于Android平台的手机安全卫士系统的设计与实现[D].江西财经大学,2016.

[18]黄粟.“移动卫士”让手机使用“互联网+安全”[J].通信与信息技术,2015(05):26-27.

[19]郭占宇. Android手机安全卫士的设计与实现[D].吉林大学,2017.

附录

/**

* 保存应用程序全局状态的基类

*/

public class App extends Application {

private static final String TAG = “App”;

private List<Activity> mActivities;

private long lastTime;

@Override

public void onCreate() {

super.onCreate();

mActivities = new ArrayList<Activity>();

SpUtil.init(this);

Thread.setDefaultUncaughtExceptionHandler(new MyUncaughtExceptionHandler());

}

public void addActivity(Activity activity) {

mActivities.add(activity);

}

public void removeActivity(Activity activity) {

mActivities.remove(activity);

}

public void exitWithDoubleClick() {

if (System.currentTimeMillis() – lastTime <= 1500) {

exit();

} else {

lastTime = System.currentTimeMillis();

ToastUtil.makeText(this, R.string.exit_tips);

}

}

public void exit() {

for (Activity activity : mActivities) {

activity.finish();

}

System.exit(0);

}

private class MyUncaughtExceptionHandler implements UncaughtExceptionHandler {

@Override

public void uncaughtException(Thread thread, Throwable ex) {

FileWriter fw = null;

try {

File file = new File(StorageUtil.getFeedbackDir(), DateUtil.dateToDayString(new Date()) + “.log”);

boolean flag = file.exists();

// 这行执行完,file就存在了,所以得在这之前判断文件是否存在

fw = new FileWriter(file, true);

if (!flag) {

fw.write(“当前应用版本:” + getCurrentVersionName() + “\n”);

fw.write(“当前设备信息:\n”);

fw.write(getMobileInfo());

fw.write(“—————————————————–\n”);

}

fw.write(getErrorInfo(ex));

fw.write(“———————————————————–\n”);

fw.flush();

// 正式发布后删掉

ex.printStackTrace();

} catch (Exception e) {

Logger.e(TAG, e.getMessage());

} finally {

if (fw != null) {

try {

fw.close();

} catch (IOException e) {

Logger.e(TAG, e.getMessage());

}

}

}

Process.killProcess(Process.myPid());

// 定期上传错误日志到服务器

}

private String getErrorInfo(Throwable throwable) {

Writer writer = new StringWriter();

PrintWriter pw = new PrintWriter(writer);

throwable.printStackTrace(pw);

pw.close();

return writer.toString();

}

private String getMobileInfo() {

StringBuffer sb = new StringBuffer();

// 通过反射获取系统的硬件信息

try {

Field[] fields = Build.class.getDeclaredFields();

for (Field field : fields) {

// 暴力反射 ,获取私有的信息

field.setAccessible(true);

sb.append(field.getName() + “=” + field.get(null).toString());

sb.append(“\n”);

}

} catch (Exception e) {

Logger.e(TAG, e.getMessage());

}

return sb.toString();

}

}

public String getCurrentVersionName() {

try {

return getPackageManager().getPackageInfo(getPackageName(), 0).versionName;

} catch (Exception e) {

return null;

}

}

public int getCurrentVersionCode() {

try {

return getPackageManager().getPackageInfo(getPackageName(), 0).versionCode;

} catch (Exception e) {

return 0;

}

}

public Intent getInstallApkIntent(File apkFile) {

Intent installApkIntent = new Intent();

installApkIntent.setAction(Intent.ACTION_VIEW);

installApkIntent.addCategory(Intent.CATEGORY_DEFAULT);

installApkIntent.setDataAndType(Uri.fromFile(apkFile), Constants.mime.APK);

return installApkIntent;

}

}

/**

* 程序锁服务

*/

public class ApplockService extends Service {

private static final String TAG = “ApplockService”;

private AppLockDao mAppLockDao;

private boolean mIsWatching;

private List<String> mTempStopProtectPackageNames;

private List<String> mProtectPackageNames;

private ApplockObserver mApplockObserver;

private ScreenLockReceiver mScreenLockReceiver;

private ScreenUnLockReceiver mScreenUnLockReceiver;

private Intent mAuthIntent;

private ActivityManager mActivityManager;

@Override

public IBinder onBind(Intent intent) {

return new MyBinder();

}

@Override

public void onCreate() {

super.onCreate();

mTempStopProtectPackageNames = new ArrayList<String>();

mAppLockDao = new AppLockDao(this);

mProtectPackageNames = mAppLockDao.findAll();

mAuthIntent = new Intent(this, ApplockAuthActivity.class);

mAuthIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

mScreenLockReceiver = new ScreenLockReceiver();

registerReceiver(mScreenLockReceiver, new IntentFilter(Intent.ACTION_SCREEN_OFF));

mScreenUnLockReceiver = new ScreenUnLockReceiver();

registerReceiver(mScreenUnLockReceiver,new IntentFilter(Intent.ACTION_SCREEN_ON));

mApplockObserver = new ApplockObserver(new Handler());

getContentResolver().registerContentObserver(AppLockDao.uri,true, mApplockObserver);

mActivityManager = (ActivityManager) getSystemService(ACTIVITY_SERVICE);

startWatchDog();

}

@Override

public void onDestroy() {

mIsWatching = false;

unregisterReceiver(mScreenLockReceiver);

mScreenLockReceiver = null;

unregisterReceiver(mScreenUnLockReceiver);

mScreenUnLockReceiver = null;

getContentResolver().unregisterContentObserver(mApplockObserver);

mApplockObserver = null;

super.onDestroy();

}

protected void startWatchDog() {

new Thread(new Runnable() {

@Override

public void run() {

mIsWatching = true;

while (mIsWatching) {

// 获取最近创建的任务栈

RunningTaskInfo runningTaskInfo = mActivityManager.getRunningTasks(2).get(0);

String packageName = runningTaskInfo.topActivity.getPackageName();

if (mProtectPackageNames.contains(packageName)) {

// 如果当前应用程序没有处于临时停止保护状态

if (!mTempStopProtectPackageNames.contains(packageName)) {

mAuthIntent.putExtra(Constants.extra.PACKAGENAME, packageName);

startActivity(mAuthIntent);

}

}

try {

Thread.sleep(300);

} catch (InterruptedException e) {

e.printStackTrace();

}

}

}

}).start();

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值