基于Android手机软件信用度测评系统

  • 格式:doc
  • 大小:25.00 KB
  • 文档页数:5

基于Android的手机软件信用度测评系统
摘要:随着android的流行,针对android平台的恶意攻击也日益增加。

本文研究了android手机面临的威胁,并针对一款基于android平台应对此威胁的手机信用度测评软件进行深入研究,详细论述了其各项功能的实现。

关键词:android安全性;信用度测评
中图分类号:tp311文献标识码:a文章编号:1007-9599 (2013) 06-0000-02
近来,智能手机在人们日常生活中扮演着不可或缺的角色,作为占有中国智能手机80%市场的android系统,凭借其开放、自由的特点赢得了广大厂商、开发人员及用户们的青睐。

然而其面临的威胁也是所有智能手机系统中最大的。

不同于ios系统或windows phone,android的内核是完全开源的,因为它的开放性,导致其成为众多恶意软件攻击的目标。

尽管android的安全机制经过精密的设计,但这并不意味着android就足够的安全。

目前市面上流行着各种木马病毒对android系统进行多方面的攻击,会造成用户手机内核系统的瘫痪、个人私密信息的泄露、流量的流失以及话费的消耗等。

android正面临着严峻的挑战!
为保证广大android手机用户个人信息和钱财不被犯罪分子窃取,一款基于android平台的信用度测评系统软件便孕育而生,它集合自动体检、恶意拦截、系统清理、流量监控、信用度测评等五
大功能于一身,全方位捍卫手机的安全。

1功能与实现
1.1系统清理功能与体检功能
系统清理模块实现四个功能:进程清理、缓存清理、开机加速和系统垃圾清理,功能的实现重点在于获取已安装应用程序的信息与android正在运行的进程。

(1)进程清理
1)在android中,activitymanager为与系统中所有运行的activity的交互提供了接口,通过它可以获取系统内存以及进程信息。

2)activitymanager将系统进程与用户进程加以区分。

android 中每个进程都有一个uid,其中10000以下是系统进程的uid,用户进程的uid是从10000开始分配的。

因此,在关闭进程时,只扫描出用户进程的uid(10000以上)清除即可。

通过packagemanager 类获取进程uid的方法:packagemanagerpm=getpackagemanager();applicationinfoai=pm.getapplicationinfo(“com.mytest”,packagemanager.get_activities);
log.d(“!!”,”!!”+ai.uid);
3)除此之外,还需通过packagemanger管理类获取应用程序的packagename,label,icon等信息,将应用程序以列表的形式展现出来。

使用getpackagemanager()方法获得已安装应用程序信息。

4)最后,使用
android.os.process.killprocess(android.os.process.mypid())方法关闭进程。

(2)缓存、开机启动项、系统垃圾清理
缓存清理、开机启动项获取和系统垃圾扫描都是要通过获取应用程序的信息来进行,包括:应用程序大小、使用数据大小、cache 大小等。

android中关于安装包的大小信息封装在packagestats类中,通过获取安装包所对应的packagestats对象,就可以获得信息了。

具体步骤如下:
第一步:通过放射机制调用getpackagesizeinfo(),方法原型为:publicabstractvoidgetpackagesizeinfo(stringpackagename,ipackagestatsobserverobserver);{}
第二步:由于需要获得系统级的服务或类,必须加入android系统形成的aidl文件,共两个:ipackagestatsobserver.aidl和packagestats.aidl文件,将其放置在android.pm.content包路径下。

第三步:创建一个类继承至ipackagestatsobserver.stub(桩),它本质上实现了binder机制。

当把该类的一个实例通过getpackagesizeinfo()调用时,并该函数继而启动了启动中间流程去获取相关包得信息大小,当扫描完成后,将查询信息回调至该类的ongetstatscompleted(inpackagestatspstats,booleansucceeded)方法,信息大小封装在此实例上。

第四步:最后通过获取pstats的属性,获得它们的属性值,通
过调用系统函数formatter.formatefilesize(longsize)转换为对应的以kb/mb为计量单位的字符串。

体检功能与系统功能涉及到的技术与实现方法基本相同,这里不再赘述。

1.2恶意拦截功能
该模块有三个功能:拦截含有特定关键词的短信、拦截骚扰电话和进行黑白名单设置。

拦截原理的基本流程如图1:
图1拦截功能设计原理图
(1)拦截来电的实现原理
1)通过telephonymanager的getitelephony方法获取itelephony接口的实例(该接口的endcall()方法可以实现挂机),由于1.5版本以后该方法转为私有,所以要同时利用到android的aidl机制和java的反射机制来获取itelephony实例对象。

2)按照itelephony所在的包名
(com.android.internal.telephony)以及所拥有的方法,定义一个aidl文件(itelephony.aidl),利用aidl生成工具,生成同名java文件(在eclipse中,会自动生成,并保存到gen文件的同名包名下)。

接下来,通过java反射机制,获得itelephony实例对象,把本来私有的方法变为公开方法。

3)重新实现phonestatelistener类。

phonestatelistener类可以监听来电手机状态变化,重写oncallstatechanged方法,这是一个回调方法,当电话通话状态发生改变时会被调用,将来电号码
传入,直接获取这个号码。

判断该号码是否符合拦截条件,符合则使用itelephony接口的endcall()方法实现挂机。

(2)过滤短信的实现原理
短信过滤需监听系统信息数据库的变化,当有新的信息添加时,首先获取该信息的地址(号码),然后根据当前关键字和黑白名单进行判断,如果符合过滤条件,则将短信添加到拦截列表中,删除原有手机信息数据库中信息。

通过contentobserver类来监听数据库增删改查等变化,可以完成上述功能。

其步骤如下:(1)在使用前,先指明待监听数据源的uri为(content://sms/)。

(2)使用context提供的registercontentobserver(uriuri,booleannotifyfordescendents,contentobserverobserver)方法,注册指定数据源的contentobserver。

(3)重写contentobserver 类的onchange(booleanselfchange)方法。