Python 行序列中不完全匹配的搜索算法

Python 行序列中不完全匹配的搜索算法,python,sql,algorithm,search,search-engine,Python,Sql,Algorithm,Search,Search Engine,我正在演示恶意软件扫描的一些原理(我不知道这是否是一种“传统”方法,但我相信它在某种程度上会起作用,不管怎样,我正在尝试实现它) 在这个阶段,我试图在反汇编程序中映射特定的函数调用(即:网络调用),并检查我的SQL数据库,以查看是否存在与已知恶意软件的匹配 下面是我的“函数调用”表的外观: malwareID address function order 1 8048000 s

我正在演示恶意软件扫描的一些原理(我不知道这是否是一种“传统”方法,但我相信它在某种程度上会起作用,不管怎样,我正在尝试实现它)

在这个阶段,我试图在反汇编程序中映射特定的函数调用(即:网络调用),并检查我的SQL数据库,以查看是否存在与已知恶意软件的匹配

下面是我的“函数调用”表的外观:

malwareID           address           function           order

    1               8048000            socket              1
    1               8048010            bind                2
    1               8048020            listen              3
    1               8048030            bind                4
    1               8048040            recv                5
目前我只能检查是否有直接匹配。我反汇编目标程序,检索所有网络函数调用及其地址,并检查表中的直接匹配(即:
selectmalwareid,其中address='addr'和function='func'
)。这可以检测到恶意软件的一些变体,但大多数情况下不起作用,因为它取决于在同一地址具有相同函数调用的变体

我想做的是在数据库中按“顺序”搜索函数调用。比如说,在分解和提取函数调用之后,我得到了如下列表:

8041000     socket
8041010     bind
8041020     listen
8041030     bind
8041040     send
8041050     recv
虽然地址与数据库中存储的已知变量不匹配,但调用顺序和调用之间的“距离”是相同/相似的,只是在此新变量中滑入了一个新的
send
调用

因为我从未做过任何软件工程或课程,在那里你学习过这种“搜索”算法,我需要指出正确的方向

我正在寻找一种算法,该算法可以在数据库中搜索与一系列行的匹配,可能还考虑了调用之间的“距离”,并允许一些容差(即:插入额外调用、丢失一个调用、一个调用被另一个调用替换)。

有没有什么算法可以或多或少做到这一点,我可以仔细阅读


(注:我正在使用Python和SQLite,但是我欢迎任何关于如何做这件事的伪想法)

> P>如果我理解正确,我认为你应该考虑存储对函数调用并存储这些调用之间的地址距离。比如:

malwareID       functionA  distance functionB       order

1               socket    10        bind            1
1               bind      10        listen          2
1               listen    10        bind            3
1               bind      10        recv            4

通过这种方式,您可以执行简单的SQL查询,其中可以进行计数(*),以检查是否有足够的匹配项引起恶意软件安全问题。

您要查找的内容中有一部分将被分类为。这是一个非常广泛的主题,即使没有距离hints@NiklasB. 谢谢,我已经查看了wiki页面,它看起来确实像我要找的。显然,有一些Python模块实现了这一点。这些库似乎主要用于字符串,但我正在考虑将每个函数调用转换为某个字符(即:socket='a',bind='b'等)。然后我可以使用difflib来比较两个字符串。这样做听起来合理吗?这种方法的问题是,您需要将字符串与数据库中的所有样本进行比较。有很多方法可以在次线性时间内找到匹配项,但这要复杂得多。+1!但愿我自己也考虑过,或者你两周前就回答了!我已经交上了我的项目:)结合Niklas B.在评论中的建议应该会很好,我会尝试一下。