V. Các đặc điểm của F-VIRUS
7. Khảo sát file COM bị nhiễm virus One Half.
Để khảo sát trên file bị lây nhiễm, chúng ta có trong tay file format.com bị lây nhiễm và file format.ok là file không bị lây nhiễm. File format.com bị lây nhiễm có kích th−ớc lớn hơn ban đầu DD8h (3544) byte. Kích th−ớc của file format.ok là 22916 byte (5984h), còn kích th−ớc của format.com là 26460 byte (675Ch).
Chúng ta sẽ so sánh đối chiếu hai file, kết hợp dịch ng−ợc để dò theo vết hoạt động của virus One Half.
Nh− truyền thống, hai file khác nhau ở 3 byte đầu tiên, ở file bị nhiễm, đó là một lệnh nhảy: E9 EA 53 (jmp $+53EDh). Vị trí này không phải là phần đầu của mã virus ghép thêm vào file, mà đó là vị trí một đoạn mã ch−ơng trình đã bị nó thay thế. Đoạn mã đó bắt đầu từ 53EDh:
F9 FB 50 F5 F5 F9 F9 E9 F0 03 Dịch ng−ợc: stc sti push ax cmc cmc stc jmp $+03F3h ; (57E6h)
Đoạn thứ hai bị thay thế (bắt đầu tại offset 57E6h): FC F8 2E 16 F5 E9 03 FE Dịch ng−ợc: cld clc cs: push ss cmc jmp $+FE06h ; (55F1h)
Đoạn thứ ba bị thay thế (bắt đầu tại offset 55F1h): F9 2E F5 F8 36 1F E9 2B FC Dịch ng−ợc: stc cs: cmc clc ss: pop ds jmp $+FC2Eh ; (5225h)
Đoạn thứ t− bị thay thế (bắt đầu tại offset 5225h): 36 BF 84 5A F5 F5 E9 AD 03 Dịch ng−ợc: ss: mov di,5A84h cmc cmc jmp $+03B0h ; (55DBh)
Đoạn thứ năm bị thay thế (bắt đầu tại offset 55DBh): F8 B9 8C 58 3E FC 2E EB 5B
Dịch ng−ợc:
clc mov cx,588Ch
ds: cld cs:
jmp $+5Dh ; (563Fh)
Đoạn thứ sáu bị thay thế (bắt đầu tại offset 563Fh): 31 0D 3E 36 FB E9 85 02 Dịch ng−ợc: xor [di],cx ds: ss: sti jmp $+0288h ; (58CCh)
Đoạn thứ bảy bị thay thế (bắt đầu tại offset 58CCh): 81 C1 01 B2 E9 48 FC
Dịch ng−ợc:
add cx,0201h
jmp $+FC48h ; (551Bh)
Đoạn thứ tám bị thay thế (bắt đầu tại offset 551Bh): 47 FB FD 2E 36 F8 E9 83 03 Dịch ng−ợc: inc di sti std cs: ss: clc jmp $+0383h ; (58A7h)
Đoạn thứ chín bị thay thế (bắt đầu tại offset 58A7h): F9 2E F5 F8 36 1F E9 2B FC
Dịch ng−ợc:
jmp $+FDAFh ; (565Dh)
Đoạn thứ m−ời bị thay thế (bắt đầu tại offset 565Dh): 75 E0 E9 71 06
Dịch ng−ợc:
jnz 563Fh ; nhảy trở lại đoạn thứ sáu jmp $+0671h ; (5CD3h)
Nh− vậy virus One Half đã thay thế 10 đoạn mã trong file ban đầu bằng 10 đoạn mã của mình, tập hợp lại, chúng ta thấy nó làm các công việc nh− sau:
Đoạn 1 push ax
Đoạn 4 mov di,5A84h
; Là kích th−ớc file ban đầu, cũng là offset 0 của virus Đoạn 5 mov cx,588Ch
Đoạn 6 xor [di],cx Đoạn 7 add cx,0B201h Đoạn 8 inc di
Đoạn 9 cmp di,685Ch ; Là kích th−ớc của file bị nhiễm Đoạn 10 jnz Đoạn 6
jmp 5CD3h
Nh− vậy, chúng ta thấy phần cài trong thân của file nguyên thể giúp virus One Half giải mã toàn bộ phần mã của mình rồi mới nhảy tới vị trí hoạt động thực sự. Sau khi giải mã, phần ghép thêm của virus One Half của file nguyên thể chính là toàn bộ phần thân của One Half.
Lệnh tại địa chỉ offset 5CD3h của file t−ơng ứng với offset 034Fh trong phần thân của virus One Half. Chúng ta khảo sát chúng.
5DD3 call 5DD6h
5DD6 pop si ; si=5DD6h sub si,352h ; si=5A84h
mov [si+02B8],si ;Ghi si=5A84h vào off 2B8h của mã VR. push es
push si cld
inc word ptr [si+0DD6h] mov byte ptr [si+0BABh],74h xor ax,ax
mov es,ax
mov ax,es:[046Ch] ; ax=đếm thời gian 18.2lần/s mov [si+56Ah],ax
mov [si+0D71h],ax mov ax,4B53h
int 21h ; Kiểm tra One Half trong bộ nhớ. cmp ax,454Bh ; Đã nhiễm trong bộ nhớ trong jz 5E67h
... ; Install virus vào bộ nhớ và đĩa cứng. 5E67 jmp 5F1Fh
...
5F1F pop bx ; bx=offset 0 của virus push cs
pop ds push cs pop es
lea si,[bx+40h] ; si=offset 40h của thân virus add bx,2Ah ; bx=offset 2Ah của virus mov cx,0Ah loc_loop_1: mov di,[bx] push cx mov cx,0Ah repz movsb pop cx inc bx inc bx loop loc_loop_1 ...
mov si,bx ; bx=5A94h mov di,100h
mov cx,3 repz movb pop ax jmp 5F9Dh
...
5F9D jmp far cs:[bx+14h] ; jmp cs:100
Đoạn mã từ 5F1Fh đã thể hiện cách thay thế trở lại các đoạn mã ch−ơng trình nguồn sau khi virus hoạt động xong. Chúng tiến hành thay thế 0Ah (10) đoạn, mỗi đoạn 0Ah (10) byte, các đoạn liên tiếp nhau bắt đầu từ địa chỉ offset 40h trong phần thân của virus, còn địa chỉ offset trong ch−ơng trình nguồn đ−ợc thay thế là 0Ah (10) word liên tiếp, bắt đầu từ địa chỉ offset 2Ah trong phần thân của virus. Còn 3 byte đầu tiên đ−ợc cất tại offset 10h trong phần thân của virus.
Các kết quả trên đã đ−ợc kiểm tra lại trên một số file dạng .COM bị nhiễm One Half khác nh− COMMAND.COM, SK.COM.