特征码技术的静态杀毒引擎(20050822AA39)

[网络安全自学篇] 十.论文之基于机器学习算法的主机恶意代码 这是作者的系列网络安全自学教程,主要是关于网安工具和实践操作的在线笔记,特分享出来与博友共勉,希望您们喜欢,一起进步。本篇文章,作者将分享两篇论文,机器学习是如何运用到恶意代码攻击中的,并谈谈自己的理解,后续深入研究尝试分享相关实验,目前还是小白一只。基础性文章,希望对初学者有帮助,大神请飘过,谢谢各位看官! 阅读详情

time:2005-08-22

kaspersky club 21楼会议室


利用特征码技术的静态杀毒引擎
特征码的选取
在进入程序的详细讲解之前,先来讲一下对于病毒程序的特征码通常是如何选取出来的,以及特征码的结构是什么样子的。

通常选择特征码是按照以下思路。

1. 获取一个病毒程序的长度,根据长度可以将文件分为几份,份数根据样本长度而定,可以是3~5份,也可以更多。分成几段获取特征码的方法可以很大程度上避免采用单一特征码误报病毒现象的发生,也可以避免特征码过于集中造成的误报。

2. 每份中选取通常为16或32个字节长的特征串。

在选取时,应该采取如下的原则:

1. 如果选出来的信息是通用信息,即很多文件该位置都是一样的信息,那么舍弃,调整偏移量后重新选取。

2. 如果选取出来的信息是全零的字节。那么也要调整偏移后重新选取。

当然调整的偏移量多少可以人为事先规定,也可以自动随机调节。最后,将选取出来的几段特征码及它们的偏移量存入病毒库,标示出病毒的名称即可。为了方便选取特征码,通常根据以上的思路编写出特征码提取程序,自动提取特征码并作为病毒记录存入病毒库。

关键数据结构
下面我们来介绍一下整个引擎中关于特征码扫描部分的代码,整个引擎框架的结构由于篇幅有限,放在下期文章中进行介绍。

首先介绍程序中的两个重要结构VSIGNATURE和VRECORD。一个VSIGNATURE是一个特征,很多个特征组成了一条病毒记录,也就是一个VRECORD。


typedef struct tagVSIGNATURE

{

BAV_SIGN_TYPE eType;

DWORD dwOffset;

DWORD dwSize;

BYTE Signature[MAX_SIGNATURE_LEN];

}VSIGNATURE,*PVSIGNATURE;



typedef struct tagVRECORD

{

int nSize;

DWORD dwVirusID;

DWORD dwSignCount;

PVSIGNATURE pVSing[8];

DWORD dwTreatCount;

PVTREATMENT pVTreat[8];

}VRECORD,*PVRECORD;

VSIGNATURE结构是用于存放单一特征码的,其中的eType成员变量是一个枚举结构,用来定义特征码的类型,这里演示工程里目前我们只定义了一种简单文件特征。dwOffset成员存储该特征码的偏移量。dwSize成员存储特征码的长度。字节型的Signature数组成员存放特征码串,最大长度由 MAX_SIGNATURE_LEN宏控制,目前为32字节。

VRECORD结构用于存放病毒库中每个病毒记录的内容。其中nSize用于控制结构的版本,目前我们不用过多关心。dwVirusID成员指定病毒的ID编号。dwSignCount成员存放特征码(VSIGNATURE)的段数,也就是对于该病毒取了多少段特征码。pVSing数组成员存放每段特征码的内容,这里用数组是为了演示方便,以后我们会改为可变长度的数据结构。dwTreatCount成员存放处理该病毒的方法数量。pVTreat数组成员存放处理该病毒的每种方法的内容。这两个成员要到我们增加杀毒方法的时候才会用到。

为了演示程序的简单,这一版的病毒库没有从文件加载,而是直接在CVirusDB::Load()中编码进去的。比如第一个eicar测试病毒的第一条特征是这样的:

{

BS_PHY_FILE, 0, 32,

0x58, 0x35, 0x4F, 0x21, 0x50, 0x25, 0x40, 0x41,

0x50, 0x5B, 0x34, 0x5C, 0x50, 0x5A, 0x58, 0x35,

0x34, 0x28, 0x50, 0x5E, 0x29, 0x37, 0x43, 0x43,

0x29, 0x37, 0x7D, 0x24, 0x45, 0x49, 0x43, 0x41,

}

它表明这是一个简单文件特征,特征起始地址0,特征长度32,后面32个字节是具体特征值。

库与引擎类
清楚了这两个结构,接下来我们看一下具体的扫描代码。特征串的匹配其实就是memcmp,没有什么特别的,关键讲解一下引擎、库与被扫描对象之间的基本关系和分工。

