我正在努力展示恶意软件扫描的一些原则(我不知道这是否是传统的#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,但我欢迎任何有关如何执行此操作的伪编码想法)
答案 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(*)来检查是否有足够的匹配来引发恶意软件安全问题。