gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:00:34 24 4
gpt4 key购买 nike

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

在这个阶段,我试图在反汇编程序中映射特定的函数调用(即:网络调用),并检查我的 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 调用是滑入这个新变体。

因为我从来没有做过任何软件工程或类(class),你可以在其中学习这些类型的“搜索”算法,所以我需要指出正确的方向。

我正在寻找一种算法,该算法可以在数据库中搜索与一系列行的匹配项,也许还考虑到调用之间的“距离”,并允许一定的容差(即:插入额外的调用,错过一个电话,一个电话被另一个电话取代)。

是否有任何算法可以或多或少地做到这一点,我可以继续阅读?

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

最佳答案

如果我理解正确,我认为您应该考虑存储成对的函数调用并存储这些调用之间的地址距离。像这样的东西:

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

关于python - 行系列中不完全匹配的搜索算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23566632/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com