我有一个问题,我必须为Stoned Virus创建病毒签名(尽管这可能适用于任何病毒/文件)。然后,我继续确定病毒中最重要的部分,这些部分将始终存在于代码中。据我了解,我现在必须在已编译的病毒中找到相应的字节,以便为该病毒的关键部分创建字节签名。

如何继续在已找到的病毒中找到相应的字节?

额外:


代码在汇编中
仅使用哈希签名整个文件不是一个选择
当前我只有汇编代码,但是我可以随时编译该文件。
我知道Stoned通常位于引导扇区中,而不是文件中。这只是一项学术活动,并且与任何病毒都有关。

编辑:一个文件系统,以查找受感染的文件以及可能受感染的文件和病毒代码的变体。因此,我不能简单地使用整个文件的哈希,而需要使用病毒的特定部分。我可以识别出那些零件,但是我不知道如何在机器代码中找到所识别出的病毒零件的匹配字节。

评论

您正在使用哪个反汇编程序?我还没有看到没有一个选项可以与反汇编一起输出原始操作码。

@VitalyOsipov至少NDISASM会输出每条指令的原始二进制代码(包括操作码)以及反汇编。

#1 楼

有很多方法可以做到这一点。签名扫描新手有些人使用整个文件的MD5哈希值。这是非常有缺陷的,因为寄存器的切换,甚至只是文件的时间戳都会改变整个签名。 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字节之一应该在文件中。

使用的另一种方法(但是,这更多是一种启发式方法)是检测其试图隐藏的方式。例如混淆,加密奇数跳转(如弹出,重新跳转到地址)。 .openioc.org /

我认为您正在寻找YARA。
有关编写YARA签名的说明,优秀的恶意软件/漏洞作者会随机分配所有内容。因此,请尝试查找“不可更改”的部分。

评论


好吧,我将看一下YARA,如果我有以下命令,该如何到达像$ a这样的十六进制行:MOV ax,bx XOR ax,ax?我是否只是将这些命令放入十六进制编辑器并获得相应的值?

–神秘人
2014年5月21日在7:55

答案是操作码。 (mathemainzel.info/files/x86asmref.html)您可以为此使用任何适当的反汇编程序。

– Stolas
2014年5月21日在8:23

如果您需要x86程序集的二进制编码(通常表示为十六进制字节)来进行搜索,则应考虑到许多x86指令具有2种或更多种可能的编码。例如,在32位x86中,mov ax,bx可以通过以下方式编码:66 89 d8(mov r / m16,r16)或66 8b c3(mov r16,r / m16)。

–nrz
14年5月21日在11:41