卡巴斯基(AVP)内存驻留型病毒检测方法

author:killer  <killer②uid0.net>

卡巴斯基反病毒软件(Kaspersky Antivirus),以前叫AntiViral Toolkit Pro(AVP),出于习惯和简单,这里一律称为AVP或KAV。

学习AVP的检测办法的意义一方面在于AVP的检测方法是经过理论验证和实践考验的科学合理的方法,另外DOS年代过来的朋友对于反病毒有过这样的经验:“机子感染病毒了?好,请用干净无毒的系统盘启动,然后全盘查杀。”,我记得CIH横行那会,一个朋友让我帮他清除病毒,说病毒是国内某知名AV报的,启动该AV杀了一遍还有,而且该AV自己的监控报自己也感染了CIH,我听了后告诉他用干净的启动盘启动系统全盘查杀。虽然这是一个办法,但事实上反病毒软件为什么不直接做到可以内存检测并清除病毒呢。而这是完全可以做到的,对于内存检测/清除驻留型病毒的方法,就我所知最早AVP开始使用。

一、检测方法:

在AVP病毒库中,有几种特征记录,其中一种是内存特征,这是AVP用来检测查杀内存驻留型病毒的特征集,AVP对内存驻留的感染式病毒采用了一些单独的检测方法。

AVP通过在病毒库中记录的扫描方法和地址偏移来扫描内存中驻留的感染式病毒,从地址偏移开始进行逐字节匹配,当匹配到匹配字节的时候,即:Segm:Offset + byte offset = record:Byte,然后AVP开始计算由库记录指定长度的特征码,如果恰好匹配库中的记录的话,将显示对应的病毒消息,同时根据库的修复记录所指定的修复长度、和修复字节中的内容,进行内存修复,确保修复后,使得原病毒失去活性。

此记录结构包含的字段主要有:

病毒名

搜索方法:绝对地址扫描、专用模块...

地址偏移: 段+偏移

匹配字节

特征长度

特征

专用处理过程:Obj_Link

处理偏移地址

处理字节长度:一般小于10

修复字节

二、搜索方法:

有上面可以看出,AVP能否保证快速处理,一个关键因素是AVP的搜索方法,事实上,AVP内置了众多的搜索办法,这些办法适用于MSDOS、WIN9X、WINNT/2000/XP等系统。AVP对一个病毒的处理可以采用多种内存搜索办法,所不同的是哪种方法高效一些而已。

1、绝对地址:

AVP采用绝对地址的扫描办法来扫描一些病毒,扫描器从库记录中读出相应的地址记录,到内存中进行匹配,匹配上后,进行修复处理过程。

2、段扫描:

AVP从一个内存段,单字节循环递增,从开始扫描到段结束。

3、全部扫描:

AVP从内存地址0x00000000h开始,循环递增,进行全内存匹配的扫描方法。

4、专用模块:

这是针对一些特定的“狡猾”病毒的方法。当AVP自己定义的正常扫描和检测办法无法正确识别的时候,采用一个专用的处理模块来检测清除该病毒,该模块编写完成后,编译为obj格式的文件,存储在AVP的库记录中。

5、中断跟踪:

这主要是AVP For DOS的扫描方法,通过对系统的中断INT21、INT13的来定位驻留内存的病毒代码,通过对这些指令附近的代码修改,使得病毒失去活性。

三、实例:

简单举例,比如这个病毒(网上找的一个感染COM文件的代码片段):

cmp  ah,3dh

jz   short @@Infect_File   ;截获3d号Dos功能

@@JmpOldInt21:

cli

JmpFar      db 0eah

@@Infect_File:

....

编译后应该是这个样子:

13B6:0100 80FC 3D    CMP   AH,3Dh

13B6:0104 74 xx      JE    Infect_File

13B6:0107 FA         CLI

13B6:0108 xx xx      XXX

对于这个病毒的检测和清除,我们生成一记录,这个病毒记录在AVP库record中,可以是这种形式,它完全可以检测和解除该病毒的活性:

搜索方法:中断跟踪

地址偏移:1000:0000

匹配字节:80FC

特征长度:6

特征:xxxxxxxx

专用处理过程:NULL

处理偏移地址:3

处理字节长度:2

修复字节:90 90

通过这样一个检测、修复库记录,AVP就可以检测和修复内存中驻留的活性病毒,然后在通过单独的文件病毒检测/修复等处理过程来全面清除磁盘文件中的病毒。

本文是我的(Avp Reverse Engineering)AVP逆向学习系列一节,所分析的方法在不同版本中略有不同,而基于AVP的良好架构,这些改变主要体现的处理方法的增删,和结构长度变化。

欢迎交流、指点。

(0)

