易网时代-编程资源站
Welcome
微信登录
首页
/
操作系统
/
Linux
/
Android杀毒实现原理及实例
一个杀毒软甲最核心的部分一个是病毒库一个是杀毒引擎,病毒库从服务器中获得,杀毒引擎实际上是判断程序中的包名和签名是否匹配病毒库中的包名和签名,如果匹配则为病毒,界面使用帧动画来显示。思路:1.从服务器端把病毒的版本库信息下载下来将解析的数据存放到List集合中2.获取到手机中所有应用程序的包名以及程序的签名3.将病毒库匹配手机应用程序包名及签名4.用ScrollView标签进行自动滚动显示关键代码如下:
特洛伊木马病毒库的信息:
<?xml
version
=
"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)
* @see Android.app.Activity#onTouchEvent(android.view.MotionEvent)
*/
@Override
public
boolean
onTouchEvent(MotionEvent event) {
packagenames =
new
ArrayList<String>();
virusResult =
new
ArrayList<String>();
infos =
new
ArrayList<ApplicationInfo>();
animationDrawable.start();
//播放扫描病毒的动画
new
Thread(){
@Override
public
void
run() {
try
{
URL url =
new
URL(
"http://192.168.1.168:8080/virus.xml"
);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
InputStream is = conn.getInputStream();
//从服务器解析病毒库并获取到病毒库的集合
virusbeans = VirusInfo.getVirusInfos(is);
TaskInfo taskInfo =
new
TaskInfo(KillVirusActivity.
this
);
//实例化包资源管理器
//获取到当前手机里面所有的包名
infos = pm.getInstalledApplications(
0
);
for
(ApplicationInfo info : infos ){
packagenames.add(info.packageName);
}
int
count=
0
;
// 杀毒引擎 根据病毒库 比对当前系统里面的程序包名 签名进行 杀毒
StringBuilder sb =
new
StringBuilder();
for
(String packname : packagenames){
sb.append(
"正在扫描 "
+ packname);
sb.append(
" "
);
Message msg =
new
Message();
msg.what = SCANNING;
msg.obj = sb;
handler.sendMessage(msg);
//检查当前的packname 和对应签名 http://www.linuxidc.com是不是跟病毒库里面的信息一样
for
(VirusBean virusbean : virusbeans){
if
(packname.equals(virusbean.getPackname())&&
taskInfo.getAppSignature(packname).equals(virusbean.getSignature()))
{
virusResult.add(packname);
//添加一个病毒
}
}
count ++;
//记录病毒的总数
}
Message msg =
new
Message();
msg.what = SCANNING_FINISH;
msg.obj = count;
handler.sendMessage(msg);
}
catch
(Exception e) {
e.printStackTrace();
}
}
}.start();
return
super
.onTouchEvent(event);
}
显示病毒扫描信息:
Handler handler =
new
Handler(){
@Override
public
void
handleMessage(Message msg) {
super
.handleMessage(msg);
switch
(msg.what) {
case
SCANNING:
StringBuilder sb = (StringBuilder) msg.obj;
tv_killvirus_info.setText(sb.toString());
sv.scrollBy(
0
,
25
);
//每次增加都会自动向下移动画面
break
;
case
SCANNING_FINISH:
int
i = (Integer) msg.obj;
StringBuilder sb1 =
new
StringBuilder();
sb1.append(
"扫描完毕 共扫描 "
+ i+
" 个程序"
);
if
(virusResult.size()>
0
){
sb1.append(
"发现病毒 "
);
for
(String packname : virusResult){
sb1.append(
"病毒名"
+ packname);
sb1.append(
" "
);
}
}
tv_killvirus_info.setText(sb1.toString());
animationDrawable.stop();
break
;
}
}
};
版权所有©石家庄振强科技有限公司2024
冀ICP备08103738号-5
网站地图