Android编程之杀毒的实现原理及具体实例
电脑病毒看不见,却无处不在,有时防护措施不够或者不当操作都会导致病毒入侵。这篇文章主要介绍了Android编程之杀毒的实现原理及具体实例,结合实例形式分析了Android杀毒功能的原理与简单实现技巧,需要的朋友可以参考下
具体如下:
一个杀毒软甲最核心的部分一个是病毒库一个是杀毒引擎,病毒库从服务器中获得,杀毒引擎实际上是判断程序中的包名和签名是否匹配病毒库中的包名和签名,如果匹配则为病毒,界面使用帧动画来显示。
思路:
1.从服务器端把病毒的版本库信息下载下来将解析的数据存放到List集合中
2.获取到手机中所有应用程序的包名以及程序的签名
3.将病毒库匹配手机应用程序包名及签名
4.用ScrollView标签进行自动滚动显示
关键代码如下:
特洛伊木马病毒库的信息:
tory.virus
cn.itcast.virus
恶意软件,读取用户日志
3082020730820170a00302010202044ea7598f300d06092a864886f70d010105050030483
10a30080603550406130131310a30080603550408130131310a3008060355040713013131
0a3008060355040a130131310a3008060355040b130131310a30080603550403130131301
e170d3131313032363030353132375a170d3231313032333030353132375a3048310a3008
0603550406130131310a30080603550408130131310a30080603550407130131310a30080
60355040a130131310a3008060355040b130131310a3008060355040313013130819f300d
06092a864886f70d010101050003818d0030818902818100d915d7a98cde8bcd69b87ec52
11012ace847de42129a71bf679a059c2c55e893bc0ea886874432ab8b9097724211df6769
eacd3381ccac779ab7422d8101320b1e0b14e06ac8ee095b20e52cbe6163e10a87dc410b8
a91fb73d53c5bdb4a22d1295c61e04b8f8b68c475e69c1754a1dc35745e7c6ae0275c2620
b863b0d9ea8f0203010001300d06092a864886f70d01010505000381810038e1119fbb710
4180fddba4bc8b2c275df63f0df418b7480d8eba2891da20d34d3d083cfed7bb3eb546863
c76bc67cc93f2fa0e9377c470881c9a763c99cc035093184bb50f76e74155592eca3566a3
10af55e5fec19d6fdc1a74f226aef485f84389126e8e3f4b59fe2797cbfcac660b9f2cc81
e6f3dcaa7cb2001ecc496a7b
杀毒引擎:
/*
* 杀毒引擎(下载病毒库、获取程序的包名及签名并进行匹配)
* (non-Javadoc)
* @see android.app.Activity#onTouchEvent(android.view.MotionEvent)
*/
@Override
public boolean onTouchEvent(MotionEvent event) {
packagenames = new ArrayList();
virusResult = new ArrayList();
infos = new ArrayList();
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("\n");
Message msg = new Message();
msg.what = SCANNING;
msg.obj = sb;
handler.sendMessage(msg);
//检查当前的packname 和对应签名 是不是跟病毒库里面的信息一样
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("发现病毒 \n");
for(String packname : virusResult){
sb1.append("病毒名"+ packname);
sb1.append("\n");
}
}
tv_killvirus_info.setText(sb1.toString());
animationDrawable.stop();
break;
}
}
};
获取到程序的签名:
/*
* 获取程序的签名
*/
public String getAppSignature(String packname){
try {
PackageInfo packinfo =pm.getPackageInfo(packname, PackageManager.GET_SIGNATURES);
//获取到所有的权限
return packinfo.signatures[0].toCharsString();
} catch (NameNotFoundException e) {
e.printStackTrace();
return null;
}
}
显示扫描的文件页面并自动滚动:
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/iv_killvirus_am"
android:id="@+id/sv_killvirus"
>
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/tv_killvirus_info"
>
希望本文所述对大家Android程序设计有所帮助。
相关阅读:2018网络安全事件:
一、英特尔处理器曝“Meltdown”和“Spectre漏洞”
2018年1月,英特尔处理器中曝“Meltdown”(熔断)和“Spectre” (幽灵)两大新型漏洞,包括AMD、ARM、英特尔系统和处理器在内,几乎近20年发售的所有设备都受到影响,受影响的设备包括手机、电脑、服务器以及云计算产品。这些漏洞允许恶意程序从其它程序的内存空间中窃取信息,这意味着包括密码、帐户信息、加密密钥乃至其它一切在理论上可存储于内存中的信息均可能因此外泄。
二、GitHub 遭遇大规模 Memcached DDoS 攻击
2018年2月,知名代码托管网站 GitHub 遭遇史上大规模 Memcached DDoS 攻击,流量峰值高达1.35 Tbps。然而,事情才过去五天,DDoS攻击再次刷新纪录,美国一家服务提供商遭遇DDoS 攻击的峰值创新高,达到1.7 Tbps!攻击者利用暴露在网上的 Memcached 服务器进行攻击。网络安全公司 Cloudflare 的研究人员发现,截止2018年2月底,中国有2.5万 Memcached 服务器暴露在网上 。
三、苹果 iOS iBoot源码泄露
2018年2月,开源代码分享网站 GitHub(软件项目托管平台)上有人共享了 iPhone 操作系统的核心组件源码,泄露的代码属于 iOS 安全系统的重要组成部分——iBoot。iBoot 相当于是 Windows 电脑的 BIOS 系统。此次 iBoot 源码泄露可能让数以亿计的 iOS 设备面临安全威胁。iOS 与 MacOS 系统开发者 Jonathan Levin 表示,这是 iOS 历史上最严重的一次泄漏事件。
四、韩国平昌冬季奥运会遭遇黑客攻击
2018年2月,韩国平昌冬季奥运会开幕式当天遭遇黑客攻击,此次攻击造成网络中断,广播系统(观众不能正常观看直播)和奥运会官网均无法正常运作,许多观众无法打印开幕式门票,最终未能正常入场。
五、加密货币采矿软件攻击致欧洲废水处理设施瘫痪
2018年2月中旬,工业网络安全企业 Radiflow 公司表示,发现四台接入欧洲废水处理设施运营技术网络的服务器遭遇加密货币采矿恶意软件的入侵。该恶意软件直接拖垮了废水处理设备中的 HMI 服务器 CPU,致欧洲废水处理服务器瘫痪 。
Radiflow 公司称,此次事故是加密货币恶意软件首次对关键基础设施运营商的运营技术网络展开攻击。由于受感染的服务器为人机交互(简称HMI)设备,之所以导致废水处理系统瘫痪,是因为这种恶意软件会严重降低 HMI 的运行速度。
编程杀毒相关文章: