如何从反编译源创建病毒签名

逆向工程 拆卸 部件 字节码 恶意软件
2021-07-02 23:35:10

我有一个问题,我必须为 Stoned Virus 创建病毒签名(尽管这可能适用于任何病毒/文件)。

让我们假设我有一个编译和反编译程序的副本。然后我继续确定病毒中最重要的部分,这些部分将始终存在于代码中。据我所知,我现在必须在已编译的病毒中找到相应的字节,以便为病毒的关键部分创建字节签名。

我如何继续从我在反编译版本中识别的代码中找到编译源中的相应字节?

额外的:

  • 代码在汇编中
  • 简单地对整个文件使用哈希签名不是一种选择
  • 目前我只有汇编代码,但我总是可以编译这个
  • 我知道 Stoned 通常位于引导扇区而不是文件中。这只是一个学术练习,将与任何病毒相关。

编辑:

这样做的目的是能够创建可用于扫描文件系统以查找受感染文件以及可能受感染文件和病毒代码变体的病毒签名。出于这个原因,我不能简单地使用整个文件的散列,我需要使用病毒的特定部分。我可以识别这些部分,但我不知道如何在我识别的病毒部分的机器代码中找到匹配的字节。

1个回答

有多种方法可以做到这一点。一些不熟悉签名扫描的人使用整个文件的 MD5 哈希值。这是非常有缺陷的,因为寄存器的切换甚至只是文件的时间戳都会改变整个签名。

另一种常用的方法是 YARA ( http://plusvic.github.io/yara/ )。他们网页上的一个很好的例子:

rule silent_banker : banker
{
    meta:
        description = "This is just an example"
        thread_level = 3
        in_the_wild = true

    strings:
        $a = {6A 40 68 00 30 00 00 6A 14 8D 91}
        $b = {8D 4D B0 2B C1 83 C0 27 99 6A 4E 59 F7 F9}
        $c = "UVODFRYSIHLNWPEJXQZAKCBGMT"

    condition:
        $a or $b or $c
}

这里他们说 A、B 或 C 字节之一应该在文件中。

另一种使用的方法(但这更像是一种启发式方法)是检测它试图隐藏的方式。例如混淆、加密奇数跳转(如 pop、ret 跳转到地址)。

另一种经常使用的方法(虽然这不是基于签名的)是 IOC,请参见:http : //www.openioc.org/

我认为您正在寻找 YARA。编写 YARA 签名的注意事项,优秀的​​恶意软件/漏洞作者会随机化他们所能做的一切。因此,请尝试找到“不可更改”的部分。