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("\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;
			}
	}

 

显示扫描的文件页面并自动滚动:

<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>

 


 
  • 7
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 16
    评论
1.整体项目采用MVC框架,是对android知识点的综合应用,用到的技术有 (activity,service,broadcast,content provider,Notification , 数据库,自定义title,自定义控件,自定义toast,widget,aidl进程间通讯, javascript和java的互相调用等) 2.介绍了listview和gridview等控件的优化技巧,提升软件的效率 3.穿插介绍了企业开发中的bug管理,mantis的使用,自动化测试robotium的使用 ,log管理. 软件的打包,混淆,反编译和三方广告的加入等技巧。 该项目主要涵盖以下几大功能: 手机防盗: 根据预设参数, 判断手机是否被盗,根据自定义协议发送手机中sim卡的信息和手机的位置信息给安全号码. 可以自定义特殊号码,拨号快速进入手机防盗功能,可远程通过短信指令,给手机设置锁屏密码, 远程锁定手机屏幕, 远程格式化手机sd卡,恢复出厂设置,极大的保护用户的隐私安全,通过aidl注册admin设备,一般用户无法卸载该程序。 通讯卫士: 来电号码归属地显示,来电归属地位置的调整,来电黑名单/短信黑名单管理. 电话短信备份和还原. 保护手机的数据和通讯安全。 软件管理: 系统软件和本地软件,可以显示软件的详细信息,启动,删除应用程序.连接获取服务器上软件的评分信息等功能。程序锁可以指定要保护的程序, 用户进入要保护的程序之前必须输入密码。 任务管理: 显示当前系统运行的进程信息 显示系统内存信息, 可以杀死某个进程,批量杀死进程,通过桌面widget 实时展现用户当前的手机内存状态。 上网管理: 显示出每个程序wifi和3g/2g 访问的上传和下载的流量,帮助用户了解程序产生的流量信息. 漫游管理. 当检查到手机处于漫游状态时会提示用户。 手机杀毒:从服务器下载最新的病毒库, 根据程序的包名和程序的数字签名识别病毒,提示用户并查杀. 恶意软件,吸费木马无处可藏。 系统优化: 清理手机缓存,提高手机性能,优化电池管理 高级工具: 自动ip拨号,手机号码归属地查询,更改归属地位置,常用号码查询。 安全专题: 1、通过0权限上传下载数据,重启手机等案例,深入讲解android沙箱,安全机制和权限模型。 2、通过分析恶意代码的提权漏洞,讲解如何维护系统的安全。 3、通过linux键盘驱动案例的讲解,分析盗号木马的原理及其实现方式。 4、恶意软件发展速度的确一日千里,安全软件也要与时俱进,世面上的手机病毒已经具有了可以杀掉安全软件的功能, 通过多进程互相守护案例,讲述如何实现安全软件的自我保护。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 16
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

傅荣康

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值