Android编程之杀毒的实现原理及具体实例
本文实例讲述了Android杀毒的实现原理。分享给大家供大家参考,具体如下:
一个杀毒软甲最核心的部分一个是病毒库一个是杀毒引擎,病毒库从服务器中获得,杀毒引擎实际上是判断程序中的包名和签名是否匹配病毒库中的包名和签名,如果匹配则为病毒,界面使用帧动画来显示。
思路:
1.从服务器端把病毒的版本库信息下载下来将解析的数据存放到List集合中
2.获取到手机中所有应用程序的包名以及程序的签名
3.将病毒库匹配手机应用程序包名及签名
4.用ScrollView标签进行自动滚动显示
关键代码如下:
特洛伊木马病毒库的信息:
<?xmlversion="1.0"encoding="utf-8"?> <list> <virus> <name>tory.virus</name> <packname> cn.itcast.virus </packname> <description> 恶意软件,读取用户日志</description> <signature> 3082020730820170a00302010202044ea7598f300d06092a864886f70d010105050030483 10a30080603550406130131310a30080603550408130131310a3008060355040713013131 0a3008060355040a130131310a3008060355040b130131310a30080603550403130131301 e170d3131313032363030353132375a170d3231313032333030353132375a3048310a3008 0603550406130131310a30080603550408130131310a30080603550407130131310a30080 60355040a130131310a3008060355040b130131310a3008060355040313013130819f300d 06092a864886f70d010101050003818d0030818902818100d915d7a98cde8bcd69b87ec52 11012ace847de42129a71bf679a059c2c55e893bc0ea886874432ab8b9097724211df6769 eacd3381ccac779ab7422d8101320b1e0b14e06ac8ee095b20e52cbe6163e10a87dc410b8 a91fb73d53c5bdb4a22d1295c61e04b8f8b68c475e69c1754a1dc35745e7c6ae0275c2620 b863b0d9ea8f0203010001300d06092a864886f70d01010505000381810038e1119fbb710 4180fddba4bc8b2c275df63f0df418b7480d8eba2891da20d34d3d083cfed7bb3eb546863 c76bc67cc93f2fa0e9377c470881c9a763c99cc035093184bb50f76e74155592eca3566a3 10af55e5fec19d6fdc1a74f226aef485f84389126e8e3f4b59fe2797cbfcac660b9f2cc81 e6f3dcaa7cb2001ecc496a7b </signature> </virus> </list>
杀毒引擎:
/*
*杀毒引擎(下载病毒库、获取程序的包名及签名并进行匹配)
*(non-Javadoc)
*@seeandroid.app.Activity#onTouchEvent(android.view.MotionEvent)
*/
@Override
publicbooleanonTouchEvent(MotionEventevent){
packagenames=newArrayList<String>();
virusResult=newArrayList<String>();
infos=newArrayList<ApplicationInfo>();
animationDrawable.start();//播放扫描病毒的动画
newThread(){
@Override
publicvoidrun(){
try{
URLurl=newURL("http://192.168.1.168:8080/virus.xml");
HttpURLConnectionconn=(HttpURLConnection)url.openConnection();
InputStreamis=conn.getInputStream();
//从服务器解析病毒库并获取到病毒库的集合
virusbeans=VirusInfo.getVirusInfos(is);
TaskInfotaskInfo=newTaskInfo(KillVirusActivity.this);//实例化包资源管理器
//获取到当前手机里面所有的包名
infos=pm.getInstalledApplications(0);
for(ApplicationInfoinfo:infos){
packagenames.add(info.packageName);
}
intcount=0;
//杀毒引擎根据病毒库比对当前系统里面的程序包名签名进行杀毒
StringBuildersb=newStringBuilder();
for(Stringpackname:packagenames){
sb.append("正在扫描"+packname);
sb.append("\n");
Messagemsg=newMessage();
msg.what=SCANNING;
msg.obj=sb;
handler.sendMessage(msg);
//检查当前的packname和对应签名是不是跟病毒库里面的信息一样
for(VirusBeanvirusbean:virusbeans){
if(packname.equals(virusbean.getPackname())&&
taskInfo.getAppSignature(packname).equals(virusbean.getSignature()))
{
virusResult.add(packname);//添加一个病毒
}
}
count++;//记录病毒的总数
}
Messagemsg=newMessage();
msg.what=SCANNING_FINISH;
msg.obj=count;
handler.sendMessage(msg);
}catch(Exceptione){
e.printStackTrace();
}
}
}.start();
returnsuper.onTouchEvent(event);
}
显示病毒扫描信息:
Handlerhandler=newHandler(){
@Override
publicvoidhandleMessage(Messagemsg){
super.handleMessage(msg);
switch(msg.what){
caseSCANNING:
StringBuildersb=(StringBuilder)msg.obj;
tv_killvirus_info.setText(sb.toString());
sv.scrollBy(0,25);//每次增加都会自动向下移动画面
break;
caseSCANNING_FINISH:
inti=(Integer)msg.obj;
StringBuildersb1=newStringBuilder();
sb1.append("扫描完毕共扫描"+i+"个程序");
if(virusResult.size()>0){
sb1.append("发现病毒\n");
for(Stringpackname:virusResult){
sb1.append("病毒名"+packname);
sb1.append("\n");
}
}
tv_killvirus_info.setText(sb1.toString());
animationDrawable.stop();
break;
}
}
};
获取到程序的签名:
/*
*获取程序的签名
*/
publicStringgetAppSignature(Stringpackname){
try{
PackageInfopackinfo=pm.getPackageInfo(packname,PackageManager.GET_SIGNATURES);
//获取到所有的权限
returnpackinfo.signatures[0].toCharsString();
}catch(NameNotFoundExceptione){
e.printStackTrace();
returnnull;
}
}
显示扫描的文件页面并自动滚动:
<ScrollView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@id/iv_killvirus_am" android:id="@+id/sv_killvirus" > <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/tv_killvirus_info" ></TextView> </ScrollView>
希望本文所述对大家Android程序设计有所帮助。