一系列行中不完全匹配的搜索算法

时间:2014-05-09 14:03:15

标签: python sql algorithm search search-engine

我正在努力展示恶意软件扫描的一些原则(我不知道这是否是传统的#34;方法,但我相信它会在某种程度上起作用,无论如何,我和#39;我试图实现它)。

在此阶段,我尝试在反汇编程序中映射特定函数调用(即:网络调用),并检查我的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

目前我只能查看直接比赛。我反汇编目标程序,检索所有网络函数调用及其地址,并检查表中的直接匹配(即:SELECT malwareID WHERE address = 'addr' AND function = 'func')。这可以检测恶意软件的某些变体,但大部分都不起作用,因为它取决于在同一地址具有相同函数调用的变体。

我想做的是通过他们的'命令在数据库中搜索函数调用。让我们说在反汇编和提取函数调用后,我最终会得到一个这样的列表:

8041000     socket
8041010     bind
8041020     listen
8041030     bind
8041040     send
8041050     recv

虽然地址与数据库中存储的已知变体不匹配,但是呼叫的顺序和距离"两次通话之间的呼叫是相同/相似的,只不过这个新变种中有一个新的send来电。

由于我从未做过任何软件工程或课程,因此您学习了这些"搜索"算法,我需要指向正确的方向。

我正在寻找一种搜索数据库以匹配一系列行的算法,可能会考虑到距离'在呼叫之间,并允许一些容忍(即:插入额外的呼叫,缺少一个呼叫,一个呼叫被其他呼叫替换)。

是否有任何算法或多或少地执行此操作我可以阅读?

(注意:我正在使用Python和sqlite,但我欢迎任何有关如何执行此操作的伪编码想法)

1 个答案:

答案 0 :(得分:1)

如果我理解正确,我认为您应该考虑存储功能调用对并存储这些调用之间的地址距离。类似的东西:

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查询,在其中可以执行count(*)来检查是否有足够的匹配来引发恶意软件安全问题。