Android杀毒实现原理及实例

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

思路:

1.从服务器端把病毒的版本库信息下载下来将解析的数据存放到List集合中

2.获取到手机中所有应用程序的包名以及程序的签名

3.将病毒库匹配手机应用程序包名及签名

4.用ScrollView标签进行自动滚动显示

关键代码如下:

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

[html] view plaincopy

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <list>
  3. <virus>
  4. <name>tory.virus</name>
  5. <packname>
  6. cn.itcast.virus
  7. </packname>
  8. <description>
  9. 恶意软件,读取用户日志</description>
  10. <signature>
  11. 3082020730820170a00302010202044ea7598f300d06092a864886f70d010105050030483
  12. 10a30080603550406130131310a30080603550408130131310a3008060355040713013131
  13. 0a3008060355040a130131310a3008060355040b130131310a30080603550403130131301
  14. e170d3131313032363030353132375a170d3231313032333030353132375a3048310a3008
  15. 0603550406130131310a30080603550408130131310a30080603550407130131310a30080
  16. 60355040a130131310a3008060355040b130131310a3008060355040313013130819f300d
  17. 06092a864886f70d010101050003818d0030818902818100d915d7a98cde8bcd69b87ec52
  18. 11012ace847de42129a71bf679a059c2c55e893bc0ea886874432ab8b9097724211df6769
  19. eacd3381ccac779ab7422d8101320b1e0b14e06ac8ee095b20e52cbe6163e10a87dc410b8
  20. a91fb73d53c5bdb4a22d1295c61e04b8f8b68c475e69c1754a1dc35745e7c6ae0275c2620
  21. b863b0d9ea8f0203010001300d06092a864886f70d01010505000381810038e1119fbb710
  22. 4180fddba4bc8b2c275df63f0df418b7480d8eba2891da20d34d3d083cfed7bb3eb546863
  23. c76bc67cc93f2fa0e9377c470881c9a763c99cc035093184bb50f76e74155592eca3566a3
  24. 10af55e5fec19d6fdc1a74f226aef485f84389126e8e3f4b59fe2797cbfcac660b9f2cc81
  25. e6f3dcaa7cb2001ecc496a7b
  26. </signature>
  27. </virus>
  28. </list>

杀毒引擎:

[java] view plaincopy

  1. /*
  2. * 杀毒引擎(下载病毒库、获取程序的包名及签名并进行匹配)
  3. * (non-Javadoc)
  4. * @see android.app.Activity#onTouchEvent(android.view.MotionEvent)
  5. */
  6. @Override
  7. public boolean onTouchEvent(MotionEvent event) {
  8. packagenames = new ArrayList<String>();
  9. virusResult = new ArrayList<String>();
  10. infos = new ArrayList<ApplicationInfo>();
  11. animationDrawable.start();//播放扫描病毒的动画
  12. new Thread(){
  13. @Override
  14. public void run() {
  15. try {
  16. URL url = new URL("http://192.168.1.168:8080/virus.xml");
  17. HttpURLConnection conn =  (HttpURLConnection) url.openConnection();
  18. InputStream is = conn.getInputStream();
  19. //从服务器解析病毒库并获取到病毒库的集合
  20. virusbeans =    VirusInfo.getVirusInfos(is);
  21. TaskInfo taskInfo = new TaskInfo(KillVirusActivity.this); //实例化包资源管理器
  22. //获取到当前手机里面所有的包名
  23. infos = pm.getInstalledApplications(0);
  24. for(ApplicationInfo info : infos ){
  25. packagenames.add(info.packageName);
  26. }
  27. int count=0;
  28. // 杀毒引擎   根据病毒库 比对当前系统里面的程序包名 签名进行  杀毒
  29. StringBuilder sb = new StringBuilder();
  30. for(String packname : packagenames){
  31. sb.append("正在扫描 "+ packname);
  32. sb.append("\n");
  33. Message msg = new Message();
  34. msg.what = SCANNING;
  35. msg.obj  = sb;
  36. handler.sendMessage(msg);
  37. //检查当前的packname 和对应签名 是不是跟病毒库里面的信息一样
  38. for(VirusBean virusbean : virusbeans){
  39. if(packname.equals(virusbean.getPackname())&&
  40. taskInfo.getAppSignature(packname).equals(virusbean.getSignature()))
  41. {
  42. virusResult.add(packname);//添加一个病毒
  43. }
  44. }
  45. count ++;//记录病毒的总数
  46. }
  47. Message msg = new Message();
  48. msg.what = SCANNING_FINISH;
  49. msg.obj  = count;
  50. handler.sendMessage(msg);
  51. } catch (Exception e) {
  52. e.printStackTrace();
  53. }
  54. }
  55. }.start();
  56. return super.onTouchEvent(event);
  57. }

显示病毒扫描信息:

[java] view plaincopy

  1. Handler handler = new Handler(){
  2. @Override
  3. public void handleMessage(Message msg) {
  4. super.handleMessage(msg);
  5. switch (msg.what) {
  6. case SCANNING:
  7. StringBuilder sb =  (StringBuilder) msg.obj;
  8. tv_killvirus_info.setText(sb.toString());
  9. sv.scrollBy(0, 25);//每次增加都会自动向下移动画面
  10. break;
  11. case SCANNING_FINISH:
  12. int i =  (Integer) msg.obj;
  13. StringBuilder sb1  = new StringBuilder();
  14. sb1.append("扫描完毕  共扫描 "+ i+ " 个程序");
  15. if(virusResult.size()>0){
  16. sb1.append("发现病毒 \n");
  17. for(String packname : virusResult){
  18. sb1.append("病毒名"+  packname);
  19. sb1.append("\n");
  20. }
  21. }
  22. tv_killvirus_info.setText(sb1.toString());
  23. animationDrawable.stop();
  24. break;
  25. }
  26. }
  27. };

