home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Frozen Fish 2: PC
/
frozenfish_august_1995.bin
/
bbs
/
d03xx
/
d0355.lha
/
Berserker
/
berserker.s
< prev
next >
Wrap
Text File
|
1990-06-12
|
27KB
|
1,130 lines
* SOS * only a message for a tool which rips source after guru/reset!
****************************************************************************
*
* B E R S E R K E R IV.a
* -----------------------
*
* ⌐ Copyright 1988, 1989, 1990 by Ralf Thanner
*
* This code is entirely written in assembler for the Kuma Seka assembler
*
* Executable program and source code are both in the PUBLIC-DOMAIN!
*
* A small copy fee for Berserker is okay, but anything which looks like
* commercial redistribution is forbidden (remember that!).
*
**************************************************************************
*
* REVISION HISTORY:
* =================
*
* R V1.0 - Just a primitive SCA finder and killer.
*
* R V1.c - Added Byte Bandit & Byte Warrior killer.
* - Improved SCA & SCA mutants killer routine.
* -> OBELISK, AEK, LSD, PENTAGON, BAMIGA SECTOR ONE,
* WARHWAK, MICROMASTER & NORTHSTAR...
*
* R V2.b - Now also finds the Exterminator (LAMER).
*
* R V2.d - Now finds the first link virus (IRQ TEAM 41).
*
* V2.e - Added alert box. Idea by Olaf Barthel.
* - Some cleanups and bug-fixes done.
*
* R V2.e+ - Doesn't refuse to work with Kick 1.3 any more.
* - Added custom bootblock writer.
* - Added kill cold-cool vectors;
* There are just too many SCA clones on the market
* and it is saver to clear these pointers.
*
* R V3.0 - Now also finds the BSG 9 link virus.
* - Second (and final?) code cleanup for public
* release (YEAH!!!).
* - Removed the custom bootblock writer, too many guys
* thought Berserker to be some kind of virus in
* disguise.
*
* R V3.0+ - Extended to find Gaddafi and Disk-Doctor viruses.
*
* V3.1 - Extended to find the REVENGE BOOTLOADER virus.
* -> THIS IS A NEW ONE!!!
* - Bug-fix in EXTERMINATOR routine done.
* -> should now find ALL lamer versions....
* - Code cleanup (added some sub-routines).
*
* V3.2 - Extended to find REVENGE (is an old one, but some
* nice guys told me, that berserker should also find
* the old ones....and because BERSERKER crashed when
* memory was infiltrated by REVENGE )
*
* V3.2b - Shortening, speeding up & cleaning the code.
* ( and berserker still works.... )
*
* R V3.39c+ - JOKE....
*
* V3.5 - Added Xeno 'killer' routine by STEVE TIBBET.
*
* V4.0 - Added a more userfriendly Cli-Interface and the
* possibility to start BERSERKER from workbench.
*
* R V4.0a - WHAAA, what a pity: forgot to reply message..
* Bug now fixed... Thanks to Olaf for this hint.
* - Shortened and improved code again.
*
* R = released version
*
**************************************************************************
* BECAUSE OF THE LARGE AMOUNT OF TEXTDATA WOULD I SUPPOSE
* THAT YOU CRUNCH BERSERKER. ( with any hunk packer.. )
**************************************************************************
*
* RALF THANNER
* ELLERSTASSE 83
* 4000 DUESSELDORF 1
* WEST GERMANY
*
**************************************************************************
*
* This is the assembly language source code for BERSERKER IV.a
* (Cleaned up on request from Ralf Thanner by Olaf 'Olsen' Barthel)
*
**************************************************************************
;
;
; exec.library
;
forbid= -132
permit= -138
freemem= -210
findname= -276
findtask= -294
getmsg= -372
replymsg= -378
waitport= -384
closelib= -414
openlib= -552
;
; dos.library
;
open= -30
close= -36
read= -42
write= -48
output= -60
delay= -198
mode_old= 1005
;
; intuition.library
;
dispalert= -90
;
;
**********************************************************************
powerup:
movem.l d0-d7/a0-a6,-(a7)
bset #1,$bfe001
move.l $04.w,a6
suba.l a1,a1
jsr findtask(a6)
move.l d0,a4
tst.l $ac(a4)
bne.s cli_call
lea $5c(a4),a0
jsr waitport(a6)
lea $5c(a4),a0
jsr getmsg(a6)
move.l d0,message
movem.l (a7)+,d0-d7/a0-a6
bra.L workbench
* CLI-PARAMETER HANDLER -> same as in MEGUARD III
cli_call:
movem.l (a7)+,d0-d7/a0-a6
subq #1,d0
beq.s no_cli_parameter
which_parameter:
cmp.b #$20,(a0)+
bne.s parameter_found
dbra d0,which_parameter
bra.s no_cli_parameter
parameter_found:
move.b -(a0),d0
cmp.b #'?',d0
beq.L instructions
no_cli_parameter:
move.l $04.w,a6 ; $04 is ExecBase
jsr FORBID(a6) ; forbid all tasks
bsr.L open_libs
bsr.L open_output
bsr.s kill_viruses
move.w virusflag,d0
cmp.w #0,d0 ; No virus found!!!!
bne.s exit4 ; Lucky ones...
move.l #mes0,d2
move.l #mes0length,d3
bsr.L writer
bra.s exit3
exit4: bsr.L alert ; Virus found
exit3: move.l $04.w,a6
jsr PERMIT(a6) ; Allow other tasks
exit5: bsr.L close_libs
moveq #00,d0
rts
exit_workbench:
bsr.L close_libs
move.l $04.w,a6
jsr forbid(a6)
move.l message,a1
jsr replymsg(a6)
moveq #00,d0 ; For clear entry into CLI
rts ; Back to CLI...
************************* SUB ROUTINES *********************************
kill_viruses:
bsr.L Xeno ; XENO - Link
bsr.L revenge ; REVENGE (old one)
bsr.L revenge_boot ; REVENGE - BOOTLOADER
bsr.L gadaffi ; Gadaffi
bsr.L disk_doctor ; Disk Doctor
bsr.L sca ; Checks for SCA & mutants
bsr.L dasa ; Checks for Byte Warrior
bsr.L irq ; Link
bsr.L bsg ; Link
bsr.L exterminator
bsr.L bytebandit
bsr.L killcold_cool ; Always clear the cold and
rts ; the cool capture
workbench:
bsr.L open_libs
bsr.L open_con
bsr.s work
bsr.L close_con
bra.s exit_workbench
work:
bsr.L write_con_txt
bsr.L read_con
moveq #0,d0
move.b input_buffer,d0
cmp.b #'?',d0
beq.s work03 ; instructions
cmp.b #'q',d0
beq.s work04
cmp.b #'Q',d0 ; leave
beq.s work04
cmp.b #'c',d0
beq.s work05 ; kill virus
cmp.b #'C',d0
beq.s work05
bra.s work
work03:
bsr.L write_con_ins
mouse:
move.l #$0a,d1
jsr delay(a5)
btst #10,$dff016
bne.s mouse
clr.w input_buffer
bra.s work
work04: rts
work05:
move.l $04.w,a6
jsr forbid(a6)
bsr.L kill_viruses
move.w virusflag,d0
cmp.w #0,d0
bne.s work06
move.l #mes7,d2
move.l #mes7length,d3
bsr.L writer
move.l $04.w,a6
jsr permit(a6)
move.l dosbase,a5
work07:
move.l #$0a,d1
jsr delay(a5)
btst #10,$dff016 ; right MB
bne.s work07
bra.L work
work06: bsr.L alert
clr.w virusflag
move.l $04.w,a6
jsr permit(a6) ; Allow it all
bra.L work
open_libs:
move.l $04.w,a6 ; Open's dos.library
moveq #00,d0
lea.l Dosname(pc),a1 ; And gets outputhandle
jsr openlib(a6) ; for the messages...
move.l d0,dosbase
move.l $04.w,a6
moveq #0,d0
lea Intname(pc),a1
jsr openlib(a6)
move.l d0,IntBase ; buffering the intbase
rts
close_libs:
move.l $04.w,a6
move.l Dosbase,a1
jsr closelib(a6)
move.l IntBase,a1 ; close intuition
jsr closelib(a6)
rts
open_con:
move.l Dosbase,a5
move.l #con,d1
move.l #mode_old,d2
jsr open(a5)
move.l d0,handle
rts
close_con:
move.l Dosbase,a5
move.l handle,d1
jsr close(a5)
rts
open_output:
move.l Dosbase,a5
jsr output(a5)
move.l d0,handle
rts
write_con_txt:
move.l #con_text,d2
move.l #cende-con_text,d3
bsr.s writer
rts
read_con:
move.l Dosbase,a5
move.l handle,d1
clr.w input_buffer
move.l #input_buffer,d2
move.l #2,d3
jsr read(a5)
rts
write_con_ins:
move.l #con_help,d2
move.l #con_help_ende-con_help,d3
bsr.s writer
rts
writer: move.l Dosbase,a5
move.l handle,d1
jsr write(a5)
rts
writer1:
move.l Dosbase,a5
move.l handle,d1
jsr write(a5)
move.l handle,d1
move.l #mes,d2
move.l #meslength,d3
jsr write(a5)
rts
instructions:
bsr.L open_libs
bsr.L open_output
move.l #mes15,d2 ; Prints out the instructions
move.l #mes15length,d3
bsr.L writer
jmp exit5
alert: move.l Intbase,a6
lea alert1(pc),a0
moveq #00,d0 ; Recovery Alert
move.l #28,d1
jsr dispalert(a6)
rts
killcold_cool:
move.l $04.w,a6
moveq #0,d3
move.l d3,46(a6) ; cool-capture normal
move.l d3,42(a6) ; cold-capture normal
move.l d3,50(a6)
lea 34(a6),a0 ; New execbase checksum
clr.w d0
moveq #$17,d1
kcc1: add.w (a0)+,d0
dbf d1,kcc1
not.w d0
move.w d0,(a0)
rts
tracker:move.l $04.w,a6
lea 350(a6),a0
lea Trddevice(pc),a1 ; Searches
jsr findname(a6) ; for trackdisk.device
move.l d0,a0
sub.l #28,a0 ; that's the most used
rts ; pointer in trd.dev...
filler: move.l a0,a1 ; fills
add.l #$400,a1 ; the virus with zeros
moveq #0,d0
fill1: move.l d0,(a0)+
cmpa.l a0,a1
bge.s fill1
rts
clear_kicktag:
move.l $04.w,a6
moveq #0,d0
move.l d0,554(a6) ; Kickchecksum
move.l d0,550(a6) ; Kicktagptr
move.l d0,546(a6) ; Kickmemptr
rts
******************* V I R U S K I L L I N G P A R T ********************
* here begins the part taken from VIRUSX4.0 by STEVE TIBBET
;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
;
; Check for and Remove the Xeno Virus
;
;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
xeno:
move.l DOSBase,a0 ; Get addr of Open() Vector
sub.w #$1c,a0
move.l (a0),a0
move.l a0,d0 ;: If Bit 0 of the Address is set,
btst #0,d0 ;: then it's not really an address
bne.s NoVirus_xeno
cmp.l #$B47C03EE,(a0)
bne.s NoVirus_xeno
cmp.l #$67000224,4(a0)
bne.s NoVirus_xeno
;:: If we're here, we're fairly sure A0 is pointing to the
;:: base of the Xeno virus (well, not it's base, but the address
;:: of the first vector it stole, the Open() one.
;:: So we'll nuke it. 8-)
move.w #$6000,$4(a0)
move.w #$603E,$240(a0)
move.w #$601E,$29C(a0)
* END OF PART
move.w #$1941,virusflag
move.l #mes13,d2
move.l #mes13length,d3
bsr.L writer
NoVirus_xeno:
rts
; i hate to do this, but until now i never got a xeno virus and was
; therefore not able to do my own killer.
; in addition to that: I HATE THE WAY S.TIBBET KILLS VIRUSES!!!!!!!
; it is not very intelligent to look for a checksum....
revenge:
move.l $04.w,a6
cmp.l #$7e060,46(a6)
bne.s revenge_ende
move.l $c0,d0
cmp.l #$0c794ef9,$c0
bne.s revenge_ende
move.l $7e068,-454(a6) ; restoring the old pointers
move.l $7e06e,148(a6) ; by grabbing his saved systemcalls
lea $7e000,a0 ; the virus
bsr.L filler
lea $c0,a0 ; CLEAR
moveq #0,d0 ; his routine
moveq.l #$10,d6 ; located at $c0
rev1:
move.l d0,(a0)+
dbf d6,rev1
bsr.L killcold_cool ; out of memory!! HE HE..
move.w #$1941,virusflag
move.l #mes12,d2
move.l #mes12length,d3
bsr.L writer1
revenge_ende:
rts
*************************************************************************
* REVENGE is a stupid one, it copies a small CONTROLLER part down to
* $c0 and is ALWAYS located at $7e000. (No interest in Fast Mem!!)
* I only added this one, because it was easy and BERSERKER III crashed
* when REVENGE was in memory. (uses cold cap., 148(a6) & -454(a6) DOIO)
*************************************************************************
revenge_boot: ; seems to be a brand new one...
bsr.L tracker
move.l a0,revenge1
move.l (a0),d4
swap d4
cmp.b #$fe,d4 ; Is this pointer normal? (V1.2)
beq.L revenge_boot_ende
cmp.b #$ff,d4 ; Is this pointer normal? (V1.3)
beq.L revenge_boot_ende
move.l $4.w,a6 ; using his own check
moveq #0,d0 ; routine...
move.w $94(a6),d0
and.l #$f0,d0
cmp.w #$f0,d0
beq.L revenge_boot_ende ; not in memory
move.l (a0),a1
add.l #$228,a1
move.l (a1),revenge_track ; -28(trackdisk.device)
add.l #$4,a1
move.l (a1),revenge_rast ; 148(a6)
add.l #$4,a1
move.l (a1),revenge_alloc ; the part he spreads
sub.l #$3c4,a1
move.l a1,revenge_mem ; his own start
move.l revenge1,a0 ; restoring pointers
move.l revenge_track,(a0)
move.l revenge_rast,$94(a6)
bsr.L clear_kicktag
move.l revenge_mem,a0
bsr.L filler
move.l revenge_alloc,a0
bsr.L filler
move.l revenge_alloc,a1 ; he allocatesw memory..
move.l #$400,d0 ; ani i give it back...
jsr freemem(a6)
move.w #$1941,virusflag
move.l #mes11,d2
move.l #mes11length,d3
bsr.L writer1
revenge_boot_ende:
rts
*************************************************************************
*
* seems to be a new one -> contains ASCII Text 'REVENGE BOOTLOADER'
*
*************************************************************************
disk_doctor:
move.l $04.w,a6 ; Disk-Doc uses cold & cool capture
move.l 46(a6),d0
cmp.l #0,d0 ; No other virus uses both
beq.L dd0 ; pointers... [ hope so !!! ]
move.l 42(a6),d0
cmp.l #0,d0
beq.L dd0
move.l 42(a6),diskdoc ; I had to add this very
move.l diskdoc,a0 ; complicated routine because
add.l #$c4,a0 ; Disk-Doc uses or changes:
move.l a0,a1 ; - cool capt.
addq.l #4,a1 ; - cold capt.
move.w #$4e75,(a1) ; - DoIO
jsr (a0) ; - 148(a6) [what's that?]
move.l a2,diskdoc1 ; - The task of clipboard.device
addq.l #6,a2
move.l a2,a3 ; This routine gets the adress of
addq.l #4,a2 ; its task routine and cuts it off
move.w #$4e75,(a2)
jsr (a3)
move.l a0,diskdoc2
bsr.L killcold_cool
move.l $04.w,a6
move.l #$fc06dc,-$1c6(A6); Only Kick 1.2 values, on 1.3
move.l #$fc12fc,148(a6) ; Disk-Doc shouldn't work...
move.l diskdoc,a0
move.l a0,a1
add.l #$1a0,a1
moveq #0,d0
dd2: move.l d0,(a0)+
cmpa.l a0,a1
bge.s dd2
move.l diskdoc1,a2
move.w #$4e75,(a2)
move.l diskdoc2,a2
move.w #$4e75,(a2)
move.w #$1941,virusflag
move.l #mes6,d2
move.l #mes6length,d3
bsr.L writer1
dd0: rts
***********************************************************************
*
* DISK-DOCTOR
*
* - After each reset Disk Doctor allocates more memory
* - This was in my opinion the best one, although it could be
* better: - it uses DoIO pointer from Kick 1.2 (crash on 1.3)
* - you can read text in the boot-block
* - it uses the clipboard task for its dirty work
* - it uses cold & cool capture to stay in memory
*
* For such kind of virus Guardian or VirusX are the best killers!!
* ( Find them in the boot and fight them when they are harmless! )
* Same with TIMEBOMB, Berserker can't fight this one........
************************************************************************
gadaffi:
move.l $04.w,a6 ; Gadaffi uses cool capture
cmp.l #0,46(a6) ; for its dirty work...
beq.s gad0 ; no cool capture set
cmp.l #$47414441,$7fb40; Gadaffi
bne.s gad0 ; is ALWAYS to be found at $7fb00
move.l -$1c6(a6),d5 ; $4b0 with 512 kb
swap d5
cmp.w #$fc,d5 ; $fc06dc (1.2) $fc0718 (1.3)
beq.s gad0
move.l 46(a6),gadaf
bsr.L killcold_cool ; Clear its cool pointer
move.l $04.w,a6
move.l #$fc06dc,-$1c6(A6)
bsr.L clear_kicktag
move.l gadaf,a0
sub.l #$dc,a0
bsr.L filler
move.w #$1941,virusflag
move.l #mes4,d2
move.l #mes4length,d3
bsr.L writer1
gad0: rts
********************************************************************
*
* GADAFFI is a mutant version of Byte Warrior
*
* - It changes cool capture, kicktag. and DoIO
* - It is much more stupid than Byte Warrior:
* -> you can read it in the boot...
* -> normally it crashes with Kick 1.3 because
* he uses the DoIO vector of 1.2 itself
* - After 12 resets it tries to kill your drive, or
* was it playing a drive music ?? (I don't see any difference!)
*
********************************************************************
bsg:
move.l $04.w,a6
move.l 546(a6),d0 ; BSG 9 is a resident module
adda.l 550(a6),d0 ; It is still in memory after
adda.l 554(a6),d0 ; a reset
cmp.l #0,d0
beq.s bsgende
move.l 550(a6),a0 ; Searching from A0
move.l a0,a1
add.l #$1000,a1 ; Searching to A1
move.l #$00005454,d0 ; Searching for 'TT'
moveq #0,d1
bsg0:
move.w (a0)+,d1
cmp.w d1,d0
beq.s bsg1
cmpa.l a0,a1
bge.s bsg0
rts ; Nothing found !
; It is not always a virus which
; uses these pointers. It could
bsg1: ; also be your ramdrive....
move.w #$5631,d0
move.w (a0),d1
cmp.w d1,d0
bne.s bsg0
moveq #0,d0 ; Kills it from beginning
move.l a0,a1 ; to 'TTV1' <- its end marker
move.l 550(a6),a0
bsg2:
move.l d0,(a0)+
cmpa.l a0,a1
bne.s bsg2
bsr.L clear_kicktag
move.w #$1941,virusflag
move.l #mes2,d2
move.l #mes2length,d3
bsr.L writer
bsgende:
rts
********************************************************************
*
* BSG 9 is an intelligent version of a link virus
*
* - It always modifies the FIRST file of the startup-
* sequence
* - The file now always is about 2608 bytes long
* - The old file in in the devs dir with
* spaces instead of a name now
* - After the fourth or fifth reset it turns the
* screen black and prints out its stupid message.
*
*********************************************************************
irq: ; changes oldopen
move.l $04.w,a6
move.l -$196(a6),d4
swap d4
cmp.b #$fc,d4 ; V1.2 00fc1430 V1.3 00fc146c
beq.s irq5
move.w #$1942,virusflag
move.l -$196(a6),a4
add.w #8,a4
move.l #$4e714e71,(a4) ; Castrate virus
move.l $04.w,a5
sub.l #$196,a5 ; In this part the old
move.l (a5),a4 ; oldopenlib call
add.l #18,a4 ; is restored...
move.l (a4),(a5)
move.l #mes3,d2
move.l #mes3length,d3
bsr.L writer
irq5: rts
**************************************************************
*
* The IRQ Team Virus was the first link virus
* on AMIGA...
*
* It uses oldopenlibrary for its dirty work.
* In order to work properly with all Kickstart
* versions the IRQ-virus saves the replaced
* sytemcall in memory.
* To let my Berserker work with all kick versions
* I just grab his saved sytemcall in order to
* throw him out properly...
*
**************************************************************
exterminator: ; in trddevice, doio & kicktag... ($4678, $414, $898)
bsr.L tracker
move.l a0,exter
move.l (a0),d4
swap d4
cmp.b #$fe,d4 ; Is the pointer normal (V1.2)
beq.L exe4
cmp.b #$ff,d4
beq.L exe4 ; Is the pointer normal (V1.3)
move.l a6,a5
sub.w #$262,a5 ; In A5 now Exterminator's address..
move.l a5,exter1
move.l (a5),d4
swap d4
cmp.b #$fc,d4 ; Is it the normal system call?
beq.s exe4
move.l exter1,a5
move.l (a5),a0
sub.l #$14e,a0
move.l a0,a1
add.l #$400,a1
moveq #0,d1
moveq #0,d0
exe7:
move.w #$4c41,d0 ; We are looking for 'LAMER'
move.w (a0)+,d1
cmp.w d1,d0
beq.s exe2
cmpa.l a0,a1
bge.s exe7
rts
exe2:
move.w #$4d45,d0
move.w (a0),d1
cmp.w d1,d0
bne.s exe7
add.l #28,a0 ; Here exteminator saves his
move.l (a0)+,a1 ; changed system calls
move.l (a0)+,a2
move.w #$1941,virusflag
bsr.L clear_kicktag
move.l exter1,a0 ; Correct both pointers
move.l a1,(a0)
move.l exter,a0
move.l a2,(a0)
move.l exter1,a5 ; Crucify it
move.l (a5),a0
sub.l #$14e,a0
bsr.L filler
move.l #mes9,d2
move.l #mes9length,d3
bsr.L writer1
exe4: rts
***********************************************************************
sca:
move.l $04.w,a6
move.l 46(a6),d2 ; Cold-capture
cmp.l #0,d2
bne.s sca1
rts
sca1:
move.w #$1941,virusflag
move.l 46(a6),a0
move.l a0,a1
sub.l #$3e,a0 ; We are now searching
add.l #$400,a1 ; for jsr -456(a6) [DoIO]
moveq #0,d1 ; if cold capture is set
moveq #0,d0 ; and in the routine is
sca2: ; a DoIO it is 100% a
move.w #$4eae,d0 ; virus ( mostly mutants)
move.w (a0)+,d1
cmp.w d1,d0
beq.s sca3
cmpa.l a0,a1
bge.s sca2
rts ; Nothing found
sca3:
move.w #$fe38,d0
move.w (a0),d1
cmp.w d1,d0
bne.s sca2
move.l $7eff0,d2 ; Here is the direct test
cmp.l #$53434121,d2 ; if it is SCA or AEK or LSD
beq.s sca4 ; if it is none of them it is
; another mutant SCA...
cmp.l #$4c534421,d2 ; AEK
beq.s scamutants
cmp.l #$41454b21,d2 ; LSD
beq.s scamutants
bne.s scamutants
sca4:
move.l #mes5,d2 ; SCA
move.l #mes5length,d3
bsr.L writer1
bra.s scakill
scamutants:
move.l #mes8,d2 ; Mutant
move.l #mes8length,d3
bsr.L writer1
scakill:
move.l 46(a6),a0
sub.l #$3e,a0
bsr.L filler
bsr.L killcold_cool ; Repairs both vectors
rts
************************************************************************
dasa:
move.l $04.w,a6
move.l -$1c6(a6),d5 ; $4b0 with 512 kb
swap d5
cmp.w #$fc,d5 ; $fc06dc (1.2) $fc0718 (1.3)
bne.s dasa0
move.l $7f804,d5 ; Dasa is ALWAYS at $7f800
cmp.l #$64116dec,d5 ; no need to restore doio
beq.s dasa1 ; pointer (not changed)
rts
dasa0:
move.l #$00fc06dc,-$1c6(a6) ; Remove its pointer
dasa1: move.l -$1c6(a6),a3
sub.l #$16e,a3 ; Its beginning
bsr.L clear_kicktag
move.l #$4ff,d1 ; Delete virus
dasa2: move.b d0,(a3)+
dbf d1,dasa2
move.w #$1941,virusflag
move.l #mes1,d2
move.l #mes1length,d3
bsr.L writer1
rts
****************************************************************
*
* DASA is the Byte Warrior
*
* DASA is always located at $7f800 and since
* it uses a direct jump for DoIO of kick V1.2
* ( jmp $fc06dc ) for his own copy-routines it
* crashes on kick v1.3.
* Therefore I have added this two way search, because
* when it's kick 1.3 DASA can't work but is still in
* memory and I don't like a virus in memory...
*
* ONLY A DEAD VIRUS IS A GOOD VIRUS!!!!
*
***************************************************************
bytebandit: ; Searches for byte bandit
bsr.L tracker
move.l a0,bb1
cmp.l #$00f00000,a0
ble.s bytebandit1 ; OK! DoIO is changed
rts
bytebandit1:
move.l 148(a6),a0 ; Now second test if it
cmp.l #$00f00000,a0 ; is really byte bandit
ble.s bytebandit2 ; LAMER also changes DoIO!
rts
bytebandit2: ; it is byte bandit!!
move.l a0,a4
add.l #$10c,a0 ; Here the pointers are
move.l (a0)+,a1 ; saved...
move.l (a0),a2
move.l bb1,a0
move.l a1,(a0) ; Restoring both
move.l a2,148(a6) ; pointers...
bsr.L clear_kicktag
sub.l #$2ca,a4 ; Its beginning
move.l a4,a0
bsr.L filler
move.w #$1941,virusflag
move.l #mes10,d2
move.l #mes10length,d3
bsr.L writer1
rts
***************** M E S S A G E S AND D A T A S ********************
even
mes: dc.b $0a,'Virus killed, check your disks....'
dc.b $0a,$0a
mesend:
meslength = mesend-mes
even
mes0: dc.b $0a,$9b,'7;32;41m'
dc.b $1b,'[1m'
dc.b ' BERSERKER found ** NO VIRUS ** in memory !!! '
dc.b $1b,'[0m'
dc.b $9b,'0;31;40m'
dc.b $0a,$0a
mes0end:
mes0length = mes0end-mes0
even
mes1: dc.b $0a,'DANGER!! BYTE - WARRIOR (DASA) VIRUS found'
mes1end:
mes1length = mes1end-mes1
even
mes2: dc.b $0a,'DANGER!! BSG 9 LINK - VIRUS killed!!!'
dc.b $0a,'Check first prog. in startup seq. or look into devs.'
dc.b $0a,$0a
mes2end:
mes2length = mes2end-mes2
even
mes3: dc.b $0a,'DANGER!! IRQ LINK - VIRUS killed!!!'
dc.b $0a,'Check 2nd prog. in startup seq. or cli-command DIR.'
dc.b $0a,$0a
mes3end:
mes3length = mes3end-mes3
even
mes4: dc.b $0a,'DANGER!! GADAFFI - VIRUS found!!!'
mes4end:
mes4length = mes4end-mes4
even
mes5: dc.b $0a,'DANGER!! SCA - VIRUS found!!!'
mes5end:
mes5length = mes5end-mes5
even
mes6: dc.b $0a,'DANGER!! Disk-Doctor VIRUS found!!!'
mes6end:
mes6length = mes6end-mes6
even
mes7: dc.b $0a,''
dc.b $0a,$0a,$0a
dc.b $0a,$9b,'7;32;41m'
dc.b ' ** NO KNOWN VIRUS ** found '
dc.b $9b,'0;31;40m'
dc.b $0a,$0a,$0a,$0a
dc.b $1b,'[1m'
dc.b ' PRESS RIGHT MOUSE BUTTON...'
dc.b $1b,'[0m'
mes7end:
mes7length = mes7end-mes7
even
mes8: dc.b $0a,'DANGER!! MUTANT SCA - VIRUS found!!!'
mes8end:
mes8length = mes8end-mes8
even
mes9: dc.b $0a,'DANGER!! EXTERMINATOR (Lamer!) found!!!'
mes9end:
mes9length = mes9end-mes9
even
mes10: dc.b $0a,'DANGER!! BYTE - BANDIT VIRUS found!!!'
mes10end:
mes10length = mes10end-mes10
even
mes11: dc.b $0a,'DANGER!! REVENGE - BOOTLOADER VIRUS found!'
mes11end:
mes11length = mes11end-mes11
even
mes12: dc.b $0a,'DANGER!! REVENGE VIRUS found!'
mes12end:
mes12length = mes12end-mes12
even
mes13: dc.b $0a,'DANGER!! XENO LINK - VIRUS neutralized!!'
dc.b $0a,'Check files on disks and hard-disk with "KV".'
dc.b $0a,$0a
mes13end:
mes13length = mes13end-mes13
even
mes15:
dc.b $0c,$0a,$1b,'[1m',' ***** BERSERKER IV.a *****'
dc.b $1b,'[0m'
dc.b $0a
dc.b $0a,' 1. This Viruskiller finds and destroys the following:'
dc.b $0a,' Byte Bandit, Byte Warrior (DASA), SCA, AEK, LSD,'
dc.b $0a,' OBELISK, WARHAWK, PENTAGON, BAMIGA S1, NORTHSTAR,'
dc.b $0a,' Exterminator (LAMER) all versions, GADAFFI Virus,'
dc.b $0a,' Disk-Doctor Virus, IRQ-Team 41 Virus (Link Virus),'
dc.b $0a,' BSG9 VIRUS (Link Virus), REVENGE BOOTLOADER Virus,'
dc.b $0a,' REVENGE Virus & XENO Link Virus.'
dc.b $0a,' 2. All bootblock viruses will be deleted from memory'
dc.b $0a,' and all changed system pointers will be restored.'
dc.b $0a,' 3. The Link Viruses are only killed in memory. They'
dc.b $0a,' might have infected some prgs. on disk!! Take care!'
dc.b $0a,' 4. Berserker always corrects cold- and coolcapture....'
dc.b $0a,' Berserker works with more memory & all kickstarts.'
dc.b $0a,' 5. Hi to Thorsten, Olaf, Gunnar, Henning and Michael.'
dc.b $0a,' 6. You can also execute Berserker from Workbench.'
dc.b $0a
dc.b $1b,'[1m'
dc.b $0a,' This program is in the PUBLIC DOMAIN!!!'
dc.b $1b,'[3m'
dc.b $0a
dc.b $0a,' ⌐Copyright 1988, 1989, 1990 by Ralf Thanner.'
dc.b $1b,'[0m'
dc.b $0a
mes15end:
mes15length = mes15end-mes15
even
con:
dc.b'CON:20/11/360/150/ BERSERKER IV.a ',0
even
con_text:
dc.b ''
dc.b $0a,$9b,'7;32;41m'
dc.b ' BERSERKER IV (C) 1990 by RALF THANNER '
dc.b $9b,'0;31;40m'
dc.b $0a,$0a,$0a
dc.b ' PLEASE ENTER EITHER:',$0a
dc.b ' --------------------'
dc.b $0a,$0a
dc.b ' "C" or "c" for checking memory.'
dc.b $0a,$0a
dc.b ' "?" for short instructions.'
dc.b $0a,$0a
dc.b ' "Q" or "q" for leaving BERSERKER.'
dc.b $0a,$0a,$0a
dc.b $1b,'[1m'
dc.b ' ENTER YOUR CHOICE: '
dc.b $1b,'[0m'
cende:
even
con_help:
dc.b ''
dc.b $0a,' BERSERKER IV finds the following:'
dc.b $0a,' ---------------------------------'
dc.b $0a,' Byte Bandit, Byte Warrior, SCA, AEK,'
dc.b $0a,' LSD, OBELISK, PENTAGON, BS1, WARHAWK,'
dc.b $0a,' NORTHSTAR, Exterminator Virus (LAMER),'
dc.b $0a,' GADAFFI, Disk - Doctor, IRQ-, Xeno- &'
dc.b $0a,' BSG-9 Link Viruses, REVENGE Virus and'
dc.b $0a,' REVENGE BOOTLOADER Virus.'
dc.b $0a
dc.b $0a,' All bootblock viruses will be killed'
dc.b $0a,' in memory and all system pointers will'
dc.b $0a,' be restored. The Link Viruses will ONLY'
dc.b $0a,' be deleted in memory. They might have'
dc.b $0a,' infected some prgs on disk....'
dc.b $0a,$0a
dc.b $1b,'[1m'
dc.b ' PRESS RIGHT MOUSE BUTTON'
dc.b $1b,'[0m'
con_help_ende:
even
revenge1: dc.l 0
revenge_alloc: dc.l 0
revenge_track: dc.l 0
revenge_rast: dc.l 0
revenge_mem: dc.l 0
diskdoc: dc.l 0
diskdoc1: dc.l 0
diskdoc2: dc.l 0
gadaf: dc.l 0
bb1: dc.l 0
exter: dc.l 0
exter1: dc.l 0
dosbase: dc.l 0
IntBase: dc.l 0
handle: dc.l 0
message: dc.l 0
virusflag: dc.w 0
input_buffer: blk.b 2,0
even
trddevice: dc.b 'trackdisk.device',0
even
IntName: dc.b 'intuition.library',0
even
dosname: dc.b 'dos.library',0
even
alert1: dc.w 178
dc.b 16
dc.b 'Berserker found VIRUS in memory!'
even