相关推荐

  • 卡巴斯基(AVP)内存驻留型病毒检测方法

    author:killer  <killer②uid0.net> 卡巴斯基反病毒软件(Kaspersky Antivirus),以前叫AntiViral Toolkit Pro(AVP),出于习惯和简单,这里一律称为AVP或KAV. 学习AVP的检测办法的意义一方面在于AVP的检测方法是经过理论验证和实践考验的科学合理的方法,另外DOS年代过来的朋友对于反病毒有过这样的经验:"机子感染病毒了?好,请用干净无毒的系统盘启动,然后全盘查杀.",我记得CIH横行那会,一个朋友让我

  • HDM.exe手工查杀U盘病毒的方法

    HDM.exe是一个恶性的U盘病毒,其破坏力巨大,主要表现在以下几个方面: Quote: 1.使用恢复SSDT的方式破坏杀毒软件 2.IFEO映像劫持 3.关闭指定窗口 4.删除gho文件 5.破坏安全模式,以及显示隐藏文件功能 6.感染htm等网页文件 7.猜测密码通过局域网传播 8.通过U盘等移动存储传播 9.arp欺骗 具体分析如下: Quote: File: HDM.exe Size: 13312 bytes Modified: 2007年11月28日, 16:52:08 MD5: 7E

  • 字符串内存驻留机制详解示例

    复制代码 代码如下: //字符串的内存驻留机制        public static void Test()        {            //当有多个字符串变量包含了同样的字符串实际值时,            //CLR可能不会为它们重复地分配内存,而是让它们统统指向同一个字符串对象实例. String s1 = "Hello";            String s2 = "Hello";            bool same = (obj

  • Python下载网络文本数据到本地内存的四种实现方法示例

    本文实例讲述了Python下载网络文本数据到本地内存的四种实现方法.分享给大家供大家参考,具体如下: import urllib.request import requests from io import StringIO import numpy as np import pandas as pd ''' 下载网络文件,并导入CSV文件作为numpy的矩阵 ''' # 网络数据文件地址 url = "http://archive.ics.uci.edu/ml/machine-learning

  • c语言内存泄漏严重的解决方法

    摘要:通过介绍内存泄漏问题原理及检视方法,希望后续能够从编码检视环节就杜绝内存泄漏导致的网上问题发生. 1. 前言 最近部门不同产品接连出现内存泄漏导致的网上问题,具体表现为单板在现网运行数月以后,因为内存耗尽而导致单板复位现象.一方面,内存泄漏问题属于低级错误,此类问题遗漏到现网,影响很坏:另一方面,由于内存泄漏问题很可能导致单板运行固定时间以后就复位,只能通过批量升级才能解决,实际影响也很恶劣.同时,接连出现此类问题,尤其是其中一例问题还是我们老员工修改引入,说明我们不少员工对内存泄漏问题认

  • C#字符串内存驻留机制分析

    在这之前我写过一些文章来介绍关于字符串内存分配和驻留的文章,涉及到的观点主要有:字符串的驻留机制避免了对具有相同字符序列的字符串对象的重复创建:被驻留的字符串是不受GC管辖的,即被驻留的字符串对象不能被GC回收:被驻留的字符串是被同一进程中所有应用程序域共享的.至于具体的原因,相信在<关于CLR内存管理一些深层次的讨论>中,你可以找到答案.由于这些天来在做一些关于内存泄露审查的工作,所以想通过具体的Memory Profiling工具来为你证实上面的结论.我采用的Memory Profilin

  • Ajax 实现网站劫持的检测方法

    https可以彻底解决劫持的问题.但是一般虚拟主机都不支持 https,难道http只能任流氓们恶意劫持么? 既然只有第一次访问时才会出现抽奖链接,通过JS在浏览器中检测,如果发现 被植入的 代码,则自动刷新网页,就可以解决被劫持的问题了. 现在要做的就是得到 被植入的代码.找了一圈,没有找到检查的工具.网站传输到客户的浏览器,需要三个步骤:[1]服务器 -> [2]运行商 -> [3]客户浏览器. 劫持出现在第[2]步,因为离开了服务器,已经不受控制了.但是第[3]部的浏览器可以通过JS来控

  • 有关tomcat内存溢出的完美解决方法

    tomcat内存溢出设置JAVA_OPTS 答案1 设置Tomcat启动的初始内存 其初始空间(即-Xms)是物理内存的1/64,最大空间(-Xmx)是物理内存的1/4.可以利用JVM提供的-Xmn -Xms -Xmx等选项可 进行设置 三.实例,以下给出1G内存环境下java jvm 的参数设置参考: JAVA_OPTS="-server -Xms800m -Xmx800m -XX:PermSize=64M -XX:MaxNewSize=256m -XX:MaxPermSize=128m -D

  • 深入C# 内存管理以及优化的方法详解

    在C# winform应用程序中,用以下代码可以进行一些内存使用的优化 复制代码 代码如下: using System;using System.Diagnostics;using System.Runtime.InteropServices;/// <summary>/// 包含各种内存管理.优化的方法/// </summary>    public class Memory    {        private static readonly Version myVersio

  • Linux 查看内存插槽数、最大容量的方法

    查看内存插槽数: dmidecode|grep -P -A5 "Memory\s+Device"|grep Size|grep -v Range 查看最大容量: dmidecode | grep -P 'Maximum\s+Capacity' 以上这篇Linux 查看内存插槽数.最大容量的方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们.

随机推荐