信息同步系统之手机安全卫士毕业设计论文.docx
《信息同步系统之手机安全卫士毕业设计论文.docx》由会员分享,可在线阅读,更多相关《信息同步系统之手机安全卫士毕业设计论文.docx(41页珍藏版)》请在冰豆网上搜索。
信息同步系统之手机安全卫士毕业设计论文
信息同步系统之手机安全卫士
──进程管理、流量统计、手机杀毒
摘要:
在本手机安全卫士中,涉及到针对某个病毒的专有杀毒程序。
当手机病毒刚出现的时候,由于病毒数目很少,而且并不具有实质性的危害,安全厂商往往通过提供专有杀毒程序的形式来解决威胁。
基于病毒文件HASH描述的反病毒扫描技术。
是通过给对应的病毒计算HASH,然后通过文件扫描找到对应的病毒。
基于HASH计算的反病毒引擎算法简单,而且病毒定义方式也很容易但是但是由于灵活性及效率原因,很快就被淘汰。
基于通用病毒定义语言的反病毒扫描技术。
通用的病毒定义语言可以用最少的代价描述一个或者多个病毒,并极大的优化了扫描引擎的性能。
关键词:
安全;手机安全卫士;进程管理;流量统计;手机杀毒
Abstract:
inthemobilephonesecurityguards,relatestotheavirusproprietaryantivirusprogram.Whenthemobilephonevirusfirstappeared,asthevirusarefewinnumber,butdoesnothaveasubstantialrisk,securityvendorsoftenbyprovidingproprietaryantivirusprogramformstoaddressthethreat.
AntivirusscanvirusfilebasedonHASHdescription.ThroughtothecorrespondingvirusHASHiscalculated,andthenthroughthefilescantofindthecorrespondingvirus.BasedontheantivirusenginealgorithmofHASHcomputingissimple,butthevirusdefinitionmodeisalsoveryeasybutbecauseofflexibilityandefficiencyreasons,soontobeeliminated.
Antivirusscanningtechnologybasedontheuniversalvirusdefinitionlanguage.Virusdefinitionlanguagecandescribeoneormoreviruseswiththeleastcost,andgreatlyimprovedtheperformanceofscanningengine.
Keywords:
security;mobilephonesecurityguards;processmanagement;trafficstatistics;mobilephoneantivirus
1绪论
1.1背景
本次开发是由安博教育和学校发起,学生自主选题的一次毕业设计。
伴随智能手机的不断普及,移动互联网的快速发展,伴随着3G时代的到来,智能手机的广泛应用,安卓成为活跃用户量最大的移动终端操作系统,并且安卓操作系统是开放源代码的,所以每个人都可以开发出一个安卓应用,导致安卓的应用数不胜数。
由于安卓的开源,导致每个人可以对安卓端的软件进行编写,而有些开发者在应用中加入一些非法的代码,窃取用户的隐私,使得手机的安全问题日益明显,手机安全问题关注度日益提高。
随着Android平台的发展和普及,Android已经成为恶意代码的下一个肆虐之地,这里我把一些漏洞的原理和技巧加以整理总结,起到抛砖引玉的作用,希望大家能够把这些知识用到以后反病毒和软件保护的工作中.
不需要懂得信息安全的人是幸福的,而我们的职责是保障他们的幸福。
1.2开发思路和计划
在和指导老师多次交流后,确定实现方案的要点和工作计划。
整体项目采用MVC框架,是对android知识点的综合应用,用到的技术有activity,service,broadcast,contentprovider,Notification,sqlite数据库,自定义title,自定义控件,widget,aidl进程间通讯等,本项目所实现的功能如下:
①手机防盗:
根据预设参数,判断手机是否被盗,根据自定义协议发送手机中SIM卡的信息和手机的位置信息给安全号码。
可远程通过短信指令,给手机设置锁屏密码,远程锁定手机屏幕,远程格式化手机SD卡,恢复出厂设置,极大的保护用户的隐私安全,通过aidl注册admin设备,一般用户无法卸载该程序。
②通讯卫士:
来电号码归属地显示,来电归属地位置的调整,来电黑名单/短信黑名单管理。
电话短信备份和还原,保护手机的数据和通讯安全。
③软件管理:
系统软件和本地软件,可以显示软件的详细信息,启动、删除、分享应用程序。
程序锁可以指定要保护的程序,用户进入要保护的程序之前必须输入密码。
④进程管理:
显示当前系统运行的进程信息,显示系统内存信息,可以杀死某个进程,批量杀死进程,通过桌面widget实时展现用户当前的手机内存状态。
⑤手机杀毒:
从服务器下载最新的病毒库,根据程序的包名和程序的数字签名识别病毒,提示用户并查杀恶意软件,使吸费木马无处可藏。
⑥系统优化:
清理手机缓存,提高手机性能,优化电池管理。
⑦高级工具:
手机号码归属地查询,更改归属地位置,常用号码查询。
⑧设置中心:
可以对是否开启防盗、是否开启程序锁服务等功能进行设置,还可以更改来去电显示的风格。
和研究任何其它软件项目一样,我做的毕业设计也经历了从选题,调研,熟悉开发环境,实验关键技术,查找类似的相关系统的资料;系统概要设计,数据库结构设计,功能模块开发,功能模块测试,系统调试和系统试运行和修改。
如下1.2-1开发计划流程图:
图1.2-1开发计划流程图
2系统需求
2.1范围
本次开发的系统为手机安全卫士。
用于广大Android手机用户,包括手机防盗、通讯卫士、软件管理、进程管理、流量统计、手机杀毒、系统优化、高级工具、设置中心
2.2定义
MS
MobileSafe(手机安全卫士)的缩写。
2.3功能需求
1)进程管理:
显示当前系统运行的进程信息,显示系统内存信息,可以杀死某个进程,批量杀死进程,通过桌面widget实时展现用户当前的手机内存状态。
2)流量统计:
可以统计安卓手机的gprs上传流量、下载流量和总的使用流量。
并且可以统计每个应用的单独流量,本站之前也介绍过几套源码,都有这个功能,例如Android应用源码急速多功能手机助手项目、Android应用源码基于安卓的个人隐私监控项目、Android应用源码安卓手机安全卫士更新版、Android应用源码手机安全防火墙项目等项目都有流量统计功能。
3)手机杀毒:
从服务器下载最新的病毒库,根据程序的包名和程序的数字签名识别病毒,提示用户并查杀恶意软件,使吸费木马无处可藏。
3数据库设计
3.1数据流程图
1)病毒数据库的信息,包含的属性有ID、MD5数字签名、类型、名称。
描述手机里有病毒查杀的模块,其工作原理是扫描出应用程序的信息,查询到应用程序的签名和病毒数据库里面的存储的数字签名进行比对,如果相同,则说明是数据库,否则,不是,病毒数据库信息的E-R模型如图5.6所示。
图5.6病毒信息的E-R图
3.2数据字典分析
1)手机杀毒数据表
表1.1.手机杀毒数据表
Name
Declaredtype
Type
Size
Notnull
_id
varchar
(2)
integer
2
yes
md5
varchar(30)
varcher
30
yes
type
varchar
(2)
varcher
2
yes
name
varchar(30)
varcher
30
yes
desc
varchar(30)
varcher
30
yes
4设计说明
4.1系统概述
本次项目的设计就是要开发一个手机安全卫士的软件,它属于一个系统级别的软件,通过设置可以监听用户的电话及短信号码,判断是否是黑名单以便于进行拦截,还可以进行手机病毒的查杀、系统优化、软件管理、进程管理、程序锁等功能。
本项目致力于设计一个松耦合的功能,降低模块之间的联系,以便后期的维护与再设计。
系统设计的原则如下所示。
①模块化
模块化设计不仅减低了模块之间的耦合性,使得系统容易修改,而且推动了系统各个部分的并行开发,从而提高了软件的设计效率。
②模块独立性
模块独立性是指软件系统中每个模块只涉及软件要求的具体子功能,而和软件系统中其他模块的功能是无关的。
模块独立的概念是模块化、抽象、信息隐藏和局部化概念的直接结构。
4.2数据库实施
数据库实施是指根据逻辑设计和物理设计的结果,在计算机上建立起实际的数据库结构、装入数据、进行测试和试运行的过程。
数据库的实施主要包括:
建立实际数据库结构、装入数据、应用程序编码与调试、数据库试运行和整理文档。
1)通过执行代码控制数据库的增、删、改、查,具体添加数据并查询出结果,对于手机杀毒的数据库的测试结果如图5.8所示。
图5.8手机杀毒的病毒数据库
2)常用号码的数据库测试结果如图5.9所示。
图5.9常用号码数据库
数据库的试运行,通过代码的方式往数据库中装入数据,并读取出来显示到界面上,观察显示的数据和装入到数据库中的数据是否一致,来测试数据库是否能完美运行。
测试结果是在数据库方面没有大的问题,能够进行正常的增、删、改、查,这样数据库设计也算是告一段落了。
5模块一:
进程管理模块
5.1进程管理器--代码实现
1)首先需要一个结构保存进程信息
publicclassProcessInfo{
//应用程序包名
privateStringpackname;
//应用程序图标
privateDrawableicon;
//应用程序所占用的内存空间,单位是byte
privatelongmemsize;
//是否属于用户进程
privatebooleanuserprocess;
//进程的pid(进程的标记)
privateintpid;
//应哟个程序名称
privateStringappname;
//应用程序在Item中是否处于被选中状态(默认下没有被选中)
······
}
2)然后一个获取进程列表的类,用于获取当前正在运行的进程列表:
publicclassProcessInfoProvider{
privatestaticfinalStringTAG="ProcessInfoProvider";
privateContextcontext;
publicProcessInfoProvider(Contextcontext){
this.context=context;
}
/**
*返回所有的正在运行的程序信息
*@return
*/
publicListgetProcessInfos(){
//am可以动态的获取应用的进程信息,相当于PC机上的进程管理器
ActivityManageram=(ActivityManager)context.getSystemService(Context.ACTIVITY_SERVICE);
//pm可以静态的获取到手机中的所有应用程序信息,相当于PC机上的程序管理器
PackageManagerpm=context.getPackageManager();
//返回所有正在运行的进程
ListruningappsInfos=am.getRunningAppProcesses();
//用于存放进程信息
ListprocessInfos=newArrayList();
//遍历出每个进程,并将每个进程的信息封装在ProcessInfo对象中,最后将所有的进程存放在List中返回
for(ActivityManager.RunningAppProcessInfoinfo:
runingappsInfos){
//用于封装进程信息
ProcessInfoprocessInfo=newProcessInfo();
//获取进程的pid(进程的标记)
intpid=info.pid;
//将进程的pid、processName、memsize封装到ProcessInfo对象中
processInfo.setPid(pid);
Stringpackname=info.processName;
processInfo.setPackname(packname);
//获取到该进程对应的应用程序所占用的内存空间
longmemsize=am.getProcessMemoryInfo(newint[]{pid})[0].getTotalPrivateDirty()*1024;
processInfo.setMemsize(memsize);
try{
//通过进程的packname来获取到该进程对应的应用程序对象(获取到应用程序的对象后,就可以通过该对象获取应用程序信息)
ApplicationInfoapplicationInfo=pm.getApplicationInfo(packname,0);
//判断该应用程序是否是第三方应用程序,便于以后分类
if(filterApp(applicationInfo)){
processInfo.setUserprocess(true);
}else{
processInfo.setUserprocess(false);
}
//分别获取到应用程序的图标和名称,并将其封装到ProcessInfo对象中
processInfo.setIcon(applicationInfo.loadIcon(pm));
processInfo.setAppname(applicationInfo.loadLabel(pm).toString());
}catch(Exceptione){
//这里会抛出一个包名未找到异常,我们将其设置为系统进程,应用图标为默认的系统图标
e.printStackTrace();
processInfo.setUserprocess(false);
processInfo.setIcon(context.getResources().getDrawable(R.drawable.ic_launcher));
processInfo.setAppname(packname);
}
processInfos.add(processInfo);
processInfo=null;
}
returnprocessInfos;
}
/**
*三方应用的过滤器,如
*
*@paraminfo
*@returntrue三方应用false系统应用
*/
publicbooleanfilterApp(ApplicationInfoinfo){
if((info.flags&ApplicationInfo.FLAG_UPDATED_SYSTEM_APP)!
=0){
returntrue;
}elseif((info.flags&ApplicationInfo.FLAG_SYSTEM)==0){
returntrue;
}
returnfalse;
}
}
3)首先为用户进程和系统进程对应的ListView设置适配数据:
privateclassUserAdapterextendsBaseAdapter{
publicintgetCount(){
returnuserProcessInfos.size();
}
publicObjectgetItem(intposition){
returnuserProcessInfos.get(position);
}
publiclonggetItemId(intposition){
returnposition;
}
publicViewgetView(intposition,ViewconvertView,ViewGroupparent){
Viewview;
//使用堆内存中的唯一的一份字节码(ListView的优化)
ViewHolderholder=newViewHolder();
//复用缓存(ListView的优化)
if(convertView==null){
·······
}else{
//使用缓存的view
view=convertView;
//获取到缓存的view的标记
holder=(ViewHolder)view.getTag();
}
//从用户进程对应的集合中取出对应的元素做数据的适配
ProcessInfoinfo=userProcessInfos.get(position);
//如果应用程序是我们自己的手机卫士,隐藏掉Checkbox(避免杀死自己)
if(info.getPackname().equals(getPackageName())){
holder.cb.setVisibility(View.INVISIBLE);
}else{
holder.cb.setVisibility(View.VISIBLE);
}
//为Item适配数据:
应用图标、名称、占用内存大小、是否处于选中状态(默认情况下都是未选中状态)
holder.iv_icon.setImageDrawable(info.getIcon());
holder.tv_name.setText(info.getAppname());
holder.tv_mem.setText(Formatter.formatFileSize(getApplicationContext(),info.getMemsize()));
holder.cb.setChecked(info.isChecked());
//返回Item对应的view
returnview;
}
}
//使用static修饰,可以保证该对象在堆内存中只存在一份字节码文件(所有的Item共用该字节码文件)
staticclassViewHolder{
ImageViewiv_icon;
TextViewtv_name;
TextViewtv_mem;
CheckBoxcb;
}
//为系统进程对应的ListView适配数据
privateclassSystemAdapterextendsBaseAdapter{
······
}
4)在onCreate里初始化控件并获取进程列表,分别设置给两个listview:
publicvoidonCreate(BundlesavedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.taskmanager_layout);
//默认情况下,显示的是用户进程列表
showUserApp=true;
provider=newProcessInfoProvider(this);
userProcessInfos=newArrayList();
systemProcessInfos=newArrayList();
//通过provider来获取手机中的所有进程
ListmRunningProcessInfos=provider.getProcessInfos();
//将获取到的所有进程进行分类存储(用户进程和系统进程)
for(ProcessInfoinfo:
mRunningProcessInfos){
if(info.isUserprocess()){
userProcessInfos.add(info);
}else{
systemProcessInfos.add(info);
}
}
//用户进程对应的ListView及设置ListView的点击事件
lv1=(ListView)findViewById(R.id.lv_usertask);
lv1.setOnItemClickListener(newAdapterView.OnItemClickListener(){
publicvoidonItemClick(AdapterView
>parent,Viewview,intposition,longid){
CheckBoxcb=(CheckBox)view.findViewById(R.id.cb_taskmanager);
//获取到被点击的Item对象
ProcessInfoinfo=(ProcessInfo)lv1.getItemAtPosition(position);
//判断被点击的Item是否是我们自己的手机安全卫士条目(我们不允许杀死自己的应用程序)
if(info.getPackname().equals(getPackageName())){
return;
}
//手动的设置Checkbox的状态
if(info.isChecked()){
info.setChecked(false);
cb.setChecked(false);
}else{
info.setChecked(true);
cb.setChecked(true);
}
}
});
//系统进程对应的ListView及设置ListView的点击事件