ClamAV学习【7】——病毒库文件格式学习
搜查到一份详细的ClamAV病毒文件格式资料(http://download.csdn.net/detail/betabin/4215909),英文版,国内这资料不多的感觉。
重点看了下有关PE的病毒文件格式,就是*.mdb文件。还有之前郁闷用途的*.cvd文件。
就粘贴下刚刚的一点笔记:
1、介绍
CVD的前512bytes是其文件头,格式如下:
ClamAV-VDB:build time:version:number of signatures:functionality
level required:MD5 checksum:digital signature:builder name:build
time (sec)
2、保存脱壳后的签名,这样可以预防用其它壳
3、签名格式
3.1、MD5
最简单的方法,比较适用于静态malware。*.hdb文件,可以包含任意数量的签名,是最简单的数据库文件。
放在share/clamav下可以自动加载。用哈希签名要注意,只要遇到有一个byte不同,就会停止匹配。
3.2、PE section based的MD5
.mdb文件,格式如下:
PESectionSize:MD5:MalwareName
(貌似ClamAV的PE查杀就是用这种签名查杀)
3.3、Body-based的签名
ClamAV用十六进制的格式存储所有的body-based签名。可以用不同的wildcards拓展。wildcards直接拷贝来如下:
??
Match any byte.
a?
Match a high nibble (the four high bits).
IMPORTANT NOTE: The nibble matching is only available in libclamav
with the functionality level 17 and higher therefore please only use
it with .ndb signatures followed by ”:17” (MinEngineFunctionalityLevel,
see 3.3.5).
?a
Match a low nibble (the four low bits).
*
Match any number of bytes.
{n}
Match n bytes.
{-n}
Match n or less bytes.
{n-}
Match n or more bytes.
{n-m}
Match between n and m bytes (m > n).
(aa|bb|cc|..)
Match aa or bb or cc..
!(aa|bb|cc|..)
Match any byte except aa and bb and cc.. (ClamAV0.96)
HEXSIG[x-y]aa or aa[x-y]HEXSIG
Match aa anchored to a hex-signature, see https://wwws.clamav.NET/
bugzilla/show_bug.cgi?id=776 for discussion and examples.
(B)
Match word boundary (including file boundaries).
(L)
Match CR, CRLF or file boundaries.
在*.db文件中,简单的签名格式如下:
MalwareName=HexSignature
当然,也有拓展的签名格式,就是有附加信息的。在*.ndb文件中格式如下:
MalwareName:TargetType:Offset:HexSignature[:MinFL:[MaxFL]]
还有逻辑签名,在*.ldb文件中,格式如下,
SignatureName;TargetDescriptionBlock;LogicalExpression;Subsig0;
Subsig1;Subsig2;...
其中,逻辑关系描述变量比较有趣,大于小于是匹配次数的比较。
3.4、PE文件的图标签名
0.96出现的一种比较模糊近似的图标签名匹配,在*.idb文件中格式如下:
ICONNAME:GROUP1:GROUP2:ICON_HASH
还有PE文件版本信息元数据签名以及其它的元数据签名。还有针对其它不同类型文件的签名,例如上面的PE文件的,还
原文:http://blog.csdn.net/betabin/article/details/7448447
ClamAV学习【7】——病毒库文件格式学习的更多相关文章
- Numpy库的学习(三)
今天我们继续学习一下Numpy库的学习 废话不多说 ,开始讲 比如我们现在想创建一个0-14这样一个15位的数组 可以直接写,但是很麻烦,Numpy中就给我们了一个方便创建的方法 numpy中有一个a ...
- 几个经典的数学库之一学习---VCGlib(2)
几个经典的数学库之一学习---VCGlib(2) 1. Optional Component(可选的组件) 有许多Vertex和Face的属性并不是一直都是必要的,如Face-Face的邻接关系.VC ...
- ELF文件格式学习总结
ELF文件格式学习总结 ELF文件格式学习总结1. 概述2. 目标文件结构3. ELF文件头3.1 魔数3.2 文件类型3.3 机器类型4. ELF文件内容4.1段表4.2字符串表(.**strtab ...
- GEOS库的学习之一:介绍和编译
对GEOS库的学习,源于一个项目:要在c++中判断二维平面中两个多边形的关系(无论凹凸).也就是判断两个多边形是否相交.相容等.听起来很简单,可实现起来却比较难,而项目又催得紧.于是我去搜索了一下,看 ...
- 标准模板库(STL)学习探究之stack
标准模板库(STL)学习探究之stack queue priority_queue list map/multimap dequeue string
- 标准模板库(STL)学习探究之vector容器
标准模板库(STL)学习探究之vector容器 C++ Vectors vector是C++标准模板库中的部分内容,它是一个多功能的,能够操作多种数据结构和算法的模板类和函数库.vector之所以被 ...
- 怎样学习使用libiconv库
怎样学习使用libiconv库 - My Study My Study About My Learn or Study etc. 怎样学习使用libiconv库 By Cnangel on Febru ...
- ZhuSuan 是建立在Tensorflow上的贝叶斯深层学习的 python 库
ZhuSuan 是建立在Tensorflow上的贝叶斯深层学习的 python 库. 与现有的主要针对监督任务设计的深度学习库不同,ZhuSuan 的特点是深入到贝叶斯推理中,从而支持各种生成模式:传 ...
- Numpy库的学习(五)
今天继续学习一下Numpy库,废话不多说,整起走 先说下Numpy中,经常会犯错的地方,就是数据的复制 这个问题不仅仅是在numpy中有,其他地方也同样会出现 import numpy as np a ...
随机推荐
- Haartraining 训练方法(这个样例真有用,能行)
目标检测方法最初由Paul Viola [Viola01]提出,并由Rainer Lienhart [Lienhart02]对这一方法进行了改善.该方法的基本步骤为: 首先,利用样本(大约几百幅样本图 ...
- java String标准格式转换Date(yyyy-MM-dd HH:mm:ss)
SimpleDateFormat sdf=new SimpleDateFormat("yyy年MM月dd日hh点mm分"); Date date=new Date(); Strin ...
- Visual Studio 使用Web Deploy发布项目
工具:Web Deploy 3.6 点击下载 (强烈推荐使用独立的Web Deploy 安装包安装) 使用 Web Platform Installer 安装 Web Deploy(3.5,3.6都安 ...
- 规则引擎以及blaze 规则库的集成初探之二——JSR94 的规则引擎API和实现
http://jefferson.iteye.com/blog/67839 规则引擎以及blaze 规则库的集成初探之二——JSR94 的规则引擎API和实现
- 关于std:auto_ptr std:shared_ptr std:unique_ptr
很多人听说过标准auto_ptr智能指针机制,但并不是每个人都天天使用它.这真是个遗憾,因为auto_ptr优雅地解决了C++设计和编码中常见的问题,正确地使用它可以生成健壮的代码.本文阐述了如何正确 ...
- eclipse中debug改变变量的值
step1:debug断点到变量的下一行,在debug试图的右上角variables中看到该变量的值: step2:鼠标右键点击str出现下图,选择Change Value... step3:点击Ch ...
- ArcGIS中各种合并要素(Union、Merge、Append、Dissolve)的异同点分析 转载
标签: arcgis 杂谈 分类: GISArcGIS中将两个要素类合并成一个要素有Union.Dissolve.Append.Merge等,在Arctoolbox中均有相应工具,但功能上有所不同:U ...
- LevelDB Compaction操作
[LevelDB Compaction操作] 对于LevelDb来说,写入记录操作很简单,删除记录仅仅写入一个删除标记就算完事,但是读取记录比较复杂,需要在内存以及各个层级文件中依照新鲜程度依次查找, ...
- Layer Comps
[What is Layer Comps] Designers often create multiple compositions(comps) of a page layout to show c ...
- Hadoop Pipes
[Hadoop Pipes] 1.MapContext的getInputSplit()可以用于获取当前mapper所对象的文件路经,也就是Pipes中,没有InputSplit接口/对象. 2.在Pi ...