热门标签 | HotTags
当前位置:  开发笔记 > 运维 > 正文

Android编程之杀毒的实现原理及具体实例

这篇文章主要介绍了Android编程之杀毒的实现原理及具体实例,结合实例形式分析了Android杀毒功能的原理与简单实现技巧,需要的朋友可以参考下

本文实例讲述了Android杀毒的实现原理。分享给大家供大家参考,具体如下:

一个杀毒软甲最核心的部分一个是病毒库一个是杀毒引擎,病毒库从服务器中获得,杀毒引擎实际上是判断程序中的包名和签名是否匹配病毒库中的包名和签名,如果匹配则为病毒,界面使用帧动画来显示。

思路:

1.从服务器端把病毒的版本库信息下载下来将解析的数据存放到List集合中
2.获取到手机中所有应用程序的包名以及程序的签名
3.将病毒库匹配手机应用程序包名及签名
4.用ScrollView标签进行自动滚动显示

关键代码如下:

特洛伊木马病毒库的信息:

<&#63;xml version="1.0" encoding="utf-8"&#63;>


 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程序设计有所帮助。


推荐阅读
  • 本文介绍了使用kotlin实现动画效果的方法,包括上下移动、放大缩小、旋转等功能。通过代码示例演示了如何使用ObjectAnimator和AnimatorSet来实现动画效果,并提供了实现抖动效果的代码。同时还介绍了如何使用translationY和translationX来实现上下和左右移动的效果。最后还提供了一个anim_small.xml文件的代码示例,可以用来实现放大缩小的效果。 ... [详细]
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • 本文介绍了使用AJAX的POST请求实现数据修改功能的方法。通过ajax-post技术,可以实现在输入某个id后,通过ajax技术调用post.jsp修改具有该id记录的姓名的值。文章还提到了AJAX的概念和作用,以及使用async参数和open()方法的注意事项。同时强调了不推荐使用async=false的情况,并解释了JavaScript等待服务器响应的机制。 ... [详细]
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • 本文讨论了Alink回归预测的不完善问题,指出目前主要针对Python做案例,对其他语言支持不足。同时介绍了pom.xml文件的基本结构和使用方法,以及Maven的相关知识。最后,对Alink回归预测的未来发展提出了期待。 ... [详细]
  • 本文讲述了如何通过代码在Android中更改Recycler视图项的背景颜色。通过在onBindViewHolder方法中设置条件判断,可以实现根据条件改变背景颜色的效果。同时,还介绍了如何修改底部边框颜色以及提供了RecyclerView Fragment layout.xml和项目布局文件的示例代码。 ... [详细]
  • 在说Hibernate映射前,我们先来了解下对象关系映射ORM。ORM的实现思想就是将关系数据库中表的数据映射成对象,以对象的形式展现。这样开发人员就可以把对数据库的操作转化为对 ... [详细]
  • 本文介绍了在SpringBoot中集成thymeleaf前端模版的配置步骤,包括在application.properties配置文件中添加thymeleaf的配置信息,引入thymeleaf的jar包,以及创建PageController并添加index方法。 ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • Java验证码——kaptcha的使用配置及样式
    本文介绍了如何使用kaptcha库来实现Java验证码的配置和样式设置,包括pom.xml的依赖配置和web.xml中servlet的配置。 ... [详细]
  • Android系统移植与调试之如何修改Android设备状态条上音量加减键在横竖屏切换的时候的显示于隐藏
    本文介绍了如何修改Android设备状态条上音量加减键在横竖屏切换时的显示与隐藏。通过修改系统文件system_bar.xml实现了该功能,并分享了解决思路和经验。 ... [详细]
  • 本文介绍了Android 7的学习笔记总结,包括最新的移动架构视频、大厂安卓面试真题和项目实战源码讲义。同时还分享了开源的完整内容,并提醒读者在使用FileProvider适配时要注意不同模块的AndroidManfiest.xml中配置的xml文件名必须不同,否则会出现问题。 ... [详细]
  • Android开发实现的计时器功能示例
    本文分享了Android开发实现的计时器功能示例,包括效果图、布局和按钮的使用。通过使用Chronometer控件,可以实现计时器功能。该示例适用于Android平台,供开发者参考。 ... [详细]
  • 本文讨论了在Spring 3.1中,数据源未能自动连接到@Configuration类的错误原因,并提供了解决方法。作者发现了错误的原因,并在代码中手动定义了PersistenceAnnotationBeanPostProcessor。作者删除了该定义后,问题得到解决。此外,作者还指出了默认的PersistenceAnnotationBeanPostProcessor的注册方式,并提供了自定义该bean定义的方法。 ... [详细]
  • 本文介绍了Web学习历程记录中关于Tomcat的基本概念和配置。首先解释了Web静态Web资源和动态Web资源的概念,以及C/S架构和B/S架构的区别。然后介绍了常见的Web服务器,包括Weblogic、WebSphere和Tomcat。接着详细讲解了Tomcat的虚拟主机、web应用和虚拟路径映射的概念和配置过程。最后简要介绍了http协议的作用。本文内容详实,适合初学者了解Tomcat的基础知识。 ... [详细]
author-avatar
雄鹰访谈录
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有