获取到程序的签名:

[java] view plaincopy

  1. /*
  2. * 获取程序的签名
  3. */
  4. public String getAppSignature(String packname){
  5. try {
  6. PackageInfo packinfo =pm.getPackageInfo(packname, PackageManager.GET_SIGNATURES);
  7. //获取到所有的权限
  8. return packinfo.signatures[0].toCharsString();
  9. } catch (NameNotFoundException e) {
  10. e.printStackTrace();
  11. return null;
  12. }
  13. }

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

[html] view plaincopy

  1. <ScrollView
  2. android:layout_width="wrap_content"
  3. android:layout_height="wrap_content"
  4. android:layout_below="@id/iv_killvirus_am"
  5. android:id="@+id/sv_killvirus"
  6. >
  7. <TextView
  8. android:layout_width="wrap_content"
  9. android:layout_height="wrap_content"
  10. android:id="@+id/tv_killvirus_info"
  11. ></TextView>
  12. </ScrollView>
时间: 2024-12-08 14:56:24

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

Android 杀毒实例及基本原理

本篇文章来源于 Linux公社网站(www.linuxidc.com)  原文链接:http://www.linuxidc.com/Linux/2011-10/46257.htm 纯属起个抛砖引玉的作用,还望有过这方面研究的同学拍砖! 一个杀毒软甲最核心的部分一个是病毒库一个是杀毒引擎,病毒库从服务器中获得,杀毒引擎实际上是判断程序中的包名和签名是否匹配病毒库中的包名和签名,如果匹配则为病毒,界面使用帧动画来显示. 思路: 1.从服务器端把病毒的版本库信息下载下来将解析的数据存放到List集合中

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

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

Android Touch事件原理加实例分析

Android中有各种各样的事件,以响应用户的操作.这些事件可以分为按键事件和触屏事件.而Touch事件是触屏事件的基础事件,在进行Android开发时经常会用到,所以非常有必要深入理解它的原理机制. Android Touch事件原理描述 一个最简单的屏幕触摸动作触发了一系列Touch事件:ACTION_DOWN->ACTION_MOVE->ACTION_MOVE->ACTION_MOVE...->ACTION_MOVE->ACTION_UP. 当屏幕中包含一个ViewGr

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

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

Android自复制传播APP原理学习(翻译)

 Android自复制传播APP原理学习(翻译) 1 背景介绍 论文链接:http://arxiv.org/abs/1511.00444 项目地址:https://github.com/Tribler/self-compile-Android 吃完晚饭偶然看到这篇论文,当时就被吸引了,马上翻译总结了一下.如有错误欢迎斧正. 该论文的研究出发点比较高大上这里我们就不多说了,简而言之就是想通过移动设备来实现一个自组网,在发生灾难的时候,手机之间能够自动传输关键数据,减少损失.整个目标通过设计一个能够

杀毒与免杀技术详解之三:特征码免杀实战

1.前言 在前篇<杀毒与免杀技术详解之二:特征码定位-工具及原理 >中,笔者主要介绍了MyCCL这个特征码定位工具的使用方式,并对它的原理进行了一步步的分析解释,最后讲了学习这一工具的意义和作用.今天,在这实战篇中,我们将应用前面学到的知识,以几个市面上的特征码杀毒引擎为例,进行实战的免杀.同时也非常欢迎诸位朋友指点,互相学习.进步! 2.实战环境 实验主机: Vmware 11虚拟机 操作系统: XP sp3 实验用具: MyCCL 2.1.C32Asm.一份病毒样本(encode.exe)

病毒加壳技术与脱壳杀毒方法解析【转载】

壳是什么?脱壳又是什么?这是很多经常感到迷惑和经常提出的问题,其实这个问题一点也不幼稚.当你想听说脱壳这个名词并试着去了解的时候,说明你已经在各个安全站点很有了一段日子了.下面,我们进入"壳"的世界吧. 一.金蝉脱壳的故事 我先想讲个故事吧.那就是金蝉脱壳.金蝉脱壳属于三十六计中的混战计.金蝉脱壳的本意是:寒蝉在蜕变时,本体脱离皮壳而走,只留下蝉蜕还挂在枝头.此计用于军事,是指通过伪装摆脱敌人,撤退或转移,以实现我方的战略目标的谋略.稳住对方,撤退或转移,决不是惊慌失措,消极逃跑,而是

手机杀毒进度条特效

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

第1章 Android系统的编译和移植实例:

第一章 本章Android系统的编译和移植实例,其中移植涉及的主要内容有下载Android Linux内核,安装交叉工具链,移植Android Linux内核支持EZ6410平台,安装Android SDK,获得Android根文件系统,设置系统环境,完成Android正常启动.安装交叉工具链在ldd6410-read-only目录下修改vim.cross_compile内容为:/usr/local/arm/arm-none-Linux-gnueabi/bin/arm-none-linux-gu