#1 楼
按复杂度递增的顺序:低变,多变,变质。前两个术语通常应用于解密器。我们(反病毒行业)以这种方式定义它们:齐纯-解密器具有很少的可变元素,这不会影响代码的大小或形状。这意味着变量元素通常是固定大小的指令,但也可以应用于寄存器初始化。
同形示例
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病毒(此处有详细信息)。这里有关于该主题的详细论文和实际示例)
#2 楼
多态代码(通用术语)不同(不同的加密密钥)代码但结果相同
低态代码:基于模式的多态性/>示例:
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
亚变代码:具有自动变异的多态-结果略有不同
评论
security.stackexchange.com/questions/4619/…您确定我们不能做得比这个简短的回答更好吗?
变形和多态之间的区别对我来说仍然不清楚...如果有人可以提供更好的定义,我可以接受。