Android----病毒查杀原理及应用

         今天看到一篇帖子,是关于病毒查杀的问题,那片帖子写的很详细,将原理都讲述出来了,后来根据帖子的代码自己实例验证了一下,发现是可行的,所以,现在就记录一下学习的过程。(此文有借鉴的地方,关键是大家能学到技术

          杀毒原理:首先给大家看一副图片(借鉴):

原理简介:
 
   首先,我们需要部署大量的“蜜罐”服务器,也就是没有安装杀毒软件、防火墙等的赤裸裸的手机或服务器,让
 
病毒很轻易的入侵。然后,由病毒工程师来对它们进行分析,提取特有的特征码,加入到特征码服务器里面,以供手
 
机安全卫士调用。当有新的病毒的时候, 它们会被及时的下载到手机安全卫士里面,以供比对查杀。当进行云查杀的
 
时候,手机安全卫士提取本地所有应用的特征码,发送到云服务器进行比对,然后将比对结果返回给手机安全卫士,
 
告诉手机用户查杀结果,比如:哪些软件是病毒,哪些游戏会窃取话费,哪些壁纸具有高危风险等。

 

特征码:

      在手机系统中,每个应用都有它特有的特征信息,这些信息在每个应用中都不相同。对,这就是手机的特征码。

在Android系统中,每个软件所特有的信息都有啥呢?也许你已经想到了,对!包名,就是应用程序的包名。Android

中,同一个包名的程序,只允许安装一个。

    还有什么不同呢?每个程序的签名文件都不相同。因为每个开发者的签名文件都是特有的。病毒制造者只能用它

自己的签名文件来给病毒应用签名。

    当然啦,如果结合包名和签名,杀毒会更加的准确,效果会更好!

    此外,需要说明的是,基于特征码的杀毒方式,是在已知病毒特征码的情况下。如果在未知病毒特征码的情况下

进行杀毒,那就是通过监控高危的API权限的调用,进行主动防御啦!

 

程序举例:

    接下来,就是我们的程序了,还是那句话,程序虽然简单,举一反三是关键。
 
    <a.>当我们点击查询按钮的时候,对系统中所有的应用程序包,包括未安装的在内,进行包名的检查,并且与特
 
定的 特征 码进行比对,如果比对成功,则是病毒,否则,就是安全的。
 
    <b.>在代码中,我们首先创建了一个包管理器,然后通过包管理器获得所有应用程序包的所有信息;然后,通过
 
循环方法,将每个应用包的包名取出来,并且与特定的特征码进行比对,如果比对成功,则对病毒数加1。以此类
 
推,直到将所有的包的包名比对完毕;然后,发布一条信息,提示我们杀毒的结果。

 

    <c.>当我们将信息发送出去后,就需要通过Handler对发送的信息进行分析和显示。

 

<以上都是整理高人奕奕微笑 的博客弄出来的,主要是理论的东西,理论咱不太好弄,只学习技术>

 

布局文件:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal" >

        <Button
            android:id="@+id/button1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginLeft="20dp"
            android:text="@string/button1" 
            android:onClick="shadu"/>

        <Button
            android:id="@+id/button2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginLeft="180dp"
            android:text="@string/button2" />
    </LinearLayout>

    <ScrollView
        android:id="@+id/scrollView1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:scrollbarFadeDuration="3000"
        android:background="@drawable/a" >

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:orientation="vertical" >
        </LinearLayout>
    </ScrollView>

    <LinearLayout
        android:id="@+id/myLinearlayout"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical" >

        <TextView
            android:id="@+id/text"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />
    </LinearLayout>

</LinearLayout>


MainActivity.java

  需要说明的是,这里规定的病毒包同时也是这个程序的包名。这样先易后难,理解方便一点。

public class MainActivity extends Activity {

	private String resultString;
	private int total = 0;
	private int STOP = 0;
	private LinearLayout myLinearLayout;
	private ScrollView myScrollView;
	private TextView myTextView;
	private Button button1,button2;
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		
		myLinearLayout = (LinearLayout) this.findViewById(R.id.myLinearlayout);
		myScrollView = (ScrollView) this.findViewById(R.id.scrollView1);
		myTextView = (TextView) this.findViewById(R.id.text);
		
		button1 = (Button) this.findViewById(R.id.button1);
		button1.setOnClickListener(new myonclickLister());
		
		button2 = (Button) this.findViewById(R.id.button2);
		button2.setOnClickListener(new myfinshLister());


	}
	
	//button1
class myonclickLister implements OnClickListener{

	@Override
	public void onClick(View v) {
		// TODO Auto-generated method stub
		// 创建包管理器的实例对象 
				PackageManager myPackageManager=getPackageManager();
				//获取所有应用的包的信息 
				List<PackageInfo> allinfos=myPackageManager.getInstalledPackages(PackageManager.GET_UNINSTALLED_PACKAGES|PackageManager.GET_SIGNATURES);
				//通过循环获取包名 
				for(PackageInfo everyinfo : allinfos){
				//	String resultString=everyinfo.packageName;
					resultString=everyinfo.packageName;
					//以包名为特征码进行比对
					if("com.example.android_yingyong".equals(resultString)){ 
						total=total+1;//病毒计数
						}
					//将查询到的包名发送出去
					Message msg=new Message(); 
					msg.obj=resultString; 
					myHandler.sendMessage(msg); 
					
					}
				//进行病毒数的判断,以决定发送何种信息 
				if(total==0){ 
					Message msg=new Message(); 
					msg.what = STOP; 
					msg.obj="共发现"+total+"个病毒!非常的安全!"; 
					myHandler.sendMessage(msg);   
					} else if(total>0){ 
						Message msg=new Message(); 
						msg.what=STOP; 
						msg.obj="共发现"+total+"个病毒!请注意及时查杀!\n"+resultString; 
						myHandler.sendMessage(msg); 
						} 
	}
	
}

	//button2
class myfinshLister implements OnClickListener{

		@Override
		public void onClick(View v) {
			// TODO Auto-generated method stub
			finish();
		}
	
}
	

	private Handler myHandler=new Handler(){ 
		public void handleMessage(Message msg){ 
			//收到杀毒完毕时的处理 
			if(msg.what==STOP){ 
				myLinearLayout.removeAllViews(); 
				} 
			//获取信息,添加到TextView控件上 
			String resultStr=(String) msg.obj; 
			myTextView.setTextColor(Color.BLUE); 
			myTextView.setText(resultStr); 
			//将TextView控件显示到线性布局上
			myLinearLayout.setOrientation(LinearLayout.VERTICAL);  
			myLinearLayout.addView(myTextView); 
			//滚动显示
			myScrollView.scrollBy(0, 20); 
			} 
		}; 

		
	}
		 
		

	


上图,自己测试的程序。不过有一个小缺陷,就是ScrollView这个空间没有显示出动态效果,由于对ScrollView不太

熟悉,所以,大家还是自己去研究吧,去网上一搜就可以了。



 


 

  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值