引擎(CEngine)负责被扫描对象的遍历,病毒数据库对象(CVirusDB)负责在自己管理的库中搜索。对应到目前版本的代码上,引擎遍历目录,将找到的文件生成被扫描对象(CScanObj)交给当前病毒库对象的Search()方法。

CEngine类中DFS()函数是负责文件系统深度优先搜索的函数,其中以下一段就是产生一个对象,然后传递给CVirusDB::Search()方法来查毒:

{

m_cScanResults.dwObjCount++;



CFileObject cScanObj;

cScanObj.m_eObjType = BO_PHY_FILE;

cScanObj.m_strObjName = lpszPathName;

if( !cScanObj.Open() )

{

// TODO: show error here.

return;

}



DWORD dwVID = m_pcVDB->Search(&cScanObj);

if( dwVID )

{

PSCAN_RECORD pScanRecord = new SCAN_RECORD;

if(pScanRecord)

{

CFileObject* pScanObj = new CFileObject(cScanObj);



pScanRecord->dwVirusID = dwVID;

pScanRecord->eResult = BR_WITH_VIRUS;

pScanRecord->pScanObject= pScanObj;

pScanRecord->pNext = m_cScanResults.pScanRecords;

m_cScanResults.pScanRecords = pScanRecord;

m_cScanResults.dwRecCount++;

}

}



cScanObj.Close();

}

CVirusDB类中的Search函数是用于在病毒库中匹配特征的成员函数,内容如下:

DWORD CVirusDB::Search(CScanObject* pScanObj)

{

list::iterator iter = m_listVRecords.begin();



while(iter!=m_listVRecords.end())

{

PVRECORD pVRec = *iter;

ASSERT(pVRec);

if(pVRec)

{

bool bVirus = true;

for(unsigned int i=0; idwSignCount; i++)

{

bVirus &= pScanObj->Compare(pVRec->pVSing[i]->dwOffset, pVRec->pVSing[i]->dwSize, pVRec->pVSing[i]->Signature);

if(!bVirus) break;

}



// match all signatures

if(bVirus)

{

return pVRec->dwVirusID;

}

}

else

{

// error

return 0xFFFFFFFF;

}



iter++;

}



// no match record in VirusDB

return 0;

}

While循环是遍历本病毒库中所有的记录。在For循环中,根据指向VRECORD结构的指针pVRec中dwSignCount的内容可知特征码的数量。然后循环用pScanObj->Compare()函数比较每段特征码与文件中指定偏移处的内容是否一致,如果全部一致,则说明该文件是病毒。

自制杀毒软件C++源码 立即下载

相关推荐

病毒扫描器代码

使用vs2008,基于mfc编写的,计算机病毒扫描器。可以作为计算机类毕业设计的参考

几种典型的反病毒技术:特征码技术、覆盖法技术等

  杀毒技术中,杀病毒技术有:特征码技术、覆盖法技术、驻留式软件技术、特征码过滤技术、自身加密的开放式反病毒数据库技术、智能和广谱技术、虚拟机技术、启发扫描技术、病毒疫苗等,最初并且现在还在用的就是特征值查毒法。所谓特征值查毒法,就是在获取病毒样本后,提取出其特征值(譬如石头病毒中的"your pc is stoned!"字符串),然后通过该特征值对各个文件或内存等进行扫描。如果发现这种特征值,这

巅峰测试 3513

过360免杀技术视频教程|特征码修改和定位|不用数字签名轻松解决报毒问题

360目前越来越无情了,及时是没有毒的软件,也会报毒。这套视频教程正能助你一臂之力,让你在无签名下不被报毒。

毒引擎程序原理

毒引擎程序原理/***************************************************************/一.病毒分类:传统病毒,宏病毒,恶意脚本,木马、黑客、蠕虫、破坏性程序。1. 传统病毒:能够感染的程序。通过改变文件或者其他东西进行传播,通常有感染可执行文件的文件型病毒和感染引导扇区的引导型病毒;2.宏病毒(Macro):利用Wo

WINCOL的专栏 1297

C++木马病毒的查杀设计与实现(含源码)

VC++木马病毒检测工具设计与实现,含毕设要求各种文档及源码 VC++木马病毒检测工具设计与实现,含毕设要求各种文档及源码

深度学习batch、batch_size、epoch、iteration以及小样本中episode、support set、query set关系

训练整个数据集是epoch、把数据集分为多少小块就是batch,每个小块(batch)多少个数据就是batch_size,整个数据集需要训练多少轮是iteration

