Android 杀毒实例及基本原理

本篇文章来源于 Linux公社网站(www.linuxidc.com)  原文链接:http://www.linuxidc.com/Linux/2011-10/46257.htm
纯属起个抛砖引玉的作用,还望有过这方面研究的同学拍砖!

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

思路:
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 和对应签名 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("发现病毒 \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>

时间: 2024-10-07 07:25:24

Android 杀毒实例及基本原理的相关文章

Android杀毒实现原理及实例

一个杀毒软甲最核心的部分一个是病毒库一个是杀毒引擎,病毒库从服务器中获得,杀毒引擎实际上是判断程序中的包名和签名是否匹配病毒库中的包名和签名,如果匹配则为病毒,界面使用帧动画来显示. 思路: 1.从服务器端把病毒的版本库信息下载下来将解析的数据存放到List集合中 2.获取到手机中所有应用程序的包名以及程序的签名 3.将病毒库匹配手机应用程序包名及签名 4.用ScrollView标签进行自动滚动显示 关键代码如下: 特洛伊木马病毒库的信息: [html] view plaincopy <?xml

手机卫士10_widget_流量统计_手机杀毒

1._widget入门: 查看帮助文档>>Developrs>>API Guides>>App Widgets 实际上是一个迷你的应用程序VIew视图,嵌入在另外一个应用程序视图. 标准的android和兼容widget的手机才能显示,被修改过的系统是无法显示的. 实现步骤: ①创建类继承APPWidgetProvider//一个方便的帮助类,用来实现一个appwidget 它继承了广播接收者,实现原理也是通过广播实现的,特殊的广播接收者. ②在清单文件里配置广播接收者

手机杀毒进度条特效

public class MainActivity extends Activity { private ImageView iv_main_scan; private TextView tv_main_scan; private ProgressBar pb_main_scan; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setConten

精品软件 推荐 百度杀毒 软件

百度杀毒4.0融入了全新的慧眼引擎,简单来说,慧眼引擎是一款具备人工智能性质的深度学习型查杀引擎,是由百度杀毒和百度深度学习研究院共同开发,其在数十亿统计样本的基础上具备超大规模的训练集,训练样本置信率达到99.99%,远超采用传统引擎技术的同类产品水平. 下图为安装文件大小,178MB,看样子,病毒包也都加在这个安装包里了. 很好,很强大啊. 百度杀毒4.0的界面尺寸非常迷你,其实这在去年百度杀毒3.0推出后便开始率先采用,将视窗缩小,功能通过图形集中化展现,在一定程度上不仅给人视觉清新感,同

杀毒与免杀技术详解之二:特征码定位-工具及原理

特征码引擎现在依然十分常见,家家户户都在用. 打开360杀毒,下面显示的4个引擎中,"系统修复引擎.小红伞引擎"都是使用特征码进行病毒查杀的,其余的也有用特征码进行辅助.可见,现在的杀软中,特征码查杀的方法依然占有不小的位置. 但是,特征码引擎有非常大的缺陷--容易被逃避.因为一般它只要见着特征码就报毒,如果我们把一份病毒分成很多份,就能根据报毒的文件,轻松定位出特征码的位置.那么只要稍作修改,特征码引擎就失效了.这就是我们今天要讨论的东西. 现在就进入正题了,这次我们来看看特征码定位

一统服务器桌面:安全狗新增杀毒功能

原本该360干的活,他也干了,作为安装量第一的服务器安全软件,安全狗的朋友跟我说他们的软件又增加了杀毒功能,从此以后,服务器的安全防护与病毒查杀一个软件就能搞定! 这是占服务器客户端的节奏啊.360主机卫士上次跟我说要发力呢,到现在还没动静. 主动查杀+静态扫描双重服务.和传统杀毒软件应用,有快速.全盘.自定义扫描. 扫描结束后,界面上会显示扫描文件总数.风险文件数,若存在风险,则会详细列出风险路径.感染木马文件.扫描引擎和分组信息,并会给出修复建议. 安全狗杀毒功能集合网马查杀引擎.安全狗云查

[转]Android:布局实例之模仿QQ登录界面

Android:布局实例之模仿QQ登录界面 预览图: 准备: 1.找到模仿对象 QQ登陆界面UI下载>>>>> 2.导入工程 3.查看布局结构和使用控件 其对应效果图分布为 4.分析样式选择器 下拉箭头2种样式:点击和默认状态 文本框2种样式:聚焦和默认状态 复选框3种样式:选择.不选择和鼠标点着不放 左下角按钮2种样式:点击和默认 登录按钮2样式:点击和默认 ============================================帖代码===========

手工杀毒-手工查杀病毒木马

手工杀毒的方法: 对于常见的木马病毒,可通过以下方法找出木马病毒文件并进行清除: 一.注册表清除 利用注册表加载运行如下所示的注册表位置是木马的藏身之处: HKEY_LOCAL_MACHING\Software\Windows\Current Version下所有以“run”开头的键值. HKEY_CURRENT_USER\Software\Microsoft\Windows\Current Version下所有以“run”开头的健值. HKEY_USERS\Default\Software\M

android TextView Input 实例

<?xml version="1.0" encoding="utf-8"?> <TableLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_heig