变形、寡态和多态恶意软件之间有什么区别?

逆向工程 混淆 恶意软件
2021-06-11 05:37:39

恶意软件使用多种方法来逃避杀毒软件,一种是在复制时更改其代码。我主要看到了三种类型的技术,它们是:变形恶意软件寡态恶意软件多态恶意软件(我可能错过了一种)。这些技术之间的主要区别是什么?它们的作用是什么?

2个回答

按照复杂性增加的顺序:寡态、多态、变形。

前两个术语通常适用于解密器。我们(反病毒行业)这样定义它们:寡态 - 具有很少可变元素的解密器,不会影响代码的大小或形状。这意味着可变元素通常是固定大小的指令,但它也可以应用于寄存器初始化。

寡态实例

std ;fake, might be replaced by cld / nop / xchg ax, cx / ...
mov cx, size
mov ax, ax ;fake, might be replaced by mov bx, bx / or cx, cx / ...
mov si, decrypt_src
cld ;fake
mov di, decrypt_dst
or ax, ax ;fake
mov bl, key
and bp, bp ;fake
decrypt:
xor [di], bl
xchg dx, ax ;fake
inc di
cld ;fake
loop decrypt

在这种情况下,di可以将寄存器交换为si,例如。非常简单的更换。

多态

具有潜在高度可变元素的解密器,这确实会影响代码的大小和/或形状。这意味着可以应用各种更改,包括子程序创建、大块垃圾指令、代码“孤岛”,甚至算法寄存器初始化(示例在这里)。

变质的

高度可变的元素直接应用于身体。在这种情况下通常没有解密器。相同的多态技术也适用于代码本身。最著名的例子是 2002 年的 Simile 病毒(详情请点击此处)。有关于该主题的详细论文和实际示例here

  • 多态代码(通称)不同(不同的加密密钥)代码但结果相同
  • 寡态代码:基于模式的多态性

    一些寡态代码的 2 种不同执行:

    MOV ECX,FC07379C    PUSH 40
    XOR ECX,FC0737DC    PUSH Tada
    PUSH ECX            NOP
    NOP                 PUSH Helloworld
    PUSH Tada           PUSH 0
    NOP                 NOP
    MOV ECX,F8477840    CALL MessageBoxA
    XOR ECX,F80779BC    MOV ECX,0A2EF248
    PUSH ECX            XOR ECX,0A2EF248
    NOP                 PUSH ECX
    PUSH 0              CALL ExitProcess
    CALL MessageBoxA
    PUSH 0
    PUSH 00400136
    PUSH ExitProcess
    CALL $ + 5
    RETN
    
  • 变形代码:具有自动变异的多态性 - 结果略有不同