qq_42740834的博客 1610

安全防御知识总结(IDS,APT,恶意软件,反病毒网关,对称-不对称加密)

恶意软件(Malware)指的是一种被设计来渗透、破坏或控制受感染计算机的软件。病毒(Virus):它可以通过复制自身到其他文件或程序来传播,并且可能会在特定条件下自动激活。蠕虫(Worm):与病毒类似,但蠕虫可以在网络上迅速自我复制和传播。木马(Trojan):这是一种“假装”有用的程序,实际上在后台执行恶意操作,例如窃取敏感信息或创建网络后门。间谍软件(Spyware):这种软件通常以隐秘的方式安装在用户计算机中,并在后台监视用户的操作并收集敏感信息。

xnxqwzy的博客 2765

算力网:正在编织的“第二电网“

中国算力网:编织智能时代的"第二电网" 中国正在构建全国一体化算力网,目标让算力资源像水电一样即取即用。这一国家战略通过"东数西算"布局,将东部算力需求与西部清洁能源优势结合,形成三级时延圈(1ms城市级、5ms区域级、20ms国家级)。算力网采用三层架构:基础设施层的八大枢纽节点作为"发电厂",编排管理层的智能调度系统作为"调度中心",运营服务层提供标准化算力服务。关键技术包括算力路由、异构算力统一度量、无损网络和液冷技术等。

这只是一个博客 669

反病毒引擎设计

本文将对当今先进的病毒/反病毒技术做全面而细致的介绍,重点当然放在了反病毒上,特别是虚拟机和实时监控技术。文中首先介绍几种当今较为流行的病毒技术,包括获取系统核心态特权级,驻留,截获系统操作,变形和加密等。然后分五节详细讨论虚拟机技术:第一节简单介绍一下虚拟机的概论;第二节介绍加密变形病毒,作者会分析两个著名变形病毒的解密子;第三节是虚拟机实现技术详解,其中会对两种不同方案进行比较,同时将剖析一个查毒用虚拟机的总体控制结构;第四节主要是对特定指令处理函数的分析;最后在第五节中列出了一些反虚拟执行技术做为今后

ba_wang_mao的专栏 586

MaxEnt软件的下载与安装

1、下载网站:http://lucky-boy.ys168.com/ (这是之前在网上搜到的,里面有许多软件安装包,感谢网页主的资源共享,违权必删)

weixin_42191203的博客 2万+

openEuler服务器离线安装实战:从Docker到Samba的完整避坑指南

本文提供了一份详尽的openEuler服务器离线部署实战指南,重点解决了在无网络环境下安装Docker、Samba等软件的依赖难题。文章深入对比了`dnf install`、`rpm`直接安装及禁用仓库安装三种核心方法,并分享了构建本地DNF仓库的进阶策略,旨在帮助运维人员构建高效可靠的离线部署工作流。

weixin_29210759的博客 72

杀毒软件查杀原理

<br />核心提示:本文介绍了杀毒软件是如何判断一个文件有毒的,以及查杀的方法,包括:特征码法、校验和法、行为检测法、软件模拟法。这些方法依据原理不同,实现时所需开销不同,检测范围不同,各有所长。...<br />杀毒软件查杀原理<br />杀毒软件是根据什么来进行病毒判断并查杀的呢?在讲这个问题之前首先要弄清楚杀毒软件检测病毒的方法,在与病毒的对抗中,及早发现病毒有重要。早发现,早处理,可以减少损失。检测病毒的方法有:特征码法、校验和法、行为检测法、软件模拟法。这些方法依据原理不同,实现时所需开销不同,

xcntime的专栏 3481

【东华大学oj】找到最大数(一维数组->中等)

一天,老师布置了一个作业,要求对一串数字各不相同的数字串进行排序,大的在前,小的在后。接着,我从数字串中的第二个数字开始往后找,找到最大的一个,然后与第二个数字交换,这样的话我就能够确定排序后数字串中的第二个数字;明明研究发现,他的这个想法中最重要的一环就是在一串数字中找到最大的那个,然后与第一个数字交换,可是明明毕竟刚刚开始学习程序设计不久,无法写出较复杂的程序,所以明明想让你这位程序设计专家帮他的忙,帮助他把这段核心程序写出来,然后明明只需模仿着写就可以了。时间限制: 1S类别: 一维数组->中等。

的博客 525

免杀对抗 — 一场关于静态查杀的对抗

