数据挖掘 - 指纹匹配(以杀毒软件为例)

    科技2022-09-04  112

    20201005 -

    0. 引言

    最近在研究与相似度比较相关的问题,转而想起来一些问题,例如说杀毒引擎中,他们的在进行匹配的时候都是采用什么算法来就进行匹配?是用数据库?!我觉得是可行的,如果是在进行全盘扫描的时候进行要进行匹配的数据是非常多的,这种情况下每次都用数据库进行匹配,是不是就太难受了?!

    0.5 中间插入(开源的杀毒软件)

    这里记录两个开源的杀毒软件。 hanul93/kicomav Cisco-Talos/clamav-devel

    1. 问题的引入

    还是利用杀毒引擎来距离,如果是直接使用类似这种MD5进行比较的话,其实找一个高效的数据结构来进行查询就好了,然后可以将病毒库中的特征码这类信息直接读取到内存中(内存足够的话)。但是我在想,有没有一种批量查询的方式呢?如果还是按照这种一一对比的方式的话, 那么也没什么意义了。另外,假如说是类似LSH这种指纹匹配的,有没有批量查询的需求呢?!

    好了,这里的问题出来了,是不是存在响应的算法,或者说数据结构,能够支持批量指纹的查询?!我觉得即使没有准确的,也应该有相似的把?!

    2. 初步的想法

    我觉得,可以从特征码入手,然后建立相应的数据结构,待检测和检测的都建立这种数据结构,然后能够让这两者的进行查询。通过排序也好,或者什么也好来实现?还有就是哈希表这种结构方式。其实不仅仅是这种需求,类似文本比较应该也有这种形式。 其实本质上,我的需求不仅仅是一个比较算法,同时配合着还有一个高效存储相应的信息的数据结构,或者说特征值。这部分可以有时间好好查查。就比如说,那种数据库的批量查询接口这种,肯定是存在的,这种是以系统级别出现。应该肯定是有相应的库同时进行查询的过程的。啊,真是健忘了,我想起来了, yara这个库不就是专门做指纹匹配的,肯定是有相关的接口的应该。直接在百度上搜索,好像并没有这种方式。其实本质上,有时候你也忽略了很多比较明显的事情。就比如说,你用hadoop如何去检索一个字符串呢?本质上就是一个grep的过程。

    同时本质上,这就是一个求解两个集合的并集的问题,在大数据量的情况下,利用mapreduce就能解决,当然spark就更不用说了。但是如果是传统的算法呢?我记得之前的时候,使用的方法是利用awk,当然在这个版本之前,还使用过grep -f的方法,但这种方法的时间消耗就非常大了,简直不能忍;最后还是利用awk的方式,就是按照两个文件的形式,一个文件作为种子文件,建立hash表,另外一个文件进行比对,这是一种通过哈希表的方式来实现的。不过,本质上还是一种逐一比对的方法,我前面所说的,就是看有没有批量查询的接口。(当然,如果他们依然是通过逐一查询的,仅仅是做了一层封装,就当我没说)。

    再回到前面提到的问题,就是两个集合的问题,在数据库原理上来讲,这种方式是由底层计算公式支持的,我个人觉得这些问题应该有很多人研究过。从根本上来说,这是一个匹配问题。

    Processed: 0.009, SQL: 9