匡凤飞
摘要:随着3G/4G网络的快速发展,移动智能终端设备不断得到普及。在智能设备的广泛使用中,安卓已是活跃用户量最多的移动终端操作系统。由于安卓系统是开源的,导致有些开发爱好者可以在基于Android平台的应用中加入一些恶意代码或程序,窃取他人隐私,使手机的安全严重受到威胁。基于这些原因,作者拟开发集手机防盗、手机通讯、手机软件管理、手机进程管理、扫描杀毒、系统优化等于一身的手机安全卫士,以保障手机用户的隐私。
关键词:3G/4G网络;Android平台;手机防盗;手机安全卫士
中图分类号:TN927 文献标识码:A 文章编号:1009-3044(2015)09-0048-06
随着科技的发展,移动互联网已成为当下的趋势,而拥有Android平台的终端设备已达到75%的占有率,这都要归根于其平台的开放性,显著的开放性可以使其拥有更多的开发者。随着用户和应用的日益丰富,使得Android平台下的应用多而混乱,其中不乏有大量的恶意扣费软件、盗取用户隐私的木马程序等等。这就使得开发出一个保护用户隐私和阻截恶意软件的手机安全卫士显得很有必要。本课题研究和设计的手机安全卫士不仅可以检测已安装的恶意软件,还能通过手机绑定其它手机,以达到在手机丢失后远程锁定用户手机,甚至远程销毁已丢失手机上的用户数据的目的,进而起到保护用户隐私的作用。
为了增强用户体验,除了在手机安全卫士的UI设计上进行了精心的人性化设计,在功能性和实用性方面,充分结合了一些商业性安全软件的构思和设计技巧,进行了优化设计,力求能成为手机终端用户的必备工具之一。
1 项目需求分析
手机安全卫士项目(全文简称“项目”)是根据当前手机用户需求而开发的,安卓系统的热度与开源,使得用户的隐私不能得到安全保障。为提高手机用户的通信安全,加强手机用户信息保密管理,项目主要从以下八个功能模块着手,具体有以下功能需求。
1)手机防盗
如果用户手机被盗,可以发送相应的指令给安全号码,然后手机自动发送手机中SIM卡的信息和手机的位置信息,给安全号码。也可以给手机恢复出厂设置,设置锁屏密码,远程格式化手机SD卡,远程锁定手机屏幕,大大的保护失主的隐私安全。
2)通讯卫士
用户可以自定义来电黑名单,可以短信拦截,电话拦截,短信电话拦截,来电归属地显示,和对来电归属地浮标位置的调整。
3)软件管理
软件有系统软件与本地软件两类,可以显示软件的详细信息和对软件的快速启动、删除、分享应用程序。
4)进程管理
每个列表显示一个正在运行的进程信息,可以杀死任意一个进程,批量选择杀死进程,还可以显示系统内存占用信息,通过桌面widget可以时刻展示当前的手机内存占用状况。
5)手机杀毒
从服务器下载最新的病毒库,匹配用户程序的包名与程序的数字签名判断应用程序是否包含病毒,提示用户并且查杀恶意软件,使病毒木马无处可藏。
6)系统优化
扫描用户手机上每一个应用,列出含有缓存的应用,用户可以清理来提高手机性能,加长手机续航时间。
7)高级工具
号码归属地查询,常用号码查询,短信还原与备份。
8)设置中心
用户可以选择是否开启软件自动更新,是否开启归属地查询,是否开启通讯防火墙等。
2 项目的设计
根据以上的功能需求,最常用和最具代表性的主要功能模块有设备防盗、应用管理、进程管理、手机杀毒。其中,设备防盗模块的设计是根据设备防盗开关是否开启,并结合用户手机SIM更换的状态和设置的密码来保护用户的;而应用管理模块是通过ListView控件来展现用户设备所有安装的应用,在项目中,所有应用分为用户应用和系统应用,用户可以点击列表条目对安装的程序进行分享、启动和卸载;进程管理是通过ActivityManager系统API来得到用户设备正在运行的进程,用户可以结束任意一个进程释放手机内存,也可以多选结束多个进程来节省手机内存空间;手机杀毒模块是通过一个病毒数据库与用户程序的数字签名和用户安装程序的包名进行匹配,检测病毒,并删除恶意病毒等。下面将通过项目模块结构图和各个子模块的流程图,进行具体的设计。
2.1 HomeActivity总体模块结构设计
HomeActivity总体模块结构图如图1所示。
2.2 手机防盗模块设计
手机防盗模块是通过用户事先设置好安全号码,比且开启防盗功能。根据相应的满足条件,安全卫士会发送相应的响应到安全号码手机上,手机防盗模块的流程图如下图2所示。
防盗的核心技术是通过短信指令,远程的控制了丢失的手机。通过建立一个broadcast监听手机的重启状态,通过系统的一个服务TelephonyManager.getSimSerialNumber()方法获取手机的SIM卡号,匹配和之前的是否一样,如果不一样就会给之前设置的安全号码发送新手机号码。
2.3 通讯卫士模块设计
手机通讯卫士是通过黑白名单来管理来电和短信的,该模块是通过继承SQLiteOpenHelper来创建一个BlackNumberDBOpenHelper类,就好比创建一个管理黑名单的数据库,用于对黑名单的增删改查,功能流程如图3所示。
2.4 软件管理模块设计
软件可分为系统软件与用户软件,软件管理业务就是让用户管理自己的软件,在显示的每一个软件上点击可以分享、启动或者卸载一个应用。该模块的业务流程如图4所示。
2.5 设置中心模块设计
通过设置中心可以设置是否开启后台服务设置,来点归属地显示服务设置,黑名单拦截服务设置。其业务逻辑流程如图5所示。
3 项目的实现与测试
3.1 项目开发环境与应用环境
3.1.1开发环境
项目采用Sqlite数据库,并在win7操作系统上,使用Java语言在Android Development Tool环境下完成项目的开发。为了进一步了解开发环境,下面将对项目的目录结构加以说明。
1)项目的目录空间结构
在创建了本次的设计的项目后,会在项目的根目录下发现一些文件和子目录,以下是对这些目录的简要说明:
AndroidManifest.xml:是一个XML文件,用于描述将被构建的应用程序,以及应用程序中包含哪些组件(Activity、Service等等)。
build.xml:是一个Ant脚本,用于编译应用程序和在设备上安装应用程序。
Default.properties和local.properties:是属性文件,由Ant构建脚本使用。
assets/:文件夹,用于存放需要打包到应用程序中的静态文件,以便部署到设备中。
bin/:文件夹,用于存放编译后的应用程序。
gen/:文件夹,Android构建工具存放它们生成的源代码的地方。
libs/:文件夹,用于存放应用程序用到的第三方JAR包。
src/:文件夹,用于存放应用程序的Java源代码。
res/:文件夹,用于存放应用程序的资源(如图标、GUI布局等),将被打包到编译后Java中。
tests/:文件夹,用于存放完全独立的Android项目,以便测试你所创建的项目。
2)项目代码的组织结构
程序代码的组织结构大体上有两种:
第一种:按照业务逻辑组织代码,这样业务与业务之间的关联度比较小。
第二种:按照代码的类型组织包结构。
在这里,我们采用第二种代码的组织结构进行手机安全卫士的开发,其代码的组织方式如下:
com.example.mobilesafe,这个包放我们开发程序的主界面;
com.example.mobilesafe.ui,这个包放我们开发程序的自定义控件;
com.example.mobilesafe.engine,我们程序开发的业务类放在这个包下;
com.example.mobilesafe.db,这个包放我们所使用的数据库类;
com.example.mobilesafe.db.dao,这个包实现我们对数据库的增删改查;
com.example.mobilesafe.utils,这个包下为我们公用的工具类;
com.example.mobilesafe.service,这个包下为我们后台长期运行的服务;
com.example.mobilesafe.receiver,这个包下是我们定义的广播接收者。
3.1.2 项目应用环境
项目开发完成后,在联想、三星、诺基亚、HTC、小米、索尼、华为、中兴等安卓手机上应用均可。
3.2功能模块的实现
3.2.1 splashactivity模块
该界面主要功能是联网检查服务器是否有新的版本更新初始化数据和展示手机卫士的logo,可以提高用户的体验效果,具体界面如图6所示。
版本更新关键代码如下:
if (getAppVersion().equals(updateInfo.getVersion())) {//加载配置,判断是否与当前版本一致
Log.i(tag, "版本一致 进入主界面");
loadMainUi();//加载主界面
finish();//关闭当前界面
} else {
Log.i(tag, "版本不同,下载");
showUpdateDialog();//进入更新对话框
}
3.2.2 Homeactivity模块
在splash界面点击“ok”按钮后,就直接进入homeactivtity了,该界面是手机用户操作的主界面,具体界面效果如图7所示。
主界面布局关键代码如下:
private static final String[] names = { "手机防盗", "通讯卫士", "软件管理", "进程管理","流量统计", "病毒查杀", "系统优化", "高级工具", "设置中心" };//功能名称数组
private static final int[]icons={R.drawable.safe,R.drawable.callmsgsafe,R.drawable.app,R.drawable.taskmanager,
R.drawable.netmanager,R.drawable.trojan,R.drawable.sysoptimize,R.drawable.atools,R.drawable.settings
};//功能图标数组
iv_icon.setImageResource(icons[position]);//把每张图片显示在主界面上
tv_name.setText(names[position]);//把每个功能名字显示在主界面上
3.2.3手机防盗功能模块
手机防盗也是该应用最核心的功能模块之一,是增强用户体验的亮点。用户可以通过预先设置密码开启防盗功能。用户手机一旦丢失,就可以事先像安全卫士设置的安全号码发送指令做出相应的响应,来找回丢失的手机。
1)安全密码设置
打开手机防盗功能界面的时候,应用会进行判断用户是否已经设置好防盗密码,如果是首次会跳到设置密码的对话框,如图8所示。
设置安全密码关键代码如下:
AlertDialog.Builder builder = new Builder(this);
View view = View.inflate(this, R.layout.dialog_first_entry, null);
et_first_entry_pwd = (EditText) view
.findViewById(R.id.et_first_entry_pwd);
et_first_entry_pwd_confirm = (EditText) view
.findViewById(R.id.et_first_entry_pwd_confirm);
bt_first_entry_cancle = (Button) view
.findViewById(R.id.bt_first_entry_cancle);
bt_first_entry_ok = (Button) view.findViewById(R.id.bt_first_entry_ok);
bt_first_entry_ok.setOnClickListener(this);
bt_first_entry_cancle.setOnClickListener(this);
dialog = builder.create();
dialog.setView(view, 0, 0, 0, 0);
dialog.show();
2)设置向导实现
用户正确输入密码后,就会进入防盗安全向导界面面,用户只有完成手机防盗模块4个步骤的设置向导设置,安全功能才会被开启,其具体界面效果如图9至图12所示。
防盗设置向导代码如下:
Step1:
String simNumber = tm.getSimSerialNumber();
Editor editor = sp.edit();
editor.putString("sim", simNumber);
editor.commit();
tv_bind_sim.setText("SIM卡已绑定");
iv_bind_sim.setBackgroundResource(R.drawable.lock);
Step2与step3:
Editor editor=sp.edit();
String content = data.getStringExtra("content");
number = data.getStringExtra("number");
editor.putString("contact_content", number);
editor.commit();
contact_content.setText(content);
Step4:
if (!sp.getBoolean("opend", false)) {
contact_content.setText("防盗已开启");
safe_lock.setImageResource(R.drawable.lock);
Editor editor = sp.edit();
editor.putBoolean("opend", true);
editor.commit();
} else {
contact_content.setText("防盗未开启");
safe_lock.setImageResource(R.drawable.unlock);
Editor editor=sp.edit();
editor.putBoolean("opend", false);
editor.commit();
}
3.2.4 进程管理模块
进程管理界面的UI和软件管理界面的UI大致类似,其主要界面展示如图13所示。
进程管理关键代码如下:
for (TaskInfo taskInfo : killedTasks) {
if (taskInfo.isUserTask()) {
usertaskinfos.remove(taskInfo);
} else {
systemtaskinfos.remove(taskInfo);
System.out.println("jinlai");
}
}
3.2.5 通讯卫士管理模块
通讯卫士可以让用户自定义添加黑名单,在界面右上角有个添加图标按钮,点击添加后,弹出添加黑名单对话框,可以电话拦截,短信拦截和电话短信拦截三种模式。确定后成功添加,黑名单号码会保存到黑名单数据库里,并且显示出来。其界面展示如图14所示。
黑名单关键代码如下:
if ("1".equals(info.getMode())) {
holder.tv_mode.setText("全部拦截");
holder.tv_mode.setTextColor(getResources()
.getColor(R.color.red));
} else if ("2".equals(info.getMode())) {
holder.tv_mode.setText("电话拦截");
holder.tv_mode.setTextColor(getResources().getColor(
R.color.purple));
} else if ("3".equals(info.getMode())) {
holder.tv_mode.setText("短信拦截");
holder.tv_mode.setTextColor(getResources().getColor(
R.color.orange));
}
3.2.6 设置中心管理模块
设置中心是对该手机卫士的一些功能进行设置,里面含的模块有是否打开自动更新,来电显示归属地显示位置信息以及是否显示来电归属地对话框,是否打开黑名单拦截服务等。其主要界面展示如图15所示。
设置中心关键代码如下:
自动更新:
if (sv_setting_update.isCheck()) {
sv_setting_update.setcheck(false);
editor.putBoolean("update", false);
sv_setting_update.setcontent("自动更新关闭"); // 更新
} else {
sv_setting_update.setcheck(true);
editor.putBoolean("update", true);
sv_setting_update.setcontent("自动更新开启");
}
归属地:
if (sv_setting_showaddress.isCheck()) {
sv_setting_showaddress.setcheck(false);
sv_setting_showaddress.setcontent("查询关闭"); // 归属地查询
stopService(showAddressServiceIntent);
} else {
sv_setting_showaddress.setcheck(true);
sv_setting_showaddress.setcontent("查询开启");
startService(showAddressServiceIntent);
}
防火墙:
if (sv_setting_firewall.isCheck()) {
sv_setting_firewall.setcheck(false);
sv_setting_firewall.setcontent("防火墙服务没有开启");
stopService(callSmsFireWallServiceIntent);
} else {
sv_setting_firewall.setcheck(true);
sv_setting_firewall.setcontent("防火墙服务开启");
startService(callSmsFireWallServiceIntent);
}
3.3 项目测试
在开发好项目后,需要对项目的每一个功能模块进行测试,把项目部署到虚拟机上测试是否能正常运行,但由于项目的功能模块比较多,我们只对其中的两项常用服务进行测试。
3.3.1 来电归属地测试
把项目部署到虚拟机上运行,打开设置中心里的打开归属地按钮,通过Eclipse进入到(Dalvik Debug Monitor Service)DDMS界面,调试监控服务。然后用虚拟机拨打一个电话号码,看号码归属地是否能成功的部署到手机上,其显示的界面如图16所示。
3.3.2 通讯卫士模块测试
测试开始前,我们需要开启两台模拟器,一个当作拨号电话,一个当作接听电话,然后我们把拨打电话的那一台模拟器的号码添加到接听电话模拟器的黑名单上,分别测试三个模式,电话拦截,短信拦截,电话短信拦截。看应用是否成成功的拦截我们设定的模式。如下图17所示。
3.3.3 在真机上测试
测试时把项目部署到不同分辨率的手机上,发现不同显示器上的显示结果不一样,软件管理界面尤其明显。比如PopupWindow,在不同分辨率的显示效果变形,大分辨率上弹出距离图标较远,小分辨率上则相反。通过对源代码进行优化与修改,创建一个分辨率转换工具,把px转化成dip,转换后测试效果在不同分辨率的手机上显示效果是一样的,有效的解决了图形变形的问题。
4 结束语
手机安全是移动互联网研究的一个重要课题,手机安全卫士的研究目前笔者只作比较初步的研究。已对手机防盗、通讯卫士、软件及进程管理等功能做了具体的设计与实现,并完成了数据包及应用程序联网拦截等防火墙的基本功能。通过手机防盗功能的设置,可以远程定位已丢失的手机和远程清除已丢失手机SIM卡中的用户数据。这是该项目的亮点之一。其次,通过通讯卫士对黑白名单的管理,可以通过电话、短信以及电话和短信等3种方式对手机进行通讯管理,这种对手机安全的管理方式也是用户的实用功能之一。当然,项目的研究也存在很多不足,比如不能添加病毒库,暂时还不能实现对木马病毒的查杀,还未设计系统故障修复功能,还未实现基于数据包内容的过滤与拦截等功能,笔者将在今后对Android的学习和日常的工作中,对手机卫士作进一步优化和完善,争取为用户提供更多更实用的功能,发挥更大的应用价值。
参考文献:
[1] 周运伟. 手机安全问题的难点剖析及其对策[J]. 信息网络安全, 2013(10): 78-80.
[2] 宋杰. Android OS手机平台的安全机制分析和应用研究[J]. 计算机技术与发展, 2010, 20(6): 152-156.
[3] 潘莉. 手机病毒的特点与防范[J]. 电脑与电信, 2011, 15(5): 74-75.
[4] 江连海. 智能手机安全系统开发[J]. 可编程控制器与工厂自动化, 2013(5):71-73.
[5] 蒋绍林. Android安全研究综述[J]. 计算机应用与软件,2012, 29(10): 206-210.
[6] 罗喧. 智能手机应用安全关键技术探讨[J]. 计算机应用与软件,2012(10): 19-27 .