我们将二者的有点结合在一起,来到这场对抗中的最后一舞。直接上结果吧,沙箱报了个中危,结果可能并没有大家想的那么好,不过相比于过了几个杀软,更重要的是你在这一次对抗中学习到了什么。其实大家也不必灰心,这里的“静态检测”标签具有极大的误导性。它并不是指对你硬盘上的 .exe 文件的静态扫描。我们的加载器执行了 VirtualAlloc -> memcpy -> VirtualProtect -> CreateThread。这一套标准的“内存注入”操作,是教科书级别的恶意行为模式。

2301_76227305的博客 1137

三菱CNC数据采集实战:从SDK安装到C#代码调试全流程(附完整资源包)

本文为C#开发者提供了三菱CNC数据采集的完整实战指南。详细介绍了从获取并安装核心A2协议SDK、配置Visual Studio开发环境,到理解COM接口文档、封装C#通信类,并构建具备多设备连接与定时采集功能的WinForms应用程序的全流程。文章重点分享了网络调试、异常处理及性能优化等关键实战经验,帮助开发者高效打通工业自动化数据采集链路。

oauth7security的博客 707

VS2019编译配置Easy3D

VS2019编译配置Easy3D

dayuhaitang1的博客 2599

特征编码的算法与实现

1.背景介绍 特征编码(Feature Engineering)是机器学习和数据挖掘领域中的一个重要环节,它涉及到从原始数据中提取、创建和选择特征,以便于模型学习。特征编码的目的是将原始数据转换为机器学习模型可以理解和处理的数字表示。这种数字表示可以帮助模型更好地捕捉数据中的模式和关系,从而提高模型的性能。 在过去的几年里,随着数据的规模和复杂性的增加,特征编码的重要性得到了广泛认识。许多研究...

AI天才研究院 2195

ABAP Module Pool 编程入门:把 Table Control 用透,在 Dynpro 里做出可编辑的列表界面

摘要:Table Control是SAP GUI中用于对话式事务的多行数据交互控件,具备滚动、选择、修改等功能。它通过CXTAB_CONTROL/CXTAB_COLUMN结构实现动态控制,需在PBO/PAI中配合LOOP循环处理数据流。开发时需注意LINES、TOP_LINE等关键字段设置,并采用并行循环简化编码。典型应用包括订单行维护、主数据管理等场景,支持多选删除、列排序等业务需求。(150字)

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 344

_Linux上杀毒软件的使用

ClamAV介绍 ClamAV是一个可以在命令行下查毒软件,开源(GPLv2)的反病毒工具包。它提供了许多实用程序,包括灵活且可扩展的多线程守护程序,命令行扫描程序和用于自动数据库更新的高级工具。该软件包的核心是一个以共享库形式提供的反病毒引擎。功能ClamAV旨在快速扫描文件。实时保护(仅限Linux)。我们的扫描守护程序支持现代版Linux上的按访问扫描,包括在扫描文件之前阻止文件访问的功能。...

weixin_39601641的博客 383

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

clamav Java_ClamAV病毒查杀

一、介绍Clam AntiVirus 是一款 UNIX 下开源的 (GPL) 反病毒工具包,专为邮件网关上的电子邮件扫描而设计。该工具包提供了包含灵活且可伸缩的监控程序、命令行扫描程序以及用于自动更新数据库的高级工具在内的大量实用程序。该工具包的核心在于可用于各类场合的反病毒引擎共享库。主要使用ClamAV开源杀毒引擎检测木马、病毒、恶意软件和其他恶意的威胁1.1、高性能ClamAV包括一个多线程...

weixin_39812039的博客 900

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

程序免杀技术之——特征码

特征码(attribute code )是能识别一个程序是一个病毒的一段不大于64字节的特征串。为了减少误报率,一般杀毒软件会提取多段特征串,这时,我们往往改一处就可达到 免杀效果,当然有些杀毒软件要同时改几处才能免杀。 目前的核心免杀技术几乎都是围绕着特征码的修改,然后辅助之以花指令、压缩加密壳等手段。关于花指令的使用方法,我在上一篇文章中已经讲过了(http://bbs.honker.

人生代码,代码人生。。。 1万+

java 调用杀毒软件_APIHOOK之杀毒软件的简单实现(ZT)

#defineDEBUGMSG#include<windows.h>#include<windef.h>#include<string.h>#include<stdlib.h>#include<stdio.h>#include"Psapi.h"#pragmacomment(lib,"Psapi.lib")#defineerronGetL...

weixin_28788983的博客 1605
上一篇: Eclipse提示和技巧
下一篇: MFC4.2实现键盘钩子捕获,基于DLL实现
jaminwm
jaminwm 领域专家: 数据库技术领域 领域专家: 数据库技术领域
博客等级 码龄24年 1391粉丝